XTPSystemHelpers.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:30k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPSystemHelpers
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTPSYSTEMHELPERS_H__)
  22. #define __XTPSYSTEMHELPERS_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #include <oleacc.h>
  28. class CXTPSystemVersion;
  29. // -----------------------------------------------------------------------
  30. // Summary:
  31. //     The XTPSystemVersion function is used for access to the
  32. //     CXTPSystemVersion class.
  33. // Remarks:
  34. //     Call this function to access CXTPSystemVersion members. Since
  35. //     this class is designed as a single instance object you can only
  36. //     access its members through this method. You cannot directly
  37. //     instantiate an object of type CXTPSystemVersion.
  38. // Returns:
  39. //     A pointer to the one and only CXTPSystemVersion instance.
  40. // Example:
  41. //     The following example demonstrates the use of XTPSystemVersion.
  42. // <code>
  43. // bool bIsWinNT = XTPSystemVersion()->IsWinNT4();
  44. // </code>
  45. // See Also:
  46. //     CXTPSystemVersion
  47. // -----------------------------------------------------------------------
  48. _XTP_EXT_CLASS CXTPSystemVersion* AFXAPI XTPSystemVersion();
  49. //===========================================================================
  50. // Summary:
  51. //     CXTPSystemVersion is a OSVERSIONINFO derived class. This class
  52. //     wraps the Win32 API GetVersionEx(...), used to get the current
  53. //     Windows OS version. CXTPSystemVersion is a single instance, or
  54. //     "singleton" object, that is accessed with the Get() method.
  55. //===========================================================================
  56. class _XTP_EXT_CLASS CXTPSystemVersion : public OSVERSIONINFO
  57. {
  58. private:
  59. //-----------------------------------------------------------------------
  60. // Summary:
  61. //     Constructs a CXTPSystemVersion object.
  62. //-----------------------------------------------------------------------
  63. CXTPSystemVersion();
  64. public:
  65. //-----------------------------------------------------------------------
  66. // Summary:
  67. //     Call this member function to check whether or not the
  68. //     operating system is Windows 3.1.
  69. // Returns:
  70. //     true if the OS is Windows 3.1, otherwise returns false.
  71. //-----------------------------------------------------------------------
  72. bool IsWin31() const;
  73. //-----------------------------------------------------------------------
  74. // Summary:
  75. //     Call this member function to check whether or not the
  76. //     operating system is Windows 95.
  77. // Returns:
  78. //     true if the OS is Windows 95, otherwise returns false.
  79. //-----------------------------------------------------------------------
  80. bool IsWin95() const;
  81. //-----------------------------------------------------------------------
  82. // Summary:
  83. //     Call this member function to check whether or not the
  84. //     operating system is Windows 98.
  85. // Returns:
  86. //     true if the OS is Windows 98, otherwise returns false.
  87. //-----------------------------------------------------------------------
  88. bool IsWin98() const;
  89. //-----------------------------------------------------------------------
  90. // Summary:
  91. //     Call this member function to check whether or not the
  92. //     operating system is Windows ME.
  93. // Returns:
  94. //     true if the OS is Windows ME, otherwise returns false.
  95. //-----------------------------------------------------------------------
  96. bool IsWinME() const;
  97. //-----------------------------------------------------------------------
  98. // Summary:
  99. //     Call this member function to check whether or not the
  100. //     operating system is Windows NT 4.
  101. // Returns:
  102. //     true if the OS is Windows NT 4, otherwise returns false.
  103. //-----------------------------------------------------------------------
  104. bool IsWinNT4() const;
  105. //-----------------------------------------------------------------------
  106. // Summary:
  107. //     Call this member function to check whether or not the
  108. //     operating system is Windows 2000.
  109. // Returns:
  110. //     true if the OS is Windows 2000, otherwise returns false.
  111. //-----------------------------------------------------------------------
  112. bool IsWin2K() const;
  113. //-----------------------------------------------------------------------
  114. // Summary:
  115. //     Call this member function to check whether or not the
  116. //     operating system is Windows XP.
  117. // Returns:
  118. //     true if the OS is Windows XP, otherwise returns false.
  119. //-----------------------------------------------------------------------
  120. bool IsWinXP() const;
  121. //-----------------------------------------------------------------------
  122. // Summary:
  123. //     Call this member function to check whether or not the
  124. //     operating system is greater than or equal to Windows 3.1.
  125. // Returns:
  126. //     true if the OS is greater than or equal to Windows 3.1,
  127. //     otherwise returns false.
  128. //-----------------------------------------------------------------------
  129. bool IsWin31OrGreater() const;
  130. //-----------------------------------------------------------------------
  131. // Summary:
  132. //      Call this member function to check whether or not the
  133. //      operating system is of the Windows 9x family, and if it is
  134. //      Windows 95 or a later version.
  135. // Returns:
  136. //      true if the OS is of the Windows 9x family, and is Windows 95
  137. ///     or a later version, otherwise returns false.
  138. //-----------------------------------------------------------------------
  139. bool IsWin95OrGreater() const;
  140. //-----------------------------------------------------------------------
  141. // Summary:
  142. //     Call this member function to check whether or not the
  143. //     operating system is of the Windows 9x family, and if it is
  144. //     Windows 98 or a later version.
  145. // Returns:
  146. //     true if the OS is of the Windows 9x family, and is Windows 98
  147. //     or a later version, otherwise returns false.
  148. //-----------------------------------------------------------------------
  149. bool IsWin98OrGreater() const;
  150. //-----------------------------------------------------------------------
  151. // Summary:
  152. //     Call this member function to check whether or not the
  153. //     operating system is of the Windows 9x family
  154. // Returns:
  155. //     true if the OS is of the Windows 9x family
  156. //-----------------------------------------------------------------------
  157. bool IsWin9x() const;
  158. //-----------------------------------------------------------------------
  159. // Summary:
  160. //     Call this member function to check whether or not the
  161. //     operating system is of the Windows 9x family, and if it is
  162. //     Windows ME or a later version.
  163. // Returns:
  164. //     true if the OS is of the Windows 9x family, and is Windows ME
  165. //     or a later version, otherwise returns false.
  166. //-----------------------------------------------------------------------
  167. bool IsWinMEOrGreater() const;
  168. //-----------------------------------------------------------------------
  169. // Summary:
  170. //     Call this member function to check whether or not the
  171. //     operating system is of the Windows NT family, and if it is
  172. //     Windows NT 4 or a later version.
  173. // Returns:
  174. //     true if the OS is of the Windows NT family, and is Windows NT
  175. //     4 or a later version, otherwise returns false.
  176. //-----------------------------------------------------------------------
  177. bool IsWinNT4OrGreater() const;
  178. //-----------------------------------------------------------------------
  179. // Summary:
  180. //     Call this member function to check whether or not the
  181. //     operating system is of the Windows NT family, and if it is
  182. //     Windows 2000 or a later version.
  183. // Returns:
  184. //     true if the OS is of the Windows NT family, and is Windows
  185. //     2000 or a later version, otherwise returns false.
  186. //-----------------------------------------------------------------------
  187. bool IsWin2KOrGreater() const;
  188. //-----------------------------------------------------------------------
  189. // Summary:
  190. //     Call this member function to check whether or not the
  191. //     operating system is of the Windows NT family, and if it is
  192. //     Windows XP or a later version.
  193. // Returns:
  194. //     true if the OS is of the Windows NT family, and is Windows XP
  195. //     or a later version, otherwise returns false.
  196. //-----------------------------------------------------------------------
  197. bool IsWinXPOrGreater() const;
  198. //-----------------------------------------------------------------------
  199. // Summary:
  200. //     Call this member function to check whether or not the
  201. //     operating system is of the Windows NT family, and if it is
  202. //     Windows Vista or a later version.
  203. // Returns:
  204. //     true if the OS is of the Windows NT family, and is Windows Vista
  205. //     or a later version, otherwise returns false.
  206. //-----------------------------------------------------------------------
  207. bool IsWinVistaOrGreater() const;
  208. public:
  209. //-----------------------------------------------------------------------
  210. // Summary:
  211. //     Use this member function to return the version number of the
  212. //      comctl32.dll. The high-order word of the return
  213. //     value represents the major version number and the low-order
  214. //     word of the returned value represents the minor version number.
  215. // Returns:
  216. //     A DWORD value if successful, otherwise 0L.
  217. //-----------------------------------------------------------------------
  218. DWORD GetComCtlVersion() const;
  219. public:
  220. //-----------------------------------------------------------------------
  221. // Summary:
  222. //     Determines if right-to-left (RTL) formatting is supported by current OS
  223. // Returns:
  224. //     TRUE if right-to-left (RTL) formatting is supported.
  225. //-----------------------------------------------------------------------
  226. BOOL IsLayoutRTLSupported();
  227. //-----------------------------------------------------------------------
  228. // Summary:
  229. //     Determines if ClearType text is supported by current OS
  230. //-----------------------------------------------------------------------
  231. BOOL IsClearTypeTextQualitySupported();
  232. private:
  233. //-----------------------------------------------------------------------
  234. // Summary:
  235. //     Checks to see if the OS is greater or equal to the specified
  236. //     version number
  237. // Returns:
  238. //     true if the OS is greater than or equal to the specified
  239. //     version.
  240. //-----------------------------------------------------------------------
  241. bool GreaterThanEqualTo(const DWORD maj, const DWORD min) const;
  242. //-----------------------------------------------------------------------
  243. // Summary:
  244. //     Checks to see if the OS is equal to the specified version
  245. //     number
  246. // Returns:
  247. //     true if the OS is equal to the specified version.
  248. //-----------------------------------------------------------------------
  249. bool EqualTo(const DWORD maj, const DWORD min) const;
  250. private:
  251. friend _XTP_EXT_CLASS CXTPSystemVersion* AFXAPI XTPSystemVersion();
  252. };
  253. // Depricated
  254. #define XTOSVersionInfo XTPSystemVersion
  255. //===========================================================================
  256. // CXTPModuleHandle class is helper for LoadLibray/GetModuleHandle methods
  257. //===========================================================================
  258. class _XTP_EXT_CLASS CXTPModuleHandle
  259. {
  260. public:
  261. //-----------------------------------------------------------------------
  262. // Module state
  263. //-----------------------------------------------------------------------
  264. enum XTPModuleState
  265. {
  266. xtpModNone,     // Indicates no module found.
  267. xtpModMapped,   // Indicates the module handle was set using GetModuleHandle
  268. xtpModLoaded    // Indicates the module handle was set using LoadLibrary.
  269. };
  270. public:
  271. //-----------------------------------------------------------------------
  272. // Summary:
  273. //     Constructs a CXTPModuleHandle object.
  274. //-----------------------------------------------------------------------
  275. CXTPModuleHandle();
  276. //-----------------------------------------------------------------------
  277. // Summary:
  278. //     Constructs a CXTPModuleHandle object.
  279. // Parameters:
  280. //     lpszModuleName - Pointer to a null-terminated string that names
  281. //                  the .DLL file. The name specified is the
  282. //                  filename of the module and is not related to the
  283. //                  name stored in the library module itself, as
  284. //                  specified by the LIBRARY keyword in the module-
  285. //                  definition (.DEF) file.
  286. //                  If the string specifies a path but the file does
  287. //                  not exist in the specified directory, the
  288. //                  function fails.  When specifying a path, be sure
  289. //                  to use backslashes (), not forward slashes (/).
  290. //-----------------------------------------------------------------------
  291. CXTPModuleHandle(LPCTSTR lpszModuleName);
  292. //-----------------------------------------------------------------------
  293. // Summary:
  294. //     Destroys a CXTPModuleHandle object, handles cleanup and deallocation
  295. //-----------------------------------------------------------------------
  296. virtual ~CXTPModuleHandle();
  297. //-----------------------------------------------------------------------
  298. // Summary:
  299. //     Call this method to LoadLibrary
  300. //-----------------------------------------------------------------------
  301. BOOL Init(LPCTSTR lpszModuleName);
  302. //-----------------------------------------------------------------------
  303. // Summary:
  304. //     This member function is called to load the library specified
  305. //     by 'lpszModule'.  Once the library is loaded, you can
  306. //     retrieve the instance handle by using the HINSTANCE operator.
  307. // Parameters:
  308. //     lpszModuleName - Pointer to a null-terminated string that names
  309. //                  the .DLL file. The name specified is the
  310. //                  filename of the module and is not related to the
  311. //                  name stored in the library module itself, as
  312. //                  specified by the LIBRARY keyword in the module-
  313. //                  definition (.DEF) file.
  314. //                  If the string specifies a path but the file does
  315. //                  not exist in the specified directory, the
  316. //                  function fails.  When specifying a path, be sure
  317. //                  to use backslashes (), not forward slashes (/).
  318. //-----------------------------------------------------------------------
  319. BOOL LoadLibrary(LPCTSTR lpszModuleName);
  320. //-----------------------------------------------------------------------
  321. // Summary:
  322. //     The GetModuleHandle function retrieves a module handle for the specified module
  323. //     if the file has been mapped into the address space of the calling process.
  324. // Parameters:
  325. //     lpModuleName - Pointer to a null-terminated string that contains the name
  326. //     of the module (either a .dll or .exe file).
  327. //-----------------------------------------------------------------------
  328. BOOL GetModuleHandle(LPCTSTR lpszModuleName);
  329. //-----------------------------------------------------------------------
  330. // Summary:
  331. //     The FreeLibrary function decrements the reference count of the loaded
  332. //     dynamic-link library (DLL).
  333. //-----------------------------------------------------------------------
  334. BOOL FreeLibrary();
  335. //-----------------------------------------------------------------------
  336. // Summary:
  337. //     The GetProcAddress function retrieves the address of the specified
  338. //     exported dynamic-link library (DLL) function.
  339. //-----------------------------------------------------------------------
  340. BOOL GetProcAddress(FARPROC* ppFnPtr, LPCSTR lpProcName, DWORD dwMinVer = NULL);
  341. //-----------------------------------------------------------------------
  342. // Summary:
  343. //     Use this member function to return the version number of the
  344. //     module attached to this CLoadLibrary object. The high-order
  345. //     word of the return value represents the major version number
  346. //     and the low-order word of the returned value represents the
  347. //     minor version number.
  348. // Returns:
  349. //     A DWORD value if successful, otherwise 0L.
  350. //-----------------------------------------------------------------------
  351. DWORD GetVersion();
  352. //-----------------------------------------------------------------------
  353. // Summary:
  354. //     This overloaded operator returns a handle to the module
  355. //     indicating success. NULL indicates failure.
  356. // Returns:
  357. //     A handle to the module if successful, otherwise returns NULL.
  358. //-----------------------------------------------------------------------
  359. operator HMODULE () const;
  360. //-----------------------------------------------------------------------
  361. // Summary:
  362. //     This method returns a handle to the module
  363. //     indicating success. NULL indicates failure.
  364. // Returns:
  365. //     A handle to the module if successful, otherwise returns NULL.
  366. //-----------------------------------------------------------------------
  367. HMODULE GetHandle() const;
  368. //-----------------------------------------------------------------------
  369. // Summary:
  370. //     Returns Path to loaded library
  371. //-----------------------------------------------------------------------
  372. CString GetName() const;
  373. //-----------------------------------------------------------------------
  374. // Summary:
  375. //     Returns module state
  376. //-----------------------------------------------------------------------
  377. XTPModuleState GetModuleState() const;
  378. private:
  379. BOOL GetVersionInfo();
  380. struct XTP_DLLVERSIONINFO
  381. {
  382. DWORD cbSize;
  383. DWORD dwMajorVersion;                   // Major version
  384. DWORD dwMinorVersion;                   // Minor version
  385. DWORD dwBuildNumber;                    // Build number
  386. DWORD dwPlatformID;                     // DLLVER_PLATFORM_*
  387. };
  388. CString            m_strModuleName;         // Module path
  389. HMODULE            m_hModule;               // A handle to the module indicates success.
  390. XTPModuleState     m_eModuleState;          // Module state
  391. XTP_DLLVERSIONINFO m_dvInfo;                // Version information
  392. };
  393. AFX_INLINE HMODULE CXTPModuleHandle::GetHandle() const {
  394. return m_hModule;
  395. }
  396. AFX_INLINE CXTPModuleHandle::operator HMODULE () const {
  397. return m_hModule;
  398. }
  399. AFX_INLINE CString CXTPModuleHandle::GetName() const {
  400. return m_strModuleName;
  401. }
  402. AFX_INLINE CXTPModuleHandle::XTPModuleState CXTPModuleHandle::GetModuleState() const {
  403. return m_eModuleState;
  404. }
  405. // Obsolete name
  406. //#define CXTLoadLibrary CXTPModuleHandle
  407. //-----------------------------------------------------------------------
  408. // Summary:
  409. //     MultiMonitor API wrapper class
  410. //-----------------------------------------------------------------------
  411. class _XTP_EXT_CLASS CXTPMultiMonitor
  412. {
  413. private:
  414. DECLARE_HANDLE(XTP_HMONITOR);
  415. private:
  416. struct XTP_MONITORINFO
  417. {
  418. DWORD   cbSize;
  419. RECT    rcMonitor;
  420. RECT    rcWork;
  421. DWORD   dwFlags;
  422. };
  423. private:
  424. CXTPMultiMonitor();
  425. public:
  426. //-----------------------------------------------------------------------
  427. // Summary:
  428. //     This function retrieves work area for the display monitor that
  429. //     the mouse cursor is currently positioned over.
  430. // Parameters:
  431. //     rect  - Reference to a CRect class that specifies the
  432. //             coordinates of the rectangle of interest in virtual
  433. //             screen coordinates.
  434. //     pWnd  - Pointer to the window of interest.
  435. //     hWnd  - Handle to the window of interest.
  436. //     point - Point of interest.
  437. // Returns:
  438. //     If the mouse cursor is positioned over a display monitor, the
  439. //     return value is a CRect object that specifies the work area
  440. //     rectangle of the display monitor, expressed in virtual-screen
  441. //     coordinates.  Otherwise, returns the size of the work area on
  442. //     the primary display monitor.
  443. //-----------------------------------------------------------------------
  444. CRect GetWorkArea();
  445. CRect GetWorkArea(const POINT& point);  //<COMBINE CXTPMultiMonitor::GetWorkArea>
  446. CRect GetWorkArea(LPCRECT rect); //<COMBINE CXTPMultiMonitor::GetWorkArea>
  447. CRect GetWorkArea(const CWnd* pWnd);  //<COMBINE CXTPMultiMonitor::GetWorkArea>
  448. CRect GetWorkArea(HWND hWnd); //<COMBINE CXTPMultiMonitor::GetWorkArea>
  449. CRect GetScreenArea(const CWnd* pWnd);  //<COMBINE CXTPMultiMonitor::GetWorkArea>
  450. CRect GetScreenArea(HWND hWnd); //<COMBINE CXTPMultiMonitor::GetWorkArea>
  451. CRect GetScreenArea(const POINT& point); //<COMBINE CXTPMultiMonitor::GetWorkArea>
  452. CRect GetScreenArea(LPCRECT rect); //<COMBINE CXTPMultiMonitor::GetWorkArea>
  453. private:
  454. BOOL GetMonitorInfo(XTP_HMONITOR hMonitor, XTP_MONITORINFO* lpMonitorInfo);
  455. CRect GetWorkArea(XTP_HMONITOR hMonitor);
  456. CRect GetScreenArea(XTP_HMONITOR hMonitor);
  457. int      (WINAPI* m_pfnGetSystemMetrics)(int);
  458. XTP_HMONITOR (WINAPI* m_pfnMonitorFromWindow)(HWND, DWORD);
  459. XTP_HMONITOR (WINAPI* m_pfnMonitorFromRect)(LPCRECT, DWORD);
  460. XTP_HMONITOR (WINAPI* m_pfnMonitorFromPoint)(POINT, DWORD);
  461. BOOL     (WINAPI* m_pfnGetMonitorInfo)(XTP_HMONITOR, XTP_MONITORINFO*);
  462. CXTPModuleHandle m_modUser32;
  463. friend _XTP_EXT_CLASS CXTPMultiMonitor* AFX_CDECL XTPMultiMonitor();
  464. };
  465. //---------------------------------------------------------------------------
  466. // Summary:
  467. //     Call this function to access CXTPMultiMonitor members.
  468. //     Since this class is designed as a single instance object you can
  469. //     only access its members through this method. You <b>cannot</b>
  470. //     directly instantiate an object of type CXTPMultiMonitor.
  471. // Example:
  472. //     <code>CRect rcWork = XTPMultiMonitor()->GetWorkArea();</code>
  473. //---------------------------------------------------------------------------
  474. _XTP_EXT_CLASS CXTPMultiMonitor* AFX_CDECL XTPMultiMonitor();
  475. //===========================================================================
  476. // Summary: Critical Section Wrapper
  477. //===========================================================================
  478. class _XTP_EXT_CLASS CXTPCriticalSection
  479. {
  480. public:
  481. //-----------------------------------------------------------------------
  482. // Summary:
  483. //     Constructs a CXTPCriticalSection object
  484. //-----------------------------------------------------------------------
  485. CXTPCriticalSection();
  486. //-------------------------------------------------------------------------
  487. // Summary:
  488. //     Destroys a CXTPCriticalSection object, handles cleanup and deallocation
  489. //-------------------------------------------------------------------------
  490. ~CXTPCriticalSection();
  491. public:
  492. //-------------------------------------------------------------------------
  493. // Summary:
  494. //     The EnterCriticalSection function waits for ownership of the
  495. //     specified critical section object
  496. //-------------------------------------------------------------------------
  497. void EnterCritical();
  498. //-------------------------------------------------------------------------
  499. // Summary:
  500. //     The LeaveCriticalSection function releases ownership of the
  501. //     specified critical section object
  502. //-------------------------------------------------------------------------
  503. void LeaveCritical();
  504. //-------------------------------------------------------------------------
  505. // Summary:
  506. //     Returns CRITICAL_SECTION reference
  507. //-------------------------------------------------------------------------
  508. operator CRITICAL_SECTION& () {
  509. return m_csMutex;
  510. }
  511. private:
  512. CRITICAL_SECTION m_csMutex;
  513. };
  514. //===========================================================================
  515. // Summary: Critical Sections Lock/Unlock helper
  516. //===========================================================================
  517. class _XTP_EXT_CLASS CXTPLockGuard
  518. {
  519. public:
  520. //-----------------------------------------------------------------------
  521. // Summary:
  522. //     Constructs a CXTPLockGuard object
  523. // Parameters:
  524. //     key - CRITICAL_SECTION used to lock thread
  525. //-----------------------------------------------------------------------
  526. CXTPLockGuard(CRITICAL_SECTION& key);
  527. //-------------------------------------------------------------------------
  528. // Summary:
  529. //     Destroys a CXTPCriticalSection object, handles cleanup and deallocation
  530. //-------------------------------------------------------------------------
  531. ~CXTPLockGuard();
  532. public:
  533. //-------------------------------------------------------------------------
  534. // Summary: This method call EnterCritical of key object
  535. //-------------------------------------------------------------------------
  536. void LockThread();
  537. //-------------------------------------------------------------------------
  538. // Summary: This method call LeaveCritical of key object
  539. //-------------------------------------------------------------------------
  540. void UnLockThread();
  541. private:
  542. DISABLE_COPY_OPERATOR(CXTPLockGuard)
  543. private:
  544. CRITICAL_SECTION& m_key;
  545. };
  546. //{{AFX_CODEJOCK_PRIVATE
  547. #ifndef CHILDID_SELF
  548. #define CHILDID_SELF 0
  549. #endif
  550. #ifndef WM_GETOBJECT
  551. #define WM_GETOBJECT 0x003D
  552. #endif
  553. #ifndef EVENT_OBJECT_FOCUS
  554. #define EVENT_OBJECT_FOCUS 0x8005
  555. #endif
  556. #ifndef OBJID_MENU
  557. #define OBJID_MENU 0xFFFFFFFD
  558. #endif
  559. #ifndef OBJID_CLIENT
  560. #define OBJID_CLIENT 0xFFFFFFFC
  561. #endif
  562. #ifndef OBJID_WINDOW
  563. #define OBJID_WINDOW 0x00000000
  564. #endif
  565. class _XTP_EXT_CLASS CXTPAccessible
  566. {
  567. public:
  568. CXTPAccessible();
  569. virtual ~CXTPAccessible();
  570. public:
  571. virtual HRESULT GetAccessibleParent(IDispatch** ppdispParent);
  572. virtual HRESULT GetAccessibleChildCount(long* pcountChildren);
  573. virtual HRESULT GetAccessibleChild(VARIANT varChild, IDispatch** ppdispChild);
  574. virtual HRESULT GetAccessibleName(VARIANT varChild, BSTR* pszName);
  575. virtual HRESULT GetAccessibleValue(VARIANT varChild, BSTR* pszValue);
  576. virtual HRESULT GetAccessibleDescription(VARIANT varChild, BSTR* pszDescription);
  577. virtual HRESULT GetAccessibleRole(VARIANT varChild, VARIANT* pvarRole);
  578. virtual HRESULT GetAccessibleState(VARIANT varChild, VARIANT* pvarState);
  579. virtual HRESULT GetAccessibleHelp(VARIANT varChild, BSTR* pszHelp);
  580. virtual HRESULT GetAccessibleHelpTopic(BSTR *pszHelpFile, VARIANT varChild, long* pidTopic);
  581. virtual HRESULT GetAccessibleKeyboardShortcut(VARIANT varChild, BSTR* pszKeyboardShortcut);
  582. virtual HRESULT GetAccessibleFocus(VARIANT* pvarChild);
  583. virtual HRESULT GetAccessibleSelection(VARIANT* pvarChildren);
  584. virtual HRESULT GetAccessibleDefaultAction(VARIANT varChild, BSTR* pszDefaultAction);
  585. virtual HRESULT AccessibleSelect(long flagsSelect, VARIANT varChild);
  586. virtual HRESULT AccessibleLocation(long *pxLeft, long *pyTop, long *pcxWidth, long* pcyHeight, VARIANT varChild);
  587. virtual HRESULT AccessibleNavigate(long navDir, VARIANT varStart, VARIANT* pvarEndUpAt);
  588. virtual HRESULT AccessibleHitTest(long xLeft, long yTop, VARIANT* pvarChild);
  589. virtual HRESULT AccessibleDoDefaultAction(VARIANT varChild);
  590. //Obsolete
  591. virtual HRESULT PutAccessibleName(VARIANT varChild, BSTR szName);
  592. //Obsolete
  593. virtual HRESULT PutAccessibleValue(VARIANT varChild, BSTR szValue);
  594. virtual CCmdTarget* GetAccessible();
  595. void AccessibleNotifyWinEvent(DWORD event, HWND hwnd, LONG idObject, LONG idChild);
  596. protected:
  597. HRESULT AccessibleObjectFromWindow(HWND hwnd, DWORD dwId, REFIID riid, void** ppvObject);
  598. LRESULT LresultFromObject(REFIID riid, WPARAM wParam, LPUNKNOWN punk);
  599. long GetChildIndex(VARIANT* varChild);
  600. public:
  601. BEGIN_INTERFACE_PART(Accessible, IAccessible)
  602. STDMETHOD(GetTypeInfoCount)(UINT FAR* pctinfo);
  603. STDMETHOD(GetTypeInfo)(UINT itinfo, LCID lcid, ITypeInfo FAR* FAR* pptinfo);
  604. STDMETHOD(GetIDsOfNames)(REFIID riid, OLECHAR FAR* FAR* rgszNames, UINT cNames,
  605. LCID lcid, DISPID FAR* rgdispid);
  606. STDMETHOD(Invoke)(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags,
  607. DISPPARAMS FAR* pdispparams, VARIANT FAR* pvarResult, EXCEPINFO FAR* pexcepinfo,
  608. UINT FAR* puArgErr);
  609. STDMETHOD(get_accParent)(IDispatch* FAR* ppdispParent);
  610. STDMETHOD(get_accChildCount)(long FAR* pChildCount);
  611. STDMETHOD(get_accChild)(VARIANT varChildIndex, IDispatch* FAR* ppdispChild);
  612. STDMETHOD(get_accName)(VARIANT varChild, BSTR* pszName);
  613. STDMETHOD(get_accValue)(VARIANT varChild, BSTR* pszValue);
  614. STDMETHOD(get_accDescription)(VARIANT varChild, BSTR FAR* pszDescription);
  615. STDMETHOD(get_accRole)(VARIANT varChild, VARIANT* pvarRole);
  616. STDMETHOD(get_accState)(VARIANT varChild, VARIANT* pvarState);
  617. STDMETHOD(get_accHelp)(VARIANT varChild, BSTR* pszHelp);
  618. STDMETHOD(get_accHelpTopic)(BSTR* pszHelpFile, VARIANT varChild, long* pidTopic);
  619. STDMETHOD(get_accKeyboardShortcut)(VARIANT varChild, BSTR* pszKeyboardShortcut);
  620. STDMETHOD(get_accFocus)(VARIANT FAR* pvarFocusChild);
  621. STDMETHOD(get_accSelection)(VARIANT FAR* pvarSelectedChildren);
  622. STDMETHOD(get_accDefaultAction)(VARIANT varChild, BSTR* pszDefaultAction);
  623. STDMETHOD(accSelect)(long flagsSelect, VARIANT varChild);
  624. STDMETHOD(accLocation)(long* pxLeft, long* pyTop, long* pcxWidth, long* pcyHeight, VARIANT varChild);
  625. STDMETHOD(accNavigate)(long navDir, VARIANT varStart, VARIANT* pvarEndUpAt);
  626. STDMETHOD(accHitTest)(long xLeft, long yTop, VARIANT* pvarChildAtPoint);
  627. STDMETHOD(accDoDefaultAction)(VARIANT varChild);
  628. STDMETHOD(put_accName)(VARIANT varChild, BSTR szName);
  629. STDMETHOD(put_accValue)(VARIANT varChild, BSTR pszValue);
  630. END_INTERFACE_PART(ExternalAccessible)
  631. private:
  632. typedef VOID (WINAPI* LPFNNOTIFYWINEVENT)(DWORD event, HWND hwnd, LONG idObject, LONG idChild);
  633. LPFNNOTIFYWINEVENT m_pNotifyWinEvent;
  634. LPFNLRESULTFROMOBJECT m_pLresultFromObject;
  635. LPFNACCESSIBLEOBJECTFROMWINDOW m_pAccessibleObjectFromWindow;
  636. CXTPModuleHandle m_modUser32;
  637. CXTPModuleHandle m_modOleAcc;
  638. };
  639. //}}AFX_CODEJOCK_PRIVATE
  640. #endif // !defined(__XTPMANAGESTATE_H__)