📄 access.cpp
字号:
// Try to use child object directly. if (varID.lVal > 0) { IAccessible* childAccessible = GetChildAccessible(varID.lVal); if (childAccessible) { varID.lVal = 0; HRESULT hResult = childAccessible->get_accHelp(varID, pszHelp); childAccessible->Release(); return hResult; } else if (m_pAccessible->GetIAccessibleStd()) return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->get_accHelp(varID, pszHelp); } else if (m_pAccessible->GetIAccessibleStd()) return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->get_accHelp (varID, pszHelp); } else { if (helpString.empty()) { * pszHelp = NULL; return S_FALSE; } else { wxBasicString basicString(helpString); * pszHelp = basicString.Get(); return S_OK; } } return E_NOTIMPL;}// Retrieves the full path of the WinHelp file associated with the specified// object and the identifier of the appropriate topic within that file.// Not all objects support this property.// NOTE: not supported by wxWidgets at this time. Use// GetHelpText instead.STDMETHODIMP wxIAccessible::get_accHelpTopic ( BSTR* pszHelpFile, VARIANT varChild, long* pidTopic){ wxLogTrace(wxT("access"), wxT("get_accHelpTopic")); wxASSERT (m_pAccessible != NULL); if (!m_pAccessible) return E_FAIL; if (varChild.vt != VT_I4) { wxLogTrace(wxT("access"), wxT("Invalid arg for get_accHelpTopic")); return E_INVALIDARG; } wxAccStatus status = wxACC_NOT_IMPLEMENTED; if (status == wxACC_FAIL) return E_FAIL; if (status == wxACC_NOT_IMPLEMENTED) { // Try to use child object directly. if (varChild.lVal > 0) { IAccessible* childAccessible = GetChildAccessible(varChild.lVal); if (childAccessible) { varChild.lVal = 0; HRESULT hResult = childAccessible->get_accHelpTopic(pszHelpFile, varChild, pidTopic); childAccessible->Release(); return hResult; } else if (m_pAccessible->GetIAccessibleStd()) return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->get_accHelpTopic(pszHelpFile, varChild, pidTopic); } else if (m_pAccessible->GetIAccessibleStd()) return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->get_accHelpTopic (pszHelpFile, varChild, pidTopic); } return E_NOTIMPL;}// Retrieves the specified object's shortcut key or access key, also known as// the mnemonic. All objects that have a shortcut key or access key support// this property.STDMETHODIMP wxIAccessible::get_accKeyboardShortcut ( VARIANT varID, BSTR* pszKeyboardShortcut){ wxLogTrace(wxT("access"), wxT("get_accKeyboardShortcut")); *pszKeyboardShortcut = NULL; wxASSERT (m_pAccessible != NULL); if (!m_pAccessible) return E_FAIL; if (varID.vt != VT_I4) { wxLogTrace(wxT("access"), wxT("Invalid arg for get_accKeyboardShortcut")); return E_INVALIDARG; } wxString keyboardShortcut; wxAccStatus status = m_pAccessible->GetKeyboardShortcut(varID.lVal, & keyboardShortcut); if (status == wxACC_FAIL) return E_FAIL; if (status == wxACC_NOT_IMPLEMENTED) { // Try to use child object directly. if (varID.lVal > 0) { IAccessible* childAccessible = GetChildAccessible(varID.lVal); if (childAccessible) { varID.lVal = 0; HRESULT hResult = childAccessible->get_accKeyboardShortcut(varID, pszKeyboardShortcut); childAccessible->Release(); return hResult; } else if (m_pAccessible->GetIAccessibleStd()) return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->get_accKeyboardShortcut(varID, pszKeyboardShortcut); } else if (m_pAccessible->GetIAccessibleStd()) return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->get_accKeyboardShortcut (varID, pszKeyboardShortcut); } else { if (keyboardShortcut.empty()) { * pszKeyboardShortcut = NULL; return S_FALSE; } else { wxBasicString basicString(keyboardShortcut); * pszKeyboardShortcut = basicString.Get(); return S_OK; } } return E_NOTIMPL;}// Retrieves the name of the specified object.// All objects support this property.STDMETHODIMP wxIAccessible::get_accName ( VARIANT varID, BSTR* pszName){ wxLogTrace(wxT("access"), wxT("get_accName")); *pszName = NULL; wxASSERT (m_pAccessible != NULL); if (!m_pAccessible) return E_FAIL; if (varID.vt != VT_I4) { wxLogTrace(wxT("access"), wxT("Invalid arg for get_accName")); return E_INVALIDARG; } wxString name; wxAccStatus status = m_pAccessible->GetName(varID.lVal, & name); if (status == wxACC_FAIL) return E_FAIL; if (status == wxACC_NOT_IMPLEMENTED) { // Try to use child object directly. if (varID.lVal > 0) { IAccessible* childAccessible = GetChildAccessible(varID.lVal); if (childAccessible) { varID.lVal = 0; HRESULT hResult = childAccessible->get_accName(varID, pszName); childAccessible->Release(); return hResult; } else if (m_pAccessible->GetIAccessibleStd()) return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->get_accName(varID, pszName); } else if (m_pAccessible->GetIAccessibleStd()) return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->get_accName (varID, pszName); } else { wxBasicString basicString(name); *pszName = basicString.Get(); return S_OK; } return E_NOTIMPL;}// Retrieves information that describes the role of the specified object.// All objects support this property.STDMETHODIMP wxIAccessible::get_accRole ( VARIANT varID, VARIANT* pVarRole){ wxLogTrace(wxT("access"), wxT("get_accRole")); wxASSERT (m_pAccessible != NULL); if (!m_pAccessible) return E_FAIL; if (varID.vt != VT_I4) { wxLogTrace(wxT("access"), wxT("Invalid arg for get_accRole")); return E_INVALIDARG; } VariantInit(pVarRole); wxAccRole role = wxROLE_NONE; wxAccStatus status = m_pAccessible->GetRole(varID.lVal, & role); if (status == wxACC_FAIL) return E_FAIL; if (status == wxACC_NOT_IMPLEMENTED) { // Try to use child object directly. if (varID.lVal > 0) { IAccessible* childAccessible = GetChildAccessible(varID.lVal); if (childAccessible) { varID.lVal = 0; HRESULT hResult = childAccessible->get_accRole(varID, pVarRole); childAccessible->Release(); return hResult; } else if (m_pAccessible->GetIAccessibleStd()) return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->get_accRole(varID, pVarRole); } else if (m_pAccessible->GetIAccessibleStd()) return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->get_accRole (varID, pVarRole); } else { if (role == wxROLE_NONE) { pVarRole->vt = VT_EMPTY; return S_OK; } pVarRole->lVal = wxConvertToWindowsRole(role); pVarRole->vt = VT_I4; return S_OK; } return E_NOTIMPL;}// Retrieves the current state of the specified object.// All objects support this property.STDMETHODIMP wxIAccessible::get_accState ( VARIANT varID, VARIANT* pVarState){ wxLogTrace(wxT("access"), wxT("get_accState")); wxASSERT (m_pAccessible != NULL); if (!m_pAccessible) return E_FAIL; if (varID.vt != VT_I4 && varID.vt != VT_EMPTY) { wxLogTrace(wxT("access"), wxT("Invalid arg for get_accState")); return E_INVALIDARG; } long wxstate = 0; wxAccStatus status = m_pAccessible->GetState(varID.lVal, & wxstate); if (status == wxACC_FAIL) return E_FAIL; if (status == wxACC_NOT_IMPLEMENTED) { // Try to use child object directly. if (varID.lVal > 0) { IAccessible* childAccessible = GetChildAccessible(varID.lVal); if (childAccessible) { varID.lVal = 0; HRESULT hResult = childAccessible->get_accState(varID, pVarState); childAccessible->Release(); return hResult; } else if (m_pAccessible->GetIAccessibleStd()) return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->get_accState(varID, pVarState); } else if (m_pAccessible->GetIAccessibleStd()) return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->get_accState (varID, pVarState); } else { long state = wxConvertToWindowsState(wxstate); pVarState->lVal = state; pVarState->vt = VT_I4; return S_OK; } return E_NOTIMPL;}// Retrieves the value of the specified object.// Not all objects have a value.STDMETHODIMP wxIAccessible::get_accValue ( VARIANT varID, BSTR* pszValue){ wxLogTrace(wxT("access"), wxT("get_accValue")); wxASSERT (m_pAccessible != NULL); if (!m_pAccessible) return E_FAIL; if (varID.vt != VT_I4) { wxLogTrace(wxT("access"), wxT("Invalid arg for get_accValue")); return E_INVALIDARG; } wxString strValue; wxAccStatus status = m_pAccessible->GetValue(varID.lVal, & strValue); if (status == wxACC_FAIL) return E_FAIL; if (status == wxACC_NOT_IMPLEMENTED) { // Try to use child object directly. if (varID.lVal > 0) { IAccessible* childAccessible = GetChildAccessible(varID.lVal); if (childAccessible) { varID.lVal = 0; HRESULT hResult = childAccessible->get_accValue(varID, pszValue); childAccessible->Release(); return hResult; } else if (m_pAccessible->GetIAccessibleStd()) return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->get_accValue(varID, pszValue); } else if (m_pAccessible->GetIAccessibleStd()) return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->get_accValue (varID, pszValue); } else { wxBasicString basicString(strValue); * pszValue = basicString.Get(); return S_OK; } return E_NOTIMPL;}// Modifies the selection or moves the keyboard focus of the// specified object. All objects that select or receive the// keyboard focus must support this method.STDMETHODIMP wxIAccessible::accSelect ( long flagsSelect, VARIANT varID ){ wxLogTrace(wxT("access"), wxT("get_accSelect")); wxASSERT (m_pAccessible != NULL); if (!m_pAccessible) return E_FAIL; if (varID.vt != VT_I4 && varID.vt != VT_EMPTY) { wxLogTrace(wxT("access"), wxT("Invalid arg for accSelect")); return E_INVALIDARG; } wxAccSelectionFlags wxsel = wxConvertFromWindowsSelFlag(flagsSelect); wxAccStatus status = m_pAccessible->Select(varID.lVal, wxsel); if (status == wxACC_FAIL) return E_FAIL; if (status == wxACC_NOT_IMPLEMENTED) { // Try to use child object directly. if (varID.lVal > 0 && varID.lVal > 0) { IAccessible* childAccessible = GetChildAccessible(varID.lVal); if (childAccessible) { varID.lVal = 0; HRESULT hResult = childAccessible->accSelect(flagsSelect, varID); childAccessible->Release(); return hResult; } else if (m_pAccessible->GetIAccessibleStd()) return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->accSelect(flagsSelect, varID); } else if (m_pAccessible->GetIAccessibleStd()) return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->accSelect(flagsSelect, varID); } else return S_OK; return E_NOTIMPL;}// Retrieves the object that has the keyboard focus. All objects// that receive the keyboard focus must support this property.STDMETHODIMP wxIAccessible::get_accFocus ( VARIANT* pVarID){ wxLogTrace(wxT("access"), wxT("get_accFocus")); wxASSERT (m_pAccessible != NULL); if (!m_pAccessible) return E_FAIL; wxAccessible* childObject = NULL; int childId = 0; VariantInit(pVarID); wxAccStatus status = m_pAccessible->GetFocus(& childId, & childObject); if (status == wxACC_FAIL) return E_FAIL; if (status == wxACC_NOT_IMPLEMENTED) { // Use standard interface instead. IAccessible* stdInterface = (IAccessible*)m_pAccessible->GetIAccessibleStd(); if (!stdInterface) return E_NOTIMPL; else return stdInterface->get_accFocus (pVarID); } if (childObject) { if (childObject == m_pAccessible) { pVarID->vt = VT_I4; pVarID->lVal = CHILDID_SELF; return S_OK; } else { wxIAccessible* childIA = childObject->GetIAccessible(); if (!childIA) return E_NOTIMPL; if (childIA->QueryInterface(IID_IDispatch, (LPVOID*) & pVarID->pdispVal) != S_OK) return E_FAIL; pVarID->vt = VT_DISPATCH; return S_OK; } } else if (childId > 0) { pVarID->vt = VT_I4; pVarID->lVal = childId; return S_OK; } else { pVarID->vt = VT_EMPTY; return S_FALSE; } #if 0 // all cases above already cause some return action so below line // is unreachable and cause unnecessary warning return E_NOTIMPL; #endif}// Retrieves the selected children of this object. All objects// selected must support this property.STDMETHODIMP wxIAccessible::get_accSelection ( VARIANT * pVarChildren){#if wxUSE_VARIANT wxLogTrace(wxT("access"), wxT("get_accSelection")); wxASSERT (m_pAccessible != NULL); if (!m_pAccessible) return E_FAIL; VariantInit(pVarChildren); wxVariant selections; wxAccStatus status = m_pAccessible->GetSelections(& selections); if (status == wxACC_FAIL) return E_FAIL; if (status == wxACC_NOT_IMPLEMENTED) { // Use standard interface instead. IAccessible* stdInterface = (IAccessible*)m_pAccessible->GetIAccessibleStd(); if (!stdInterface) return E_NOTIMPL; else return stdInterface->get_accSelection (pVarChildren); } else { if (selections.GetType() == wxT("long")) { pVarChildren->vt = VT_I4; pVarChildren->lVal = selections.GetLong();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -