mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
4.8 KiB
138 lines
4.8 KiB
#ifndef _IAccessible_h
|
|
#define _IAccessible_h
|
|
|
|
#include "oleacc.h"
|
|
#include "mnbase.h"
|
|
#include "menuband.h"
|
|
|
|
#define CHILDID_SELF 0
|
|
|
|
#define MB_STATE_TRACK 1
|
|
#define MB_STATE_MENU 2
|
|
#define MB_STATE_ITEM 4
|
|
|
|
#define TOOLBAR_MASK 0x80000000
|
|
|
|
// BUGBUG (lamadio): The designers of the Accessibility interface did not know
|
|
// the rule about COM identity. They allow a QI for the external object IEnumVariant
|
|
|
|
class CAccessible : public IAccessible, public IEnumVARIANT, public IOleWindow
|
|
{
|
|
int _cRef;
|
|
// IDispatch Support
|
|
ITypeInfo* _pTypeInfo;
|
|
BOOL _LoadTypeLib();
|
|
|
|
|
|
// Track menu popup Support
|
|
IAccessible* _pInnerAcc;
|
|
HWND _hwndMenuWindow;
|
|
HMENU _hMenu;
|
|
WORD _wID;
|
|
|
|
// Menuband Support
|
|
CMenuToolbarBase* _pmtbBottom;
|
|
CMenuToolbarBase* _pmtbTop;
|
|
IShellMenuAcc* _psma;
|
|
IMenuBand* _pmb;
|
|
|
|
// Menuband Item Support
|
|
CMenuToolbarBase* _pmtbItem;
|
|
|
|
int _iAccIndex;
|
|
int _iIndex;
|
|
int _iEnumIndex;
|
|
int _idCmd;
|
|
|
|
|
|
// Object info
|
|
BITBOOL _fInitialized: 1;
|
|
BITBOOL _fState: 3;
|
|
|
|
HRESULT _GetVariantFromChildIndex(HWND hwnd, int iIndex, VARIANT* pvarChild);
|
|
HRESULT _GetChildFromVariant(VARIANT* pvarChild, CMenuToolbarBase** ppmtb, int* iIndex);
|
|
HRESULT _GetAccessibleItem(int iIndex, IDispatch** ppdisp);
|
|
HRESULT _GetAccName(BSTR* pbstr);
|
|
HRESULT _Navigate(long navDir, VARIANT varStart, VARIANT * pvarEndUpAt);
|
|
|
|
|
|
public:
|
|
CAccessible(HMENU, WORD);
|
|
CAccessible(IMenuBand*);
|
|
CAccessible(IMenuBand*, int iIndex);
|
|
virtual ~CAccessible();
|
|
HRESULT InitAcc();
|
|
|
|
// *** IUnknown methods ***
|
|
virtual STDMETHODIMP_(ULONG) AddRef();
|
|
virtual STDMETHODIMP_(ULONG) Release();
|
|
virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID FAR* ppvObj);
|
|
|
|
// *** IDispatch methods ***
|
|
virtual STDMETHODIMP GetTypeInfoCount(UINT FAR* pctinfo);
|
|
virtual STDMETHODIMP GetTypeInfo(UINT itinfo, LCID lcid, ITypeInfo FAR* FAR* pptinfo);
|
|
virtual STDMETHODIMP GetIDsOfNames(REFIID riid, OLECHAR FAR* FAR* rgszNames, UINT cNames,
|
|
LCID lcid, DISPID FAR* rgdispid);
|
|
virtual STDMETHODIMP Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags,
|
|
DISPPARAMS FAR* pdispparams, VARIANT FAR* pvarResult, EXCEPINFO FAR* pexcepinfo,
|
|
UINT FAR* puArgErr);
|
|
|
|
|
|
// *** IOleWindow methods ***
|
|
virtual STDMETHODIMP GetWindow(HWND * lphwnd);
|
|
virtual STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode);
|
|
|
|
|
|
// *** IAccessible methods ***
|
|
virtual STDMETHODIMP get_accParent(IDispatch * FAR* ppdispParent);
|
|
virtual STDMETHODIMP get_accChildCount(long FAR* pChildCount);
|
|
virtual STDMETHODIMP get_accChild(VARIANT varChildIndex, IDispatch * FAR* ppdispChild);
|
|
|
|
virtual STDMETHODIMP get_accName(VARIANT varChild, BSTR* pszName);
|
|
virtual STDMETHODIMP get_accValue(VARIANT varChild, BSTR* pszValue);
|
|
virtual STDMETHODIMP get_accDescription(VARIANT varChild, BSTR FAR* pszDescription);
|
|
virtual STDMETHODIMP get_accRole(VARIANT varChild, VARIANT *pvarRole);
|
|
virtual STDMETHODIMP get_accState(VARIANT varChild, VARIANT *pvarState);
|
|
|
|
|
|
virtual STDMETHODIMP get_accHelp(VARIANT varChild, BSTR* pszHelp);
|
|
virtual STDMETHODIMP get_accHelpTopic(BSTR* pszHelpFile, VARIANT varChild, long* pidTopic);
|
|
virtual STDMETHODIMP get_accKeyboardShortcut(VARIANT varChild, BSTR* pszKeyboardShortcut);
|
|
|
|
virtual STDMETHODIMP get_accFocus(VARIANT FAR * pvarFocusChild);
|
|
|
|
virtual STDMETHODIMP get_accSelection(VARIANT FAR * pvarSelectedChildren);
|
|
|
|
virtual STDMETHODIMP get_accDefaultAction(VARIANT varChild, BSTR* pszDefaultAction);
|
|
|
|
virtual STDMETHODIMP accSelect(long flagsSelect, VARIANT varChild);
|
|
|
|
virtual STDMETHODIMP accLocation(long* pxLeft, long* pyTop, long* pcxWidth, long* pcyHeight, VARIANT varChild);
|
|
|
|
virtual STDMETHODIMP accNavigate(long navDir, VARIANT varStart, VARIANT * pvarEndUpAt);
|
|
virtual STDMETHODIMP accHitTest(long xLeft, long yTop, VARIANT * pvarChildAtPoint);
|
|
|
|
virtual STDMETHODIMP accDoDefaultAction(VARIANT varChild);
|
|
|
|
virtual STDMETHODIMP put_accName(VARIANT varChild, BSTR szName);
|
|
virtual STDMETHODIMP put_accValue(VARIANT varChild, BSTR pszValue);
|
|
|
|
|
|
// *** IEnumVARIANT methods ***
|
|
virtual STDMETHODIMP Next(unsigned long celt,
|
|
VARIANT FAR* rgvar,
|
|
unsigned long FAR* pceltFetched);
|
|
virtual STDMETHODIMP Skip(unsigned long celt);
|
|
virtual STDMETHODIMP Reset();
|
|
virtual STDMETHODIMP Clone(IEnumVARIANT FAR* FAR* ppenum);
|
|
};
|
|
|
|
extern "C"
|
|
{
|
|
LRESULT LresultFromObject(REFIID riid, WPARAM wParam, IUnknown*);
|
|
void WINAPI NotifyWinEvent(DWORD event, HWND hwnd,
|
|
LONG idObject, LONG idChild);
|
|
}
|
|
|
|
|
|
#endif
|