📄 access.cpp
字号:
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 ctors
void 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 role
int wxConvertToWindowsRole(wxAccRole wxrole)
{
switch (wxrole)
{
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 state
long 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 flag
int 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 flag
wxAccSelectionFlags 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 + -