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

对话框与窗口

开发平台:

Visual C++

  1. // XTPSystemHelpers.cpp
  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. #include "stdafx.h"
  21. #include "XTPMacros.h"
  22. #include "XTPSystemHelpers.h"
  23. #ifdef _DEBUG
  24. #define new DEBUG_NEW
  25. #undef THIS_FILE
  26. static char THIS_FILE[] = __FILE__;
  27. #endif
  28. #define TRACE_ACCESSIBLE(x)
  29. //===========================================================================
  30. // CXTPSystemVersion class
  31. //===========================================================================
  32. CXTPSystemVersion::CXTPSystemVersion()
  33. {
  34. // zero memory and set struct size.
  35. ::ZeroMemory((OSVERSIONINFO*)this, sizeof(OSVERSIONINFO));
  36. dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  37. // get the Windows OS version information.
  38. ::GetVersionEx((OSVERSIONINFO*)this);
  39. }
  40. _XTP_EXT_CLASS CXTPSystemVersion* AFXAPI XTPSystemVersion()
  41. {
  42. static CXTPSystemVersion instance;
  43. return &instance;
  44. }
  45. bool CXTPSystemVersion::IsWin31() const
  46. {
  47. return (dwPlatformId == VER_PLATFORM_WIN32s);
  48. }
  49. bool CXTPSystemVersion::IsWin95() const
  50. {
  51. return (dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) &&
  52. (dwMajorVersion == 4) && (dwMinorVersion < 10);
  53. }
  54. bool CXTPSystemVersion::IsWin98() const
  55. {
  56. return (dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) &&
  57. EqualTo(4, 10);
  58. }
  59. bool CXTPSystemVersion::IsWin9x() const
  60. {
  61. return (dwPlatformId == VER_PLATFORM_WIN32_WINDOWS);
  62. }
  63. bool CXTPSystemVersion::IsWinME() const
  64. {
  65. return (dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) &&
  66. EqualTo(4, 90);
  67. }
  68. bool CXTPSystemVersion::IsWinNT4() const
  69. {
  70. return (dwPlatformId == VER_PLATFORM_WIN32_NT) &&
  71. EqualTo(4, 0);
  72. }
  73. bool CXTPSystemVersion::IsWin2K() const
  74. {
  75. return (dwPlatformId == VER_PLATFORM_WIN32_NT) &&
  76. EqualTo(5, 0);
  77. }
  78. bool CXTPSystemVersion::IsWinXP() const
  79. {
  80. return (dwPlatformId == VER_PLATFORM_WIN32_NT) &&
  81. EqualTo(5, 1);
  82. }
  83. bool CXTPSystemVersion::IsWin95OrGreater() const
  84. {
  85. return (dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) &&
  86. (dwMajorVersion >= 4);
  87. }
  88. bool CXTPSystemVersion::IsWin98OrGreater() const
  89. {
  90. return (dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) &&
  91. GreaterThanEqualTo(4, 10);
  92. }
  93. bool CXTPSystemVersion::IsWinMEOrGreater() const
  94. {
  95. return (dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) &&
  96. GreaterThanEqualTo(4, 90);
  97. }
  98. bool CXTPSystemVersion::IsWinNT4OrGreater() const
  99. {
  100. return (dwPlatformId >= VER_PLATFORM_WIN32_NT) &&
  101. (dwMajorVersion >= 4);
  102. }
  103. bool CXTPSystemVersion::IsWin2KOrGreater() const
  104. {
  105. return (dwPlatformId >= VER_PLATFORM_WIN32_NT) &&
  106. (dwMajorVersion >= 5);
  107. }
  108. bool CXTPSystemVersion::IsWinXPOrGreater() const
  109. {
  110. return (dwPlatformId >= VER_PLATFORM_WIN32_NT) &&
  111. GreaterThanEqualTo(5, 1);
  112. }
  113. bool CXTPSystemVersion::IsWinVistaOrGreater() const
  114. {
  115. return (dwPlatformId >= VER_PLATFORM_WIN32_NT) &&
  116. GreaterThanEqualTo(6, 0);
  117. }
  118. bool CXTPSystemVersion::GreaterThanEqualTo(const DWORD maj, const DWORD min) const
  119. {
  120. return (dwMajorVersion > maj) || (dwMajorVersion == maj &&
  121. dwMinorVersion >= min);
  122. }
  123. bool CXTPSystemVersion::EqualTo(const DWORD maj, const DWORD min) const
  124. {
  125. return (dwMajorVersion == maj) && (dwMinorVersion == min);
  126. }
  127. DWORD CXTPSystemVersion::GetComCtlVersion() const
  128. {
  129. static DWORD dwVersion = 0;
  130. if (dwVersion != 0)
  131. return dwVersion;
  132. CXTPModuleHandle modComCtl32(_T("COMCTL32.DLL"));
  133. dwVersion = modComCtl32.GetVersion();
  134. if (dwVersion == NULL)
  135. dwVersion = MAKELONG(0, 4);   // Old ComCtl32 had version 4.0
  136. return dwVersion;
  137. }
  138. BOOL CXTPSystemVersion::IsLayoutRTLSupported()
  139. {
  140. return IsWin2KOrGreater() || GetSystemMetrics(SM_MIDEASTENABLED);
  141. }
  142. BOOL CXTPSystemVersion::IsClearTypeTextQualitySupported()
  143. {
  144. return IsWinXPOrGreater();
  145. }
  146. //=============================================================================
  147. // Multi-Monitor API
  148. //=============================================================================
  149. _XTP_EXT_CLASS CXTPMultiMonitor* AFX_CDECL XTPMultiMonitor()
  150. {
  151. static CXTPMultiMonitor instance;
  152. return &instance;
  153. }
  154. CXTPMultiMonitor::CXTPMultiMonitor()
  155. {
  156. #ifdef UNICODE
  157. BOOL bIsPlatformNT = XTPSystemVersion()->IsWinNT4OrGreater();
  158. #endif
  159. m_modUser32.Init(TEXT("User32.dll"));
  160. if (!m_modUser32)
  161. {
  162. TRACE(_T("WARNING: Could not locate User32.dll.n"));
  163. }
  164. if (!m_modUser32 ||
  165. !m_modUser32.GetProcAddress((FARPROC*)&m_pfnGetSystemMetrics, "GetSystemMetrics") ||
  166. !m_modUser32.GetProcAddress((FARPROC*)&m_pfnMonitorFromWindow, "MonitorFromWindow") ||
  167. !m_modUser32.GetProcAddress((FARPROC*)&m_pfnMonitorFromRect, "MonitorFromRect") ||
  168. !m_modUser32.GetProcAddress((FARPROC*)&m_pfnMonitorFromPoint, "MonitorFromPoint") ||
  169. #ifndef UNICODE
  170. !m_modUser32.GetProcAddress((FARPROC*)&m_pfnGetMonitorInfo, "GetMonitorInfoA"))
  171. #else
  172. !m_modUser32.GetProcAddress((FARPROC*)&m_pfnGetMonitorInfo, bIsPlatformNT ? "GetMonitorInfoW" : "GetMonitorInfoA"))
  173. #endif
  174. {
  175. m_pfnGetSystemMetrics   = NULL;
  176. m_pfnMonitorFromWindow  = NULL;
  177. m_pfnMonitorFromRect    = NULL;
  178. m_pfnMonitorFromPoint   = NULL;
  179. m_pfnGetMonitorInfo     = NULL;
  180. }
  181. }
  182. BOOL CXTPMultiMonitor::GetMonitorInfo(XTP_HMONITOR hMonitor, XTP_MONITORINFO* lpMonitorInfo)
  183. {
  184. if (hMonitor && m_pfnGetMonitorInfo)
  185. {
  186. lpMonitorInfo->cbSize = sizeof(XTP_MONITORINFO);
  187. ASSERT(sizeof(XTP_MONITORINFO) == 40);
  188. if (m_pfnGetMonitorInfo(hMonitor, lpMonitorInfo))
  189. return TRUE;
  190. }
  191. return FALSE;
  192. }
  193. CRect CXTPMultiMonitor::GetWorkArea(XTP_HMONITOR hMonitor)
  194. {
  195. XTP_MONITORINFO info;
  196. if (GetMonitorInfo(hMonitor, &info))
  197. {
  198. return info.rcWork;
  199. }
  200. RECT rcWork;
  201. ::SystemParametersInfo(SPI_GETWORKAREA, NULL, &rcWork, 0);
  202. return rcWork;
  203. }
  204. CRect CXTPMultiMonitor::GetScreenArea(XTP_HMONITOR hMonitor)
  205. {
  206. XTP_MONITORINFO info;
  207. if (GetMonitorInfo(hMonitor, &info))
  208. {
  209. return info.rcMonitor;
  210. }
  211. return CRect(0, 0, ::GetSystemMetrics(SM_CXSCREEN), ::GetSystemMetrics(SM_CYSCREEN));
  212. }
  213. CRect CXTPMultiMonitor::GetScreenArea(HWND hWnd)
  214. {
  215. return GetScreenArea(m_pfnMonitorFromWindow ? m_pfnMonitorFromWindow(hWnd, 0) : 0);
  216. }
  217. CRect CXTPMultiMonitor::GetScreenArea(const CWnd* pWnd)
  218. {
  219. return GetScreenArea(pWnd->GetSafeHwnd());
  220. }
  221. CRect CXTPMultiMonitor::GetScreenArea(const POINT& ptScreenCoords)
  222. {
  223. return GetScreenArea(m_pfnMonitorFromPoint ? m_pfnMonitorFromPoint(ptScreenCoords, 0) : 0);
  224. }
  225. CRect CXTPMultiMonitor::GetScreenArea(LPCRECT lprcScreenCoords)
  226. {
  227. return GetScreenArea(m_pfnMonitorFromRect ? m_pfnMonitorFromRect(lprcScreenCoords, 0) : 0);
  228. }
  229. CRect CXTPMultiMonitor::GetWorkArea(HWND hWnd)
  230. {
  231. return GetWorkArea(m_pfnMonitorFromWindow ? m_pfnMonitorFromWindow(hWnd, 0) : 0);
  232. }
  233. CRect CXTPMultiMonitor::GetWorkArea(const POINT& ptScreenCoords)
  234. {
  235. return GetWorkArea(m_pfnMonitorFromPoint ? m_pfnMonitorFromPoint(ptScreenCoords, 0) : 0);
  236. }
  237. CRect CXTPMultiMonitor::GetWorkArea(LPCRECT lprcScreenCoords)
  238. {
  239. return GetWorkArea(m_pfnMonitorFromRect ? m_pfnMonitorFromRect(lprcScreenCoords, 0) : 0);
  240. }
  241. CRect CXTPMultiMonitor::GetWorkArea(const CWnd* pWnd)
  242. {
  243. return GetWorkArea(pWnd->GetSafeHwnd());
  244. }
  245. CRect CXTPMultiMonitor::GetWorkArea()
  246. {
  247. POINT point;
  248. ::GetCursorPos(&point);
  249. return GetWorkArea(point);
  250. }
  251. //=============================================================================
  252. // CXTPModuleHandle :
  253. //=============================================================================
  254. CXTPModuleHandle::CXTPModuleHandle()
  255. : m_hModule(0)
  256. , m_eModuleState(xtpModNone)
  257. {
  258. ::ZeroMemory(&m_dvInfo, sizeof(m_dvInfo));
  259. }
  260. CXTPModuleHandle::CXTPModuleHandle(LPCTSTR lpszModuleName)
  261. : m_hModule(0)
  262. , m_eModuleState(xtpModNone)
  263. {
  264. ::ZeroMemory(&m_dvInfo, sizeof(m_dvInfo));
  265. Init(lpszModuleName);
  266. }
  267. CXTPModuleHandle::~CXTPModuleHandle()
  268. {
  269. VERIFY(FreeLibrary());
  270. }
  271. BOOL CXTPModuleHandle::Init(LPCTSTR lpszModuleName)
  272. {
  273. // first, try to obtain the module that was mapped into
  274. // the address space of the calling process, if not found,
  275. // attempt to load the library.
  276. return (GetModuleHandle(lpszModuleName) || LoadLibrary(lpszModuleName));
  277. }
  278. BOOL CXTPModuleHandle::GetModuleHandle(LPCTSTR lpszModuleName)
  279. {
  280. FreeLibrary();
  281. if ((m_hModule = ::GetModuleHandle(lpszModuleName)) != NULL)
  282. {
  283. m_eModuleState = xtpModMapped;
  284. m_strModuleName = lpszModuleName;
  285. return TRUE;
  286. }
  287. return FALSE;
  288. }
  289. BOOL CXTPModuleHandle::LoadLibrary(LPCTSTR lpszModuleName)
  290. {
  291. FreeLibrary();
  292. if ((m_hModule = ::LoadLibrary(lpszModuleName)) != NULL)
  293. {
  294. m_eModuleState = xtpModLoaded;
  295. m_strModuleName = lpszModuleName;
  296. return TRUE;
  297. }
  298. return FALSE;
  299. }
  300. BOOL CXTPModuleHandle::FreeLibrary()
  301. {
  302. BOOL bRet = TRUE;
  303. if (m_hModule && m_eModuleState == xtpModLoaded)
  304. bRet = ::FreeLibrary(m_hModule);
  305. m_hModule = NULL;
  306. m_eModuleState = xtpModNone;
  307. m_strModuleName.Empty();
  308. return bRet;
  309. }
  310. BOOL CXTPModuleHandle::GetVersionInfo()
  311. {
  312. if (!m_hModule)
  313. return FALSE;
  314. m_dvInfo.cbSize = sizeof(m_dvInfo);
  315. typedef HRESULT (WINAPI* PFNDLLVERSIONINFO)(XTP_DLLVERSIONINFO*);
  316. PFNDLLVERSIONINFO pfn = (PFNDLLVERSIONINFO)::GetProcAddress(m_hModule, "DllGetVersion");
  317. if (pfn != NULL)
  318. {
  319. return (pfn(&m_dvInfo) != NOERROR);
  320. }
  321. return FALSE;
  322. }
  323. DWORD CXTPModuleHandle::GetVersion()
  324. {
  325. if (m_dvInfo.cbSize == 0)
  326. GetVersionInfo();
  327. DWORD dwModVer = MAKELONG(m_dvInfo.dwMinorVersion, m_dvInfo.dwMajorVersion);
  328. ASSERT(HIWORD(dwModVer) <= 0xFFFF);
  329. ASSERT(LOWORD(dwModVer) <= 0xFFFF);
  330. return dwModVer;
  331. }
  332. BOOL CXTPModuleHandle::GetProcAddress(FARPROC* ppFnPtr, LPCSTR lpProcName, DWORD dwMinVer /*= NULL*/)
  333. {
  334. if (!m_hModule)
  335. return FALSE;
  336. if (dwMinVer != NULL)
  337. {
  338. DWORD dwModVer = GetVersion();
  339. if ((HIWORD(dwMinVer) >  HIWORD(dwModVer)) ||
  340. (HIWORD(dwMinVer) == HIWORD(dwModVer)) &&
  341. (LOWORD(dwMinVer) >  LOWORD(dwModVer)))
  342. {
  343. *ppFnPtr = NULL;
  344. return FALSE;
  345. }
  346. }
  347. *ppFnPtr = ::GetProcAddress(m_hModule, lpProcName);
  348. return (*ppFnPtr != NULL);
  349. }
  350. //=============================================================================
  351. // CXTPCriticalSection
  352. //=============================================================================
  353. CXTPCriticalSection::CXTPCriticalSection()
  354. {
  355. ::InitializeCriticalSection(&m_csMutex);
  356. }
  357. CXTPCriticalSection::~CXTPCriticalSection()
  358. {
  359. ::DeleteCriticalSection(&m_csMutex);
  360. }
  361. void CXTPCriticalSection::EnterCritical()
  362. {
  363. ::EnterCriticalSection(&m_csMutex);
  364. }
  365. void CXTPCriticalSection::LeaveCritical()
  366. {
  367. ::LeaveCriticalSection(&m_csMutex);
  368. }
  369. //=============================================================================
  370. // CXTPLockGuard
  371. //=============================================================================
  372. CXTPLockGuard::CXTPLockGuard(CRITICAL_SECTION& key)
  373. : m_key(key)
  374. {
  375. LockThread();
  376. }
  377. CXTPLockGuard::~CXTPLockGuard()
  378. {
  379. UnLockThread();
  380. }
  381. void CXTPLockGuard::LockThread()
  382. {
  383. ::EnterCriticalSection(&m_key);
  384. }
  385. void CXTPLockGuard::UnLockThread()
  386. {
  387. ::LeaveCriticalSection(&m_key);
  388. }
  389. //////////////////////////////////////////////////////////////////////////
  390. // CXTPAccessible
  391. CXTPAccessible::CXTPAccessible()
  392. {
  393. m_modUser32.Init(_T("user32.dll"));
  394. // We will load it later to optimize constructor.
  395. // m_modOleAcc.LoadLibrary(_T("oleacc.dll"));
  396. m_pNotifyWinEvent = NULL;
  397. m_pLresultFromObject = NULL;
  398. m_pAccessibleObjectFromWindow = NULL;
  399. m_modUser32.GetProcAddress(
  400. (FARPROC*)&m_pNotifyWinEvent, "NotifyWinEvent");
  401. }
  402. CXTPAccessible::~CXTPAccessible()
  403. {
  404. }
  405. void CXTPAccessible::AccessibleNotifyWinEvent(DWORD event, HWND hwnd, LONG idObject, LONG idChild)
  406. {
  407. if (m_pNotifyWinEvent != NULL)
  408. {
  409. m_pNotifyWinEvent(event, hwnd, idObject, idChild);
  410. }
  411. }
  412. HRESULT CXTPAccessible::AccessibleObjectFromWindow(HWND hwnd, DWORD dwId, REFIID riid, void** ppvObject)
  413. {
  414. if (!m_modOleAcc)
  415. {
  416. m_modOleAcc.LoadLibrary(_T("oleacc.dll"));
  417. }
  418. if (m_pAccessibleObjectFromWindow == 0)
  419. {
  420. m_modOleAcc.GetProcAddress(
  421. (FARPROC*)&m_pAccessibleObjectFromWindow, "AccessibleObjectFromWindow");
  422. }
  423. if (m_pAccessibleObjectFromWindow)
  424. {
  425. return m_pAccessibleObjectFromWindow(hwnd, dwId, riid, ppvObject);
  426. }
  427. return E_FAIL;
  428. }
  429. LRESULT CXTPAccessible::LresultFromObject(REFIID riid, WPARAM wParam, LPUNKNOWN punk)
  430. {
  431. if (!m_modOleAcc)
  432. {
  433. m_modOleAcc.LoadLibrary(_T("oleacc.dll"));
  434. }
  435. if (m_pLresultFromObject == 0)
  436. {
  437. m_modOleAcc.GetProcAddress(
  438. (FARPROC*)&m_pLresultFromObject, "LresultFromObject");
  439. }
  440. if (m_pLresultFromObject)
  441. {
  442. return m_pLresultFromObject(riid, wParam, punk);
  443. }
  444. return E_FAIL;
  445. }
  446. long CXTPAccessible::GetChildIndex(VARIANT* varChild)
  447. {
  448. if (!varChild) return -1;
  449. if (varChild->vt == VT_EMPTY)
  450. return CHILDID_SELF;
  451. if (varChild->vt == VT_I4) return V_I4(varChild);
  452. if (varChild->vt == VT_I2) return V_I2(varChild);
  453. if (varChild->vt == (VT_I4 | VT_BYREF) && V_I4REF(varChild)) return *V_I4REF(varChild);
  454. if (varChild->vt == (VT_I2 | VT_BYREF) && V_I2REF(varChild)) return *V_I2REF(varChild);
  455. if (varChild->vt == (VT_VARIANT | VT_BYREF)) return GetChildIndex(varChild->pvarVal);
  456. return -1;
  457. }
  458. STDMETHODIMP_(ULONG) CXTPAccessible::XAccessible::AddRef()
  459. {
  460. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible)
  461. return (ULONG)pThis->GetAccessible()->ExternalAddRef();
  462. }
  463. STDMETHODIMP_(ULONG) CXTPAccessible::XAccessible::Release()
  464. {
  465. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible)
  466. return (ULONG)pThis->GetAccessible()->ExternalRelease();
  467. }
  468. STDMETHODIMP CXTPAccessible::XAccessible::QueryInterface(
  469. REFIID iid, LPVOID* ppvObj)
  470. {
  471. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible)
  472. return (HRESULT)pThis->GetAccessible()->ExternalQueryInterface(&iid, ppvObj);
  473. }
  474. STDMETHODIMP CXTPAccessible::XAccessible::GetTypeInfoCount(
  475. unsigned int*)
  476. {
  477. return E_NOTIMPL;
  478. }
  479. STDMETHODIMP CXTPAccessible::XAccessible::GetTypeInfo(
  480. unsigned int, LCID, ITypeInfo**)
  481. {
  482. return E_NOTIMPL;
  483. }
  484. STDMETHODIMP CXTPAccessible::XAccessible::GetIDsOfNames(
  485. REFIID, LPOLESTR*, unsigned int, LCID, DISPID*)
  486. {
  487. return E_NOTIMPL;
  488. }
  489. STDMETHODIMP CXTPAccessible::XAccessible::get_accParent(IDispatch* FAR* ppdispParent)
  490. {
  491. TRACE_ACCESSIBLE(_T("get_accParentn"));
  492. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  493. return pThis->GetAccessibleParent(ppdispParent);
  494. }
  495. STDMETHODIMP CXTPAccessible::XAccessible::get_accChildCount(long FAR* pChildCount)
  496. {
  497. TRACE_ACCESSIBLE(_T("get_accChildCountn"));
  498. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  499. return pThis->GetAccessibleChildCount(pChildCount);
  500. }
  501. STDMETHODIMP CXTPAccessible::XAccessible::get_accChild(VARIANT varChild, IDispatch* FAR* ppdispChild)
  502. {
  503. TRACE_ACCESSIBLE(_T("get_accChildn"));
  504. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  505. return pThis->GetAccessibleChild(varChild, ppdispChild);
  506. }
  507. STDMETHODIMP CXTPAccessible::XAccessible::get_accName(VARIANT varChild, BSTR* pszName)
  508. {
  509. TRACE_ACCESSIBLE(_T("get_accNamen"));
  510. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  511. return pThis->GetAccessibleName(varChild, pszName);
  512. }
  513. STDMETHODIMP CXTPAccessible::XAccessible::get_accValue(VARIANT varChild, BSTR* pszValue)
  514. {
  515. TRACE_ACCESSIBLE(_T("get_accValuen"));
  516. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  517. return pThis->GetAccessibleValue(varChild, pszValue);
  518. }
  519. STDMETHODIMP CXTPAccessible::XAccessible::get_accDescription(VARIANT varChild, BSTR FAR* pszDescription)
  520. {
  521. TRACE_ACCESSIBLE(_T("get_accDescriptionn"));
  522. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  523. return pThis->GetAccessibleDescription(varChild, pszDescription);
  524. }
  525. STDMETHODIMP CXTPAccessible::XAccessible::get_accRole(VARIANT varChild, VARIANT* pvarRole)
  526. {
  527. TRACE_ACCESSIBLE(_T("get_accRolen"));
  528. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  529. return pThis->GetAccessibleRole(varChild, pvarRole);
  530. }
  531. STDMETHODIMP CXTPAccessible::XAccessible::get_accState(VARIANT varChild, VARIANT* pvarState)
  532. {
  533. TRACE_ACCESSIBLE(_T("get_accStaten"));
  534. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  535. return pThis->GetAccessibleState(varChild, pvarState);
  536. }
  537. STDMETHODIMP CXTPAccessible::XAccessible::get_accHelp(VARIANT varChild, BSTR* pszHelp)
  538. {
  539. TRACE_ACCESSIBLE(_T("get_accHelpn"));
  540. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  541. return pThis->GetAccessibleHelp(varChild, pszHelp);
  542. }
  543. STDMETHODIMP CXTPAccessible::XAccessible::get_accHelpTopic(BSTR* pszHelpFile, VARIANT varChild, long* pidTopic)
  544. {
  545. TRACE_ACCESSIBLE(_T("get_accHelpTopicn"));
  546. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  547. return pThis->GetAccessibleHelpTopic(pszHelpFile, varChild, pidTopic);
  548. }
  549. STDMETHODIMP CXTPAccessible::XAccessible::get_accKeyboardShortcut(VARIANT varChild, BSTR* pszKeyboardShortcut)
  550. {
  551. TRACE_ACCESSIBLE(_T("get_accKeyboardShortcutn"));
  552. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  553. return pThis->GetAccessibleKeyboardShortcut(varChild, pszKeyboardShortcut);
  554. }
  555. STDMETHODIMP CXTPAccessible::XAccessible::get_accFocus(VARIANT FAR* pvarFocusChild)
  556. {
  557. TRACE_ACCESSIBLE(_T("get_accFocusn"));
  558. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  559. return pThis->GetAccessibleFocus(pvarFocusChild);
  560. }
  561. STDMETHODIMP CXTPAccessible::XAccessible::get_accSelection(VARIANT FAR* pvarSelectedChildren)
  562. {
  563. TRACE_ACCESSIBLE(_T("get_accSelectionn"));
  564. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  565. return pThis->GetAccessibleSelection(pvarSelectedChildren);
  566. }
  567. STDMETHODIMP CXTPAccessible::XAccessible::get_accDefaultAction(VARIANT varChild, BSTR* pszDefaultAction)
  568. {
  569. TRACE_ACCESSIBLE(_T("get_accDefaultActionn"));
  570. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  571. return pThis->GetAccessibleDefaultAction(varChild, pszDefaultAction);
  572. }
  573. STDMETHODIMP CXTPAccessible::XAccessible::accSelect(long flagsSelect, VARIANT varChild)
  574. {
  575. TRACE_ACCESSIBLE(_T("accSelectn"));
  576. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  577. return pThis->AccessibleSelect(flagsSelect, varChild);
  578. }
  579. STDMETHODIMP CXTPAccessible::XAccessible::accLocation(long* pxLeft, long* pyTop, long* pcxWidth, long* pcyHeight, VARIANT varChild)
  580. {
  581. TRACE_ACCESSIBLE(_T("accLocationn"));
  582. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  583. return pThis->AccessibleLocation(pxLeft, pyTop, pcxWidth, pcyHeight, varChild);
  584. }
  585. STDMETHODIMP CXTPAccessible::XAccessible::accNavigate(long navDir, VARIANT varStart, VARIANT* pvarEndUpAt)
  586. {
  587. TRACE_ACCESSIBLE(_T("accNavigaten"));
  588. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  589. return pThis->AccessibleNavigate(navDir, varStart, pvarEndUpAt);
  590. }
  591. STDMETHODIMP CXTPAccessible::XAccessible::accHitTest(long xLeft, long yTop, VARIANT* pvarID)
  592. {
  593. TRACE_ACCESSIBLE(_T("accHitTestn"));
  594. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  595. return pThis->AccessibleHitTest(xLeft, yTop, pvarID);
  596. }
  597. STDMETHODIMP CXTPAccessible::XAccessible::accDoDefaultAction(VARIANT varChild)
  598. {
  599. TRACE_ACCESSIBLE(_T("accDoDefaultActionn"));
  600. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  601. return pThis->AccessibleDoDefaultAction(varChild);
  602. }
  603. STDMETHODIMP CXTPAccessible::XAccessible::put_accName(VARIANT varChild, BSTR szName)
  604. {
  605. TRACE_ACCESSIBLE(_T("put_accNamen"));
  606. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  607. return pThis->PutAccessibleName(varChild, szName);
  608. }
  609. STDMETHODIMP CXTPAccessible::XAccessible::put_accValue(VARIANT varChild, BSTR pszValue)
  610. {
  611. TRACE_ACCESSIBLE(_T("put_accValuen"));
  612. METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
  613. return pThis->PutAccessibleValue(varChild, pszValue);
  614. }
  615. STDMETHODIMP CXTPAccessible::XAccessible::Invoke(
  616. DISPID /*dispid*/, REFIID, LCID, unsigned short /*wFlags*/,
  617. DISPPARAMS* /*pDispParams*/, VARIANT* /*pvarResult*/,
  618. EXCEPINFO*, unsigned int*)
  619. {
  620. return E_NOTIMPL;
  621. }
  622. HRESULT CXTPAccessible::GetAccessibleParent(IDispatch**  /*ppdispParent*/)
  623. {
  624. return E_NOTIMPL;
  625. }
  626. HRESULT CXTPAccessible::GetAccessibleChildCount(long* /*pcountChildren*/)
  627. {
  628. return E_NOTIMPL;
  629. }
  630. HRESULT CXTPAccessible::GetAccessibleChild(VARIANT /*varChild*/, IDispatch** /*ppdispChild*/)
  631. {
  632. return E_NOTIMPL;
  633. }
  634. HRESULT CXTPAccessible::GetAccessibleName(VARIANT /*varChild*/, BSTR* /*pszName*/)
  635. {
  636. return E_NOTIMPL;
  637. }
  638. HRESULT CXTPAccessible::GetAccessibleValue(VARIANT /*varChild*/, BSTR* /*pszValue*/)
  639. {
  640. return E_NOTIMPL;
  641. }
  642. HRESULT CXTPAccessible::GetAccessibleDescription(VARIANT /*varChild*/, BSTR* /*pszDescription*/)
  643. {
  644. return E_NOTIMPL;
  645. }
  646. HRESULT CXTPAccessible::GetAccessibleRole(VARIANT /*varChild*/, VARIANT* /*pvarRole*/)
  647. {
  648. return E_NOTIMPL;
  649. }
  650. HRESULT CXTPAccessible::GetAccessibleState(VARIANT /*varChild*/, VARIANT* /*pvarState*/)
  651. {
  652. return E_NOTIMPL;
  653. }
  654. HRESULT CXTPAccessible::GetAccessibleHelp(VARIANT /*varChild*/, BSTR* /*pszHelp*/)
  655. {
  656. return E_NOTIMPL;
  657. }
  658. HRESULT CXTPAccessible::GetAccessibleHelpTopic(BSTR* /*pszHelpFile*/, VARIANT /*varChild*/, long* /*pidTopic*/)
  659. {
  660. return E_NOTIMPL;
  661. }
  662. HRESULT CXTPAccessible::GetAccessibleKeyboardShortcut(VARIANT /*varChild*/, BSTR* /*pszKeyboardShortcut*/)
  663. {
  664. return E_NOTIMPL;
  665. }
  666. HRESULT CXTPAccessible::GetAccessibleFocus(VARIANT* /*pvarChild*/)
  667. {
  668. return S_FALSE;
  669. }
  670. HRESULT CXTPAccessible::GetAccessibleSelection(VARIANT* /*pvarChildren*/)
  671. {
  672. return S_FALSE;
  673. }
  674. HRESULT CXTPAccessible::GetAccessibleDefaultAction(VARIANT /*varChild*/, BSTR* /*pszDefaultAction*/)
  675. {
  676. return E_NOTIMPL;
  677. }
  678. HRESULT CXTPAccessible::AccessibleSelect(long /*flagsSelect*/, VARIANT /*varChild*/)
  679. {
  680. return E_NOTIMPL;
  681. }
  682. HRESULT CXTPAccessible::AccessibleLocation(long* /*pxLeft*/, long* /*pyTop*/, long* /*pcxWidth*/, long* /*pcyHeight*/, VARIANT /*varChild*/)
  683. {
  684. return E_NOTIMPL;
  685. }
  686. HRESULT CXTPAccessible::AccessibleNavigate(long /*navDir*/, VARIANT /*varStart*/, VARIANT* /*pvarEndUpAt*/)
  687. {
  688. return E_NOTIMPL;
  689. }
  690. HRESULT CXTPAccessible::AccessibleHitTest(long /*xLeft*/, long /*yTop*/, VARIANT* /*pvarChild*/)
  691. {
  692. return E_NOTIMPL;
  693. }
  694. HRESULT CXTPAccessible::AccessibleDoDefaultAction(VARIANT /*varChild*/)
  695. {
  696. return E_NOTIMPL;
  697. }
  698. HRESULT CXTPAccessible::PutAccessibleName(VARIANT /*varChild*/, BSTR /*szName*/)
  699. {
  700. return E_NOTIMPL;
  701. }
  702. HRESULT CXTPAccessible::PutAccessibleValue(VARIANT /*varChild*/, BSTR /*szValue*/)
  703. {
  704. return E_NOTIMPL;
  705. }
  706. CCmdTarget* CXTPAccessible::GetAccessible()
  707. {
  708. ASSERT(FALSE);
  709. return NULL;
  710. }