DragonNest/Third/XTToolkitPro/Source/Common/XTPSystemHelpers.cpp
2024-12-19 09:48:26 +08:00

881 lines
22 KiB
C++

// XTPSystemHelpers.cpp
//
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
// (c)1998-2008 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "XTPMacros.h"
#include "XTPSystemHelpers.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define TRACE_ACCESSIBLE(x)
//===========================================================================
// CXTPSystemVersion class
//===========================================================================
CXTPSystemVersion::CXTPSystemVersion()
{
// zero memory and set struct size.
::ZeroMemory((OSVERSIONINFO*)this, sizeof(OSVERSIONINFO));
dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
// get the Windows OS version information.
::GetVersionEx((OSVERSIONINFO*)this);
}
_XTP_EXT_CLASS CXTPSystemVersion* AFXAPI XTPSystemVersion()
{
static CXTPSystemVersion instance;
return &instance;
}
bool CXTPSystemVersion::IsWin31() const
{
return (dwPlatformId == VER_PLATFORM_WIN32s);
}
bool CXTPSystemVersion::IsWin95() const
{
return (dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) &&
(dwMajorVersion == 4) && (dwMinorVersion < 10);
}
bool CXTPSystemVersion::IsWin98() const
{
return (dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) &&
EqualTo(4, 10);
}
bool CXTPSystemVersion::IsWin9x() const
{
return (dwPlatformId == VER_PLATFORM_WIN32_WINDOWS);
}
bool CXTPSystemVersion::IsWinME() const
{
return (dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) &&
EqualTo(4, 90);
}
bool CXTPSystemVersion::IsWinNT4() const
{
return (dwPlatformId == VER_PLATFORM_WIN32_NT) &&
EqualTo(4, 0);
}
bool CXTPSystemVersion::IsWin2K() const
{
return (dwPlatformId == VER_PLATFORM_WIN32_NT) &&
EqualTo(5, 0);
}
bool CXTPSystemVersion::IsWinXP() const
{
return (dwPlatformId == VER_PLATFORM_WIN32_NT) &&
EqualTo(5, 1);
}
bool CXTPSystemVersion::IsWin95OrGreater() const
{
return (dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) &&
(dwMajorVersion >= 4);
}
bool CXTPSystemVersion::IsWin98OrGreater() const
{
return (dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) &&
GreaterThanEqualTo(4, 10);
}
bool CXTPSystemVersion::IsWinMEOrGreater() const
{
return (dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) &&
GreaterThanEqualTo(4, 90);
}
bool CXTPSystemVersion::IsWinNT4OrGreater() const
{
return (dwPlatformId >= VER_PLATFORM_WIN32_NT) &&
(dwMajorVersion >= 4);
}
bool CXTPSystemVersion::IsWin2KOrGreater() const
{
return (dwPlatformId >= VER_PLATFORM_WIN32_NT) &&
(dwMajorVersion >= 5);
}
bool CXTPSystemVersion::IsWinXPOrGreater() const
{
return (dwPlatformId >= VER_PLATFORM_WIN32_NT) &&
GreaterThanEqualTo(5, 1);
}
bool CXTPSystemVersion::IsWinVistaOrGreater() const
{
return (dwPlatformId >= VER_PLATFORM_WIN32_NT) &&
GreaterThanEqualTo(6, 0);
}
bool CXTPSystemVersion::GreaterThanEqualTo(const DWORD maj, const DWORD min) const
{
return (dwMajorVersion > maj) || (dwMajorVersion == maj &&
dwMinorVersion >= min);
}
bool CXTPSystemVersion::EqualTo(const DWORD maj, const DWORD min) const
{
return (dwMajorVersion == maj) && (dwMinorVersion == min);
}
DWORD CXTPSystemVersion::GetComCtlVersion() const
{
static DWORD dwVersion = 0;
if (dwVersion != 0)
return dwVersion;
CXTPModuleHandle modComCtl32(_T("COMCTL32.DLL"));
dwVersion = modComCtl32.GetVersion();
if (dwVersion == NULL)
dwVersion = MAKELONG(0, 4); // Old ComCtl32 had version 4.0
return dwVersion;
}
BOOL CXTPSystemVersion::IsLayoutRTLSupported()
{
return IsWin2KOrGreater() || GetSystemMetrics(SM_MIDEASTENABLED);
}
BOOL CXTPSystemVersion::IsClearTypeTextQualitySupported()
{
return IsWinXPOrGreater();
}
//=============================================================================
// Multi-Monitor API
//=============================================================================
_XTP_EXT_CLASS CXTPMultiMonitor* AFX_CDECL XTPMultiMonitor()
{
static CXTPMultiMonitor instance;
return &instance;
}
CXTPMultiMonitor::CXTPMultiMonitor()
{
#ifdef UNICODE
BOOL bIsPlatformNT = XTPSystemVersion()->IsWinNT4OrGreater();
#endif
m_modUser32.Init(TEXT("User32.dll"));
if (!m_modUser32)
{
TRACE(_T("WARNING: Could not locate User32.dll.\n"));
}
if (!m_modUser32 ||
!m_modUser32.GetProcAddress((FARPROC*)&m_pfnGetSystemMetrics, "GetSystemMetrics") ||
!m_modUser32.GetProcAddress((FARPROC*)&m_pfnMonitorFromWindow, "MonitorFromWindow") ||
!m_modUser32.GetProcAddress((FARPROC*)&m_pfnMonitorFromRect, "MonitorFromRect") ||
!m_modUser32.GetProcAddress((FARPROC*)&m_pfnMonitorFromPoint, "MonitorFromPoint") ||
#ifndef UNICODE
!m_modUser32.GetProcAddress((FARPROC*)&m_pfnGetMonitorInfo, "GetMonitorInfoA"))
#else
!m_modUser32.GetProcAddress((FARPROC*)&m_pfnGetMonitorInfo, bIsPlatformNT ? "GetMonitorInfoW" : "GetMonitorInfoA"))
#endif
{
m_pfnGetSystemMetrics = NULL;
m_pfnMonitorFromWindow = NULL;
m_pfnMonitorFromRect = NULL;
m_pfnMonitorFromPoint = NULL;
m_pfnGetMonitorInfo = NULL;
}
}
BOOL CXTPMultiMonitor::GetMonitorInfo(XTP_HMONITOR hMonitor, XTP_MONITORINFO* lpMonitorInfo)
{
if (hMonitor && m_pfnGetMonitorInfo)
{
lpMonitorInfo->cbSize = sizeof(XTP_MONITORINFO);
ASSERT(sizeof(XTP_MONITORINFO) == 40);
if (m_pfnGetMonitorInfo(hMonitor, lpMonitorInfo))
return TRUE;
}
return FALSE;
}
CRect CXTPMultiMonitor::GetWorkArea(XTP_HMONITOR hMonitor)
{
XTP_MONITORINFO info;
if (GetMonitorInfo(hMonitor, &info))
{
return info.rcWork;
}
RECT rcWork;
::SystemParametersInfo(SPI_GETWORKAREA, NULL, &rcWork, 0);
return rcWork;
}
CRect CXTPMultiMonitor::GetScreenArea(XTP_HMONITOR hMonitor)
{
XTP_MONITORINFO info;
if (GetMonitorInfo(hMonitor, &info))
{
return info.rcMonitor;
}
return CRect(0, 0, ::GetSystemMetrics(SM_CXSCREEN), ::GetSystemMetrics(SM_CYSCREEN));
}
CRect CXTPMultiMonitor::GetScreenArea(HWND hWnd)
{
return GetScreenArea(m_pfnMonitorFromWindow ? m_pfnMonitorFromWindow(hWnd, 0) : 0);
}
CRect CXTPMultiMonitor::GetScreenArea(const CWnd* pWnd)
{
return GetScreenArea(pWnd->GetSafeHwnd());
}
CRect CXTPMultiMonitor::GetScreenArea(const POINT& ptScreenCoords)
{
return GetScreenArea(m_pfnMonitorFromPoint ? m_pfnMonitorFromPoint(ptScreenCoords, 0) : 0);
}
CRect CXTPMultiMonitor::GetScreenArea(LPCRECT lprcScreenCoords)
{
return GetScreenArea(m_pfnMonitorFromRect ? m_pfnMonitorFromRect(lprcScreenCoords, 0) : 0);
}
CRect CXTPMultiMonitor::GetWorkArea(HWND hWnd)
{
return GetWorkArea(m_pfnMonitorFromWindow ? m_pfnMonitorFromWindow(hWnd, 0) : 0);
}
CRect CXTPMultiMonitor::GetWorkArea(const POINT& ptScreenCoords)
{
return GetWorkArea(m_pfnMonitorFromPoint ? m_pfnMonitorFromPoint(ptScreenCoords, 0) : 0);
}
CRect CXTPMultiMonitor::GetWorkArea(LPCRECT lprcScreenCoords)
{
return GetWorkArea(m_pfnMonitorFromRect ? m_pfnMonitorFromRect(lprcScreenCoords, 0) : 0);
}
CRect CXTPMultiMonitor::GetWorkArea(const CWnd* pWnd)
{
return GetWorkArea(pWnd->GetSafeHwnd());
}
CRect CXTPMultiMonitor::GetWorkArea()
{
POINT point;
::GetCursorPos(&point);
return GetWorkArea(point);
}
//=============================================================================
// CXTPModuleHandle :
//=============================================================================
CXTPModuleHandle::CXTPModuleHandle()
: m_hModule(0)
, m_eModuleState(xtpModNone)
{
::ZeroMemory(&m_dvInfo, sizeof(m_dvInfo));
}
CXTPModuleHandle::CXTPModuleHandle(LPCTSTR lpszModuleName)
: m_hModule(0)
, m_eModuleState(xtpModNone)
{
::ZeroMemory(&m_dvInfo, sizeof(m_dvInfo));
Init(lpszModuleName);
}
CXTPModuleHandle::~CXTPModuleHandle()
{
VERIFY(FreeLibrary());
}
BOOL CXTPModuleHandle::Init(LPCTSTR lpszModuleName)
{
// first, try to obtain the module that was mapped into
// the address space of the calling process, if not found,
// attempt to load the library.
return (GetModuleHandle(lpszModuleName) || LoadLibrary(lpszModuleName));
}
BOOL CXTPModuleHandle::GetModuleHandle(LPCTSTR lpszModuleName)
{
FreeLibrary();
if ((m_hModule = ::GetModuleHandle(lpszModuleName)) != NULL)
{
m_eModuleState = xtpModMapped;
m_strModuleName = lpszModuleName;
return TRUE;
}
return FALSE;
}
BOOL CXTPModuleHandle::LoadLibrary(LPCTSTR lpszModuleName)
{
FreeLibrary();
if ((m_hModule = ::LoadLibrary(lpszModuleName)) != NULL)
{
m_eModuleState = xtpModLoaded;
m_strModuleName = lpszModuleName;
return TRUE;
}
return FALSE;
}
BOOL CXTPModuleHandle::FreeLibrary()
{
BOOL bRet = TRUE;
if (m_hModule && m_eModuleState == xtpModLoaded)
bRet = ::FreeLibrary(m_hModule);
m_hModule = NULL;
m_eModuleState = xtpModNone;
m_strModuleName.Empty();
return bRet;
}
BOOL CXTPModuleHandle::GetVersionInfo()
{
if (!m_hModule)
return FALSE;
m_dvInfo.cbSize = sizeof(m_dvInfo);
typedef HRESULT (WINAPI* PFNDLLVERSIONINFO)(XTP_DLLVERSIONINFO*);
PFNDLLVERSIONINFO pfn = (PFNDLLVERSIONINFO)::GetProcAddress(m_hModule, "DllGetVersion");
if (pfn != NULL)
{
return (pfn(&m_dvInfo) != NOERROR);
}
return FALSE;
}
DWORD CXTPModuleHandle::GetVersion()
{
if (m_dvInfo.cbSize == 0)
GetVersionInfo();
DWORD dwModVer = MAKELONG(m_dvInfo.dwMinorVersion, m_dvInfo.dwMajorVersion);
ASSERT(HIWORD(dwModVer) <= 0xFFFF);
ASSERT(LOWORD(dwModVer) <= 0xFFFF);
return dwModVer;
}
BOOL CXTPModuleHandle::GetProcAddress(FARPROC* ppFnPtr, LPCSTR lpProcName, DWORD dwMinVer /*= NULL*/)
{
if (!m_hModule)
return FALSE;
if (dwMinVer != NULL)
{
DWORD dwModVer = GetVersion();
if ((HIWORD(dwMinVer) > HIWORD(dwModVer)) ||
(HIWORD(dwMinVer) == HIWORD(dwModVer)) &&
(LOWORD(dwMinVer) > LOWORD(dwModVer)))
{
*ppFnPtr = NULL;
return FALSE;
}
}
*ppFnPtr = ::GetProcAddress(m_hModule, lpProcName);
return (*ppFnPtr != NULL);
}
//=============================================================================
// CXTPCriticalSection
//=============================================================================
CXTPCriticalSection::CXTPCriticalSection()
{
::InitializeCriticalSection(&m_csMutex);
}
CXTPCriticalSection::~CXTPCriticalSection()
{
::DeleteCriticalSection(&m_csMutex);
}
void CXTPCriticalSection::EnterCritical()
{
::EnterCriticalSection(&m_csMutex);
}
void CXTPCriticalSection::LeaveCritical()
{
::LeaveCriticalSection(&m_csMutex);
}
//=============================================================================
// CXTPLockGuard
//=============================================================================
CXTPLockGuard::CXTPLockGuard(CRITICAL_SECTION& key)
: m_key(key)
{
LockThread();
}
CXTPLockGuard::~CXTPLockGuard()
{
UnLockThread();
}
void CXTPLockGuard::LockThread()
{
::EnterCriticalSection(&m_key);
}
void CXTPLockGuard::UnLockThread()
{
::LeaveCriticalSection(&m_key);
}
//////////////////////////////////////////////////////////////////////////
// CXTPAccessible
CXTPAccessible::CXTPAccessible()
{
m_modUser32.Init(_T("user32.dll"));
// We will load it later to optimize constructor.
// m_modOleAcc.LoadLibrary(_T("oleacc.dll"));
m_pNotifyWinEvent = NULL;
m_pLresultFromObject = NULL;
m_pAccessibleObjectFromWindow = NULL;
m_modUser32.GetProcAddress(
(FARPROC*)&m_pNotifyWinEvent, "NotifyWinEvent");
}
CXTPAccessible::~CXTPAccessible()
{
}
void CXTPAccessible::AccessibleNotifyWinEvent(DWORD event, HWND hwnd, LONG idObject, LONG idChild)
{
if (m_pNotifyWinEvent != NULL)
{
m_pNotifyWinEvent(event, hwnd, idObject, idChild);
}
}
HRESULT CXTPAccessible::AccessibleObjectFromWindow(HWND hwnd, DWORD dwId, REFIID riid, void** ppvObject)
{
if (!m_modOleAcc)
{
m_modOleAcc.LoadLibrary(_T("oleacc.dll"));
}
if (m_pAccessibleObjectFromWindow == 0)
{
m_modOleAcc.GetProcAddress(
(FARPROC*)&m_pAccessibleObjectFromWindow, "AccessibleObjectFromWindow");
}
if (m_pAccessibleObjectFromWindow)
{
return m_pAccessibleObjectFromWindow(hwnd, dwId, riid, ppvObject);
}
return E_FAIL;
}
LRESULT CXTPAccessible::LresultFromObject(REFIID riid, WPARAM wParam, LPUNKNOWN punk)
{
if (!m_modOleAcc)
{
m_modOleAcc.LoadLibrary(_T("oleacc.dll"));
}
if (m_pLresultFromObject == 0)
{
m_modOleAcc.GetProcAddress(
(FARPROC*)&m_pLresultFromObject, "LresultFromObject");
}
if (m_pLresultFromObject)
{
return m_pLresultFromObject(riid, wParam, punk);
}
return E_FAIL;
}
long CXTPAccessible::GetChildIndex(VARIANT* varChild)
{
if (!varChild) return -1;
if (varChild->vt == VT_EMPTY)
return CHILDID_SELF;
if (varChild->vt == VT_I4) return V_I4(varChild);
if (varChild->vt == VT_I2) return V_I2(varChild);
if (varChild->vt == (VT_I4 | VT_BYREF) && V_I4REF(varChild)) return *V_I4REF(varChild);
if (varChild->vt == (VT_I2 | VT_BYREF) && V_I2REF(varChild)) return *V_I2REF(varChild);
if (varChild->vt == (VT_VARIANT | VT_BYREF)) return GetChildIndex(varChild->pvarVal);
return -1;
}
STDMETHODIMP_(ULONG) CXTPAccessible::XAccessible::AddRef()
{
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible)
return (ULONG)pThis->GetAccessible()->ExternalAddRef();
}
STDMETHODIMP_(ULONG) CXTPAccessible::XAccessible::Release()
{
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible)
return (ULONG)pThis->GetAccessible()->ExternalRelease();
}
STDMETHODIMP CXTPAccessible::XAccessible::QueryInterface(
REFIID iid, LPVOID* ppvObj)
{
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible)
return (HRESULT)pThis->GetAccessible()->ExternalQueryInterface(&iid, ppvObj);
}
STDMETHODIMP CXTPAccessible::XAccessible::GetTypeInfoCount(
unsigned int*)
{
return E_NOTIMPL;
}
STDMETHODIMP CXTPAccessible::XAccessible::GetTypeInfo(
unsigned int, LCID, ITypeInfo**)
{
return E_NOTIMPL;
}
STDMETHODIMP CXTPAccessible::XAccessible::GetIDsOfNames(
REFIID, LPOLESTR*, unsigned int, LCID, DISPID*)
{
return E_NOTIMPL;
}
STDMETHODIMP CXTPAccessible::XAccessible::get_accParent(IDispatch* FAR* ppdispParent)
{
TRACE_ACCESSIBLE(_T("get_accParent\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->GetAccessibleParent(ppdispParent);
}
STDMETHODIMP CXTPAccessible::XAccessible::get_accChildCount(long FAR* pChildCount)
{
TRACE_ACCESSIBLE(_T("get_accChildCount\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->GetAccessibleChildCount(pChildCount);
}
STDMETHODIMP CXTPAccessible::XAccessible::get_accChild(VARIANT varChild, IDispatch* FAR* ppdispChild)
{
TRACE_ACCESSIBLE(_T("get_accChild\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->GetAccessibleChild(varChild, ppdispChild);
}
STDMETHODIMP CXTPAccessible::XAccessible::get_accName(VARIANT varChild, BSTR* pszName)
{
TRACE_ACCESSIBLE(_T("get_accName\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->GetAccessibleName(varChild, pszName);
}
STDMETHODIMP CXTPAccessible::XAccessible::get_accValue(VARIANT varChild, BSTR* pszValue)
{
TRACE_ACCESSIBLE(_T("get_accValue\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->GetAccessibleValue(varChild, pszValue);
}
STDMETHODIMP CXTPAccessible::XAccessible::get_accDescription(VARIANT varChild, BSTR FAR* pszDescription)
{
TRACE_ACCESSIBLE(_T("get_accDescription\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->GetAccessibleDescription(varChild, pszDescription);
}
STDMETHODIMP CXTPAccessible::XAccessible::get_accRole(VARIANT varChild, VARIANT* pvarRole)
{
TRACE_ACCESSIBLE(_T("get_accRole\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->GetAccessibleRole(varChild, pvarRole);
}
STDMETHODIMP CXTPAccessible::XAccessible::get_accState(VARIANT varChild, VARIANT* pvarState)
{
TRACE_ACCESSIBLE(_T("get_accState\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->GetAccessibleState(varChild, pvarState);
}
STDMETHODIMP CXTPAccessible::XAccessible::get_accHelp(VARIANT varChild, BSTR* pszHelp)
{
TRACE_ACCESSIBLE(_T("get_accHelp\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->GetAccessibleHelp(varChild, pszHelp);
}
STDMETHODIMP CXTPAccessible::XAccessible::get_accHelpTopic(BSTR* pszHelpFile, VARIANT varChild, long* pidTopic)
{
TRACE_ACCESSIBLE(_T("get_accHelpTopic\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->GetAccessibleHelpTopic(pszHelpFile, varChild, pidTopic);
}
STDMETHODIMP CXTPAccessible::XAccessible::get_accKeyboardShortcut(VARIANT varChild, BSTR* pszKeyboardShortcut)
{
TRACE_ACCESSIBLE(_T("get_accKeyboardShortcut\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->GetAccessibleKeyboardShortcut(varChild, pszKeyboardShortcut);
}
STDMETHODIMP CXTPAccessible::XAccessible::get_accFocus(VARIANT FAR* pvarFocusChild)
{
TRACE_ACCESSIBLE(_T("get_accFocus\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->GetAccessibleFocus(pvarFocusChild);
}
STDMETHODIMP CXTPAccessible::XAccessible::get_accSelection(VARIANT FAR* pvarSelectedChildren)
{
TRACE_ACCESSIBLE(_T("get_accSelection\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->GetAccessibleSelection(pvarSelectedChildren);
}
STDMETHODIMP CXTPAccessible::XAccessible::get_accDefaultAction(VARIANT varChild, BSTR* pszDefaultAction)
{
TRACE_ACCESSIBLE(_T("get_accDefaultAction\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->GetAccessibleDefaultAction(varChild, pszDefaultAction);
}
STDMETHODIMP CXTPAccessible::XAccessible::accSelect(long flagsSelect, VARIANT varChild)
{
TRACE_ACCESSIBLE(_T("accSelect\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->AccessibleSelect(flagsSelect, varChild);
}
STDMETHODIMP CXTPAccessible::XAccessible::accLocation(long* pxLeft, long* pyTop, long* pcxWidth, long* pcyHeight, VARIANT varChild)
{
TRACE_ACCESSIBLE(_T("accLocation\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->AccessibleLocation(pxLeft, pyTop, pcxWidth, pcyHeight, varChild);
}
STDMETHODIMP CXTPAccessible::XAccessible::accNavigate(long navDir, VARIANT varStart, VARIANT* pvarEndUpAt)
{
TRACE_ACCESSIBLE(_T("accNavigate\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->AccessibleNavigate(navDir, varStart, pvarEndUpAt);
}
STDMETHODIMP CXTPAccessible::XAccessible::accHitTest(long xLeft, long yTop, VARIANT* pvarID)
{
TRACE_ACCESSIBLE(_T("accHitTest\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->AccessibleHitTest(xLeft, yTop, pvarID);
}
STDMETHODIMP CXTPAccessible::XAccessible::accDoDefaultAction(VARIANT varChild)
{
TRACE_ACCESSIBLE(_T("accDoDefaultAction\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->AccessibleDoDefaultAction(varChild);
}
STDMETHODIMP CXTPAccessible::XAccessible::put_accName(VARIANT varChild, BSTR szName)
{
TRACE_ACCESSIBLE(_T("put_accName\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->PutAccessibleName(varChild, szName);
}
STDMETHODIMP CXTPAccessible::XAccessible::put_accValue(VARIANT varChild, BSTR pszValue)
{
TRACE_ACCESSIBLE(_T("put_accValue\n"));
METHOD_PROLOGUE_EX_(CXTPAccessible, ExternalAccessible);
return pThis->PutAccessibleValue(varChild, pszValue);
}
STDMETHODIMP CXTPAccessible::XAccessible::Invoke(
DISPID /*dispid*/, REFIID, LCID, unsigned short /*wFlags*/,
DISPPARAMS* /*pDispParams*/, VARIANT* /*pvarResult*/,
EXCEPINFO*, unsigned int*)
{
return E_NOTIMPL;
}
HRESULT CXTPAccessible::GetAccessibleParent(IDispatch** /*ppdispParent*/)
{
return E_NOTIMPL;
}
HRESULT CXTPAccessible::GetAccessibleChildCount(long* /*pcountChildren*/)
{
return E_NOTIMPL;
}
HRESULT CXTPAccessible::GetAccessibleChild(VARIANT /*varChild*/, IDispatch** /*ppdispChild*/)
{
return E_NOTIMPL;
}
HRESULT CXTPAccessible::GetAccessibleName(VARIANT /*varChild*/, BSTR* /*pszName*/)
{
return E_NOTIMPL;
}
HRESULT CXTPAccessible::GetAccessibleValue(VARIANT /*varChild*/, BSTR* /*pszValue*/)
{
return E_NOTIMPL;
}
HRESULT CXTPAccessible::GetAccessibleDescription(VARIANT /*varChild*/, BSTR* /*pszDescription*/)
{
return E_NOTIMPL;
}
HRESULT CXTPAccessible::GetAccessibleRole(VARIANT /*varChild*/, VARIANT* /*pvarRole*/)
{
return E_NOTIMPL;
}
HRESULT CXTPAccessible::GetAccessibleState(VARIANT /*varChild*/, VARIANT* /*pvarState*/)
{
return E_NOTIMPL;
}
HRESULT CXTPAccessible::GetAccessibleHelp(VARIANT /*varChild*/, BSTR* /*pszHelp*/)
{
return E_NOTIMPL;
}
HRESULT CXTPAccessible::GetAccessibleHelpTopic(BSTR* /*pszHelpFile*/, VARIANT /*varChild*/, long* /*pidTopic*/)
{
return E_NOTIMPL;
}
HRESULT CXTPAccessible::GetAccessibleKeyboardShortcut(VARIANT /*varChild*/, BSTR* /*pszKeyboardShortcut*/)
{
return E_NOTIMPL;
}
HRESULT CXTPAccessible::GetAccessibleFocus(VARIANT* /*pvarChild*/)
{
return S_FALSE;
}
HRESULT CXTPAccessible::GetAccessibleSelection(VARIANT* /*pvarChildren*/)
{
return S_FALSE;
}
HRESULT CXTPAccessible::GetAccessibleDefaultAction(VARIANT /*varChild*/, BSTR* /*pszDefaultAction*/)
{
return E_NOTIMPL;
}
HRESULT CXTPAccessible::AccessibleSelect(long /*flagsSelect*/, VARIANT /*varChild*/)
{
return E_NOTIMPL;
}
HRESULT CXTPAccessible::AccessibleLocation(long* /*pxLeft*/, long* /*pyTop*/, long* /*pcxWidth*/, long* /*pcyHeight*/, VARIANT /*varChild*/)
{
return E_NOTIMPL;
}
HRESULT CXTPAccessible::AccessibleNavigate(long /*navDir*/, VARIANT /*varStart*/, VARIANT* /*pvarEndUpAt*/)
{
return E_NOTIMPL;
}
HRESULT CXTPAccessible::AccessibleHitTest(long /*xLeft*/, long /*yTop*/, VARIANT* /*pvarChild*/)
{
return E_NOTIMPL;
}
HRESULT CXTPAccessible::AccessibleDoDefaultAction(VARIANT /*varChild*/)
{
return E_NOTIMPL;
}
HRESULT CXTPAccessible::PutAccessibleName(VARIANT /*varChild*/, BSTR /*szName*/)
{
return E_NOTIMPL;
}
HRESULT CXTPAccessible::PutAccessibleValue(VARIANT /*varChild*/, BSTR /*szValue*/)
{
return E_NOTIMPL;
}
CCmdTarget* CXTPAccessible::GetAccessible()
{
ASSERT(FALSE);
return NULL;
}