⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 access.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 4 页
字号:
            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 + -