📄 access.cpp
字号:
}
else
{
// This doesn't seem to be allowed, despite the documentation,
// so we handle it higher up by using the standard interface.
wxLogTrace(wxT("access"), wxT("Returning NULL parent because there was none"));
*ppDispParent = NULL;
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
}
// Performs the object's default action. Not all objects have a default
// action.
STDMETHODIMP wxIAccessible::accDoDefaultAction(VARIANT varID)
{
wxLogTrace(wxT("access"), wxT("accDoDefaultAction"));
wxASSERT (m_pAccessible != NULL);
if (!m_pAccessible)
return E_FAIL;
if (varID.vt != VT_I4)
{
wxLogTrace(wxT("access"), wxT("Invalid arg for accDoDefaultAction"));
return E_INVALIDARG;
}
wxAccStatus status = m_pAccessible->DoDefaultAction(varID.lVal);
if (status == wxACC_FAIL)
return E_FAIL;
if (status == wxACC_NOT_SUPPORTED)
return DISP_E_MEMBERNOTFOUND;
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->accDoDefaultAction(varID);
childAccessible->Release();
return hResult;
}
else if (m_pAccessible->GetIAccessibleStd())
return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->accDoDefaultAction(varID);
}
else if (m_pAccessible->GetIAccessibleStd())
return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->accDoDefaultAction(varID);
}
return E_FAIL;
}
// Retrieves a string that describes the object's default action.
// Not all objects have a default action.
STDMETHODIMP wxIAccessible::get_accDefaultAction ( VARIANT varID, BSTR* pszDefaultAction)
{
wxLogTrace(wxT("access"), wxT("get_accDefaultAction"));
wxASSERT (m_pAccessible != NULL);
if (!m_pAccessible)
return E_FAIL;
if (varID.vt != VT_I4)
{
wxLogTrace(wxT("access"), wxT("Invalid arg for get_accDefaultAction"));
return E_INVALIDARG;
}
wxString defaultAction;
wxAccStatus status = m_pAccessible->GetDefaultAction(varID.lVal, & defaultAction);
if (status == wxACC_FAIL)
return E_FAIL;
if (status == wxACC_NOT_SUPPORTED)
return DISP_E_MEMBERNOTFOUND;
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_accDefaultAction(varID, pszDefaultAction);
childAccessible->Release();
return hResult;
}
else if (m_pAccessible->GetIAccessibleStd())
return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->get_accDefaultAction(varID, pszDefaultAction);
}
else if (m_pAccessible->GetIAccessibleStd())
return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->get_accDefaultAction(varID, pszDefaultAction);
}
else
{
if (defaultAction.IsEmpty())
{
* pszDefaultAction = NULL;
return S_FALSE;
}
else
{
wxBasicString basicString(defaultAction);
* pszDefaultAction = basicString.Get();
return S_OK;
}
}
return E_FAIL;
}
// Retrieves a string that describes the visual appearance of the specified object.
// Not all objects have a description.
STDMETHODIMP wxIAccessible::get_accDescription ( VARIANT varID, BSTR* pszDescription)
{
wxLogTrace(wxT("access"), wxT("get_accDescription"));
wxASSERT (m_pAccessible != NULL);
if (!m_pAccessible)
return E_FAIL;
if (varID.vt != VT_I4)
{
wxLogTrace(wxT("access"), wxT("Invalid arg for get_accDescription"));
return E_INVALIDARG;
}
wxString description;
wxAccStatus status = m_pAccessible->GetDescription(varID.lVal, & description);
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_accDescription(varID, pszDescription);
childAccessible->Release();
return hResult;
}
else if (m_pAccessible->GetIAccessibleStd())
return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->get_accDescription(varID, pszDescription);
}
else if (m_pAccessible->GetIAccessibleStd())
return ((IAccessible*) m_pAccessible->GetIAccessibleStd())->get_accDescription(varID, pszDescription);
}
else
{
if (description.empty())
{
* pszDescription = NULL;
return S_FALSE;
}
else
{
wxBasicString basicString(description);
* pszDescription = basicString.Get();
return S_OK;
}
}
return E_NOTIMPL;
}
// Retrieves an object's Help property string.
// Not all objects support this property.
STDMETHODIMP wxIAccessible::get_accHelp ( VARIANT varID, BSTR* pszHelp)
{
wxLogTrace(wxT("access"), wxT("get_accHelp"));
wxASSERT (m_pAccessible != NULL);
if (!m_pAccessible)
return E_FAIL;
if (varID.vt != VT_I4)
{
wxLogTrace(wxT("access"), wxT("Invalid arg for get_accHelp"));
return E_INVALIDARG;
}
wxString helpString;
wxAccStatus status = m_pAccessible->GetHelpText(varID.lVal, & helpString);
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_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)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -