windows-nt/Source/XPSP1/NT/shell/browseui/iaccess.h
2020-09-26 16:20:57 +08:00

139 lines
4.8 KiB
C++

#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