📄 access.cpp
字号:
return S_OK; } else if (selections.GetType() == wxT("void*")) { wxAccessible* childObject = (wxAccessible*) selections.GetVoidPtr(); wxIAccessible* childIA = childObject->GetIAccessible(); if (!childIA) return E_NOTIMPL; if (childIA->QueryInterface(IID_IDispatch, (LPVOID*) & pVarChildren->pdispVal) != S_OK) return E_FAIL; pVarChildren->vt = VT_DISPATCH; return S_OK; } else if (selections.GetType() == wxT("list")) { // TODO: should we AddRef for every "void*" member?? wxIEnumVARIANT* enumVariant = new wxIEnumVARIANT(selections); enumVariant->AddRef(); pVarChildren->vt = VT_UNKNOWN; pVarChildren->punkVal = enumVariant; return S_OK; } }#else wxUnusedVar(pVarChildren);#endif // wxUSE_VARIANT return E_NOTIMPL;}// Get type infoSTDMETHODIMP wxIAccessible::GetTypeInfo(unsigned int WXUNUSED(typeInfo), LCID WXUNUSED(lcid), ITypeInfo** ppTypeInfo){ *ppTypeInfo = NULL; return E_NOTIMPL;}// Get type info countSTDMETHODIMP wxIAccessible::GetTypeInfoCount(unsigned int* typeInfoCount){ *typeInfoCount = 0; return E_NOTIMPL;}// Get ids of namesSTDMETHODIMP wxIAccessible::GetIDsOfNames(REFIID WXUNUSED(riid), OLECHAR** WXUNUSED(names), unsigned int WXUNUSED(cNames), LCID WXUNUSED(lcid), DISPID* WXUNUSED(dispId)){ return E_NOTIMPL;}// InvokeSTDMETHODIMP wxIAccessible::Invoke(DISPID WXUNUSED(dispIdMember), REFIID WXUNUSED(riid), LCID WXUNUSED(lcid), WORD WXUNUSED(wFlags), DISPPARAMS *WXUNUSED(pDispParams), VARIANT *WXUNUSED(pVarResult), EXCEPINFO *WXUNUSED(pExcepInfo), unsigned int *WXUNUSED(puArgErr) ){ return E_NOTIMPL;}// Gets the standard IAccessible interface for the given child or object.// Call Release if this is non-NULL.IAccessible* wxIAccessible::GetChildStdAccessible(int id){ if (id == 0) { IAccessible* obj = (IAccessible*)m_pAccessible->GetIAccessibleStd(); obj->AddRef(); return obj; } else { VARIANT var; VariantInit(& var); var.vt = VT_I4; var.lVal = id; IDispatch* pDispatch = NULL; if (S_OK == get_accChild ( var, & pDispatch)) { IAccessible* childAccessible = NULL; if (pDispatch->QueryInterface(IID_IAccessible, (LPVOID*) & childAccessible) == S_OK) { pDispatch->Release(); wxIAccessible* c = (wxIAccessible*) childAccessible; IAccessible* stdChildAccessible = (IAccessible*) c->m_pAccessible->GetIAccessibleStd(); stdChildAccessible->AddRef(); childAccessible->Release(); return stdChildAccessible; } else { pDispatch->Release(); } } }#if 0 { // Loop until we find the right id long nChildren = 0; this->get_accChildCount(& nChildren); int i; for (i = 0; i < nChildren; i++) { long obtained = 0; VARIANT var; VariantInit(& var); var.vt = VT_I4; if (S_OK == AccessibleChildren(this, i, 1, & var, &obtained)) { if (var.lVal == id) { VariantInit(& var); var.vt = VT_DISPATCH; if (S_OK == AccessibleChildren(this, i, 1, & var, &obtained)) { IAccessible* childAccessible = NULL; if (var.pdispVal->QueryInterface(IID_IAccessible, (LPVOID*) & childAccessible) == S_OK) { var.pdispVal->Release(); return childAccessible; } else { var.pdispVal->Release(); } } } break; } } }#endif return NULL;}// Gets the IAccessible interface for the given child or object.// Call Release if this is non-NULL.IAccessible* wxIAccessible::GetChildAccessible(int id){ if (id == 0) { IAccessible* obj = this; obj->AddRef(); return obj; } else { VARIANT var; VariantInit(& var); var.vt = VT_I4; var.lVal = id; IDispatch* pDispatch = NULL; if (S_OK == get_accChild ( var, & pDispatch)) { IAccessible* childAccessible = NULL; if (pDispatch->QueryInterface(IID_IAccessible, (LPVOID*) & childAccessible) == S_OK) { pDispatch->Release(); return childAccessible; } else { pDispatch->Release(); } } } return NULL;}// ----------------------------------------------------------------------------// wxAccessible implementation// ----------------------------------------------------------------------------// ctors// common part of all ctorsvoid wxAccessible::Init(){ m_pIAccessibleStd = NULL; m_pIAccessible = new wxIAccessible(this); m_pIAccessible->AddRef();}wxAccessible::wxAccessible(wxWindow* win) : wxAccessibleBase(win){ Init();}wxAccessible::~wxAccessible(){ m_pIAccessible->Release(); if (m_pIAccessibleStd) ((IAccessible*)m_pIAccessibleStd)->Release();}// Gets or creates a standard interface for this object.void* wxAccessible::GetIAccessibleStd(){ if (m_pIAccessibleStd) return m_pIAccessibleStd; if (GetWindow()) { HRESULT retCode = ::CreateStdAccessibleObject((HWND) GetWindow()->GetHWND(), OBJID_CLIENT, IID_IAccessible, (void**) & m_pIAccessibleStd); if (retCode == S_OK) return m_pIAccessibleStd; else { m_pIAccessibleStd = NULL; return NULL; } } return NULL;}// Sends an event when something changes in an accessible object.void wxAccessible::NotifyEvent(int eventType, wxWindow* window, wxAccObject objectType, int objectId){ ::NotifyWinEvent((DWORD) eventType, (HWND) window->GetHWND(), (LONG) objectType, (LONG) objectId);}// Utilities// Convert to Windows roleint wxConvertToWindowsRole(wxAccRole wxrole){ switch (wxrole) { case wxROLE_NONE: return 0; case wxROLE_SYSTEM_ALERT: return ROLE_SYSTEM_ALERT; case wxROLE_SYSTEM_ANIMATION: return ROLE_SYSTEM_ANIMATION; case wxROLE_SYSTEM_APPLICATION: return ROLE_SYSTEM_APPLICATION; case wxROLE_SYSTEM_BORDER: return ROLE_SYSTEM_BORDER; case wxROLE_SYSTEM_BUTTONDROPDOWN: return ROLE_SYSTEM_BUTTONDROPDOWN; case wxROLE_SYSTEM_BUTTONDROPDOWNGRID: return ROLE_SYSTEM_BUTTONDROPDOWNGRID; case wxROLE_SYSTEM_BUTTONMENU: return ROLE_SYSTEM_BUTTONMENU; case wxROLE_SYSTEM_CARET: return ROLE_SYSTEM_CARET; case wxROLE_SYSTEM_CELL: return ROLE_SYSTEM_CELL; case wxROLE_SYSTEM_CHARACTER: return ROLE_SYSTEM_CHARACTER; case wxROLE_SYSTEM_CHART: return ROLE_SYSTEM_CHART; case wxROLE_SYSTEM_CHECKBUTTON: return ROLE_SYSTEM_CHECKBUTTON; case wxROLE_SYSTEM_CLIENT: return ROLE_SYSTEM_CLIENT; case wxROLE_SYSTEM_CLOCK: return ROLE_SYSTEM_CLOCK; case wxROLE_SYSTEM_COLUMN: return ROLE_SYSTEM_COLUMN; case wxROLE_SYSTEM_COLUMNHEADER: return ROLE_SYSTEM_COLUMNHEADER; case wxROLE_SYSTEM_COMBOBOX: return ROLE_SYSTEM_COMBOBOX; case wxROLE_SYSTEM_CURSOR: return ROLE_SYSTEM_CURSOR; case wxROLE_SYSTEM_DIAGRAM: return ROLE_SYSTEM_DIAGRAM; case wxROLE_SYSTEM_DIAL: return ROLE_SYSTEM_DIAL; case wxROLE_SYSTEM_DIALOG: return ROLE_SYSTEM_DIALOG; case wxROLE_SYSTEM_DOCUMENT: return ROLE_SYSTEM_DOCUMENT; case wxROLE_SYSTEM_DROPLIST: return ROLE_SYSTEM_DROPLIST; case wxROLE_SYSTEM_EQUATION: return ROLE_SYSTEM_EQUATION; case wxROLE_SYSTEM_GRAPHIC: return ROLE_SYSTEM_GRAPHIC; case wxROLE_SYSTEM_GRIP: return ROLE_SYSTEM_GRIP; case wxROLE_SYSTEM_GROUPING: return ROLE_SYSTEM_GROUPING; case wxROLE_SYSTEM_HELPBALLOON: return ROLE_SYSTEM_HELPBALLOON; case wxROLE_SYSTEM_HOTKEYFIELD: return ROLE_SYSTEM_HOTKEYFIELD; case wxROLE_SYSTEM_INDICATOR: return ROLE_SYSTEM_INDICATOR; case wxROLE_SYSTEM_LINK: return ROLE_SYSTEM_LINK; case wxROLE_SYSTEM_LIST: return ROLE_SYSTEM_LIST; case wxROLE_SYSTEM_LISTITEM: return ROLE_SYSTEM_LISTITEM; case wxROLE_SYSTEM_MENUBAR: return ROLE_SYSTEM_MENUBAR; case wxROLE_SYSTEM_MENUITEM: return ROLE_SYSTEM_MENUITEM; case wxROLE_SYSTEM_MENUPOPUP: return ROLE_SYSTEM_MENUPOPUP; case wxROLE_SYSTEM_OUTLINE: return ROLE_SYSTEM_OUTLINE; case wxROLE_SYSTEM_OUTLINEITEM: return ROLE_SYSTEM_OUTLINEITEM; case wxROLE_SYSTEM_PAGETAB: return ROLE_SYSTEM_PAGETAB; case wxROLE_SYSTEM_PAGETABLIST: return ROLE_SYSTEM_PAGETABLIST; case wxROLE_SYSTEM_PANE: return ROLE_SYSTEM_PANE; case wxROLE_SYSTEM_PROGRESSBAR: return ROLE_SYSTEM_PROGRESSBAR; case wxROLE_SYSTEM_PROPERTYPAGE: return ROLE_SYSTEM_PROPERTYPAGE; case wxROLE_SYSTEM_PUSHBUTTON: return ROLE_SYSTEM_PUSHBUTTON; case wxROLE_SYSTEM_RADIOBUTTON: return ROLE_SYSTEM_RADIOBUTTON; case wxROLE_SYSTEM_ROW: return ROLE_SYSTEM_ROW; case wxROLE_SYSTEM_ROWHEADER: return ROLE_SYSTEM_ROWHEADER; case wxROLE_SYSTEM_SCROLLBAR: return ROLE_SYSTEM_SCROLLBAR; case wxROLE_SYSTEM_SEPARATOR: return ROLE_SYSTEM_SEPARATOR; case wxROLE_SYSTEM_SLIDER: return ROLE_SYSTEM_SLIDER; case wxROLE_SYSTEM_SOUND: return ROLE_SYSTEM_SOUND; case wxROLE_SYSTEM_SPINBUTTON: return ROLE_SYSTEM_SPINBUTTON; case wxROLE_SYSTEM_STATICTEXT: return ROLE_SYSTEM_STATICTEXT; case wxROLE_SYSTEM_STATUSBAR: return ROLE_SYSTEM_STATUSBAR; case wxROLE_SYSTEM_TABLE: return ROLE_SYSTEM_TABLE; case wxROLE_SYSTEM_TEXT: return ROLE_SYSTEM_TEXT; case wxROLE_SYSTEM_TITLEBAR: return ROLE_SYSTEM_TITLEBAR; case wxROLE_SYSTEM_TOOLBAR: return ROLE_SYSTEM_TOOLBAR; case wxROLE_SYSTEM_TOOLTIP: return ROLE_SYSTEM_TOOLTIP; case wxROLE_SYSTEM_WHITESPACE: return ROLE_SYSTEM_WHITESPACE; case wxROLE_SYSTEM_WINDOW: return ROLE_SYSTEM_WINDOW; } return 0;}// Convert to Windows statelong wxConvertToWindowsState(long wxstate){ long state = 0; if (wxstate & wxACC_STATE_SYSTEM_ALERT_HIGH) state |= STATE_SYSTEM_ALERT_HIGH; if (wxstate & wxACC_STATE_SYSTEM_ALERT_MEDIUM) state |= STATE_SYSTEM_ALERT_MEDIUM; if (wxstate & wxACC_STATE_SYSTEM_ALERT_LOW) state |= STATE_SYSTEM_ALERT_LOW; if (wxstate & wxACC_STATE_SYSTEM_ANIMATED) state |= STATE_SYSTEM_ANIMATED; if (wxstate & wxACC_STATE_SYSTEM_BUSY) state |= STATE_SYSTEM_BUSY; if (wxstate & wxACC_STATE_SYSTEM_CHECKED) state |= STATE_SYSTEM_CHECKED; if (wxstate & wxACC_STATE_SYSTEM_COLLAPSED) state |= STATE_SYSTEM_COLLAPSED; if (wxstate & wxACC_STATE_SYSTEM_DEFAULT) state |= STATE_SYSTEM_DEFAULT; if (wxstate & wxACC_STATE_SYSTEM_EXPANDED) state |= STATE_SYSTEM_EXPANDED; if (wxstate & wxACC_STATE_SYSTEM_EXTSELECTABLE) state |= STATE_SYSTEM_EXTSELECTABLE; if (wxstate & wxACC_STATE_SYSTEM_FLOATING) state |= STATE_SYSTEM_FLOATING; if (wxstate & wxACC_STATE_SYSTEM_FOCUSABLE) state |= STATE_SYSTEM_FOCUSABLE; if (wxstate & wxACC_STATE_SYSTEM_FOCUSED) state |= STATE_SYSTEM_FOCUSED; if (wxstate & wxACC_STATE_SYSTEM_HOTTRACKED) state |= STATE_SYSTEM_HOTTRACKED; if (wxstate & wxACC_STATE_SYSTEM_INVISIBLE) state |= STATE_SYSTEM_INVISIBLE; if (wxstate & wxACC_STATE_SYSTEM_INVISIBLE) state |= STATE_SYSTEM_INVISIBLE; if (wxstate & wxACC_STATE_SYSTEM_MIXED) state |= STATE_SYSTEM_MIXED; if (wxstate & wxACC_STATE_SYSTEM_MULTISELECTABLE) state |= STATE_SYSTEM_MULTISELECTABLE; if (wxstate & wxACC_STATE_SYSTEM_OFFSCREEN) state |= STATE_SYSTEM_OFFSCREEN; if (wxstate & wxACC_STATE_SYSTEM_PRESSED) state |= STATE_SYSTEM_PRESSED;// if (wxstate & wxACC_STATE_SYSTEM_PROTECTED)// state |= STATE_SYSTEM_PROTECTED; if (wxstate & wxACC_STATE_SYSTEM_READONLY) state |= STATE_SYSTEM_READONLY; if (wxstate & wxACC_STATE_SYSTEM_SELECTABLE) state |= STATE_SYSTEM_SELECTABLE; if (wxstate & wxACC_STATE_SYSTEM_SELECTED) state |= STATE_SYSTEM_SELECTED; if (wxstate & wxACC_STATE_SYSTEM_SELFVOICING) state |= STATE_SYSTEM_SELFVOICING; if (wxstate & wxACC_STATE_SYSTEM_UNAVAILABLE) state |= STATE_SYSTEM_UNAVAILABLE; return state;}// Convert to Windows selection flagint wxConvertToWindowsSelFlag(wxAccSelectionFlags wxsel){ int sel = 0; if (wxsel & wxACC_SEL_TAKEFOCUS) sel |= SELFLAG_TAKEFOCUS; if (wxsel & wxACC_SEL_TAKESELECTION) sel |= SELFLAG_TAKESELECTION; if (wxsel & wxACC_SEL_EXTENDSELECTION) sel |= SELFLAG_EXTENDSELECTION; if (wxsel & wxACC_SEL_ADDSELECTION) sel |= SELFLAG_ADDSELECTION; if (wxsel & wxACC_SEL_REMOVESELECTION) sel |= SELFLAG_REMOVESELECTION; return sel;}// Convert from Windows selection flagwxAccSelectionFlags wxConvertFromWindowsSelFlag(int sel){ int wxsel = 0; if (sel & SELFLAG_TAKEFOCUS) wxsel |= wxACC_SEL_TAKEFOCUS; if (sel & SELFLAG_TAKESELECTION) wxsel |= wxACC_SEL_TAKESELECTION; if (sel & SELFLAG_EXTENDSELECTION) wxsel |= wxACC_SEL_EXTENDSELECTION; if (sel & SELFLAG_ADDSELECTION) wxsel |= wxACC_SEL_ADDSELECTION; if (sel & SELFLAG_REMOVESELECTION) wxsel |= wxACC_SEL_REMOVESELECTION; return (wxAccSelectionFlags) wxsel;}#endif // wxUSE_OLE && wxUSE_ACCESSIBILITY
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -