soui 5.0.0.1
Soui5 Doc
 
Loading...
Searching...
No Matches
SAccProxyWindow.cpp
1#include "souistd.h"
2#include "msaa/SAccProxyWindow.h"
3
4SNSBEGIN
5#ifdef SOUI_ENABLE_ACC
6/////////////////////////////////////////////////////////////////////////////////////////
7STDMETHODIMP SAccProxyWindow::get_accName(BSTR *pszName)
8{
9 SStringA strTextA;
10 m_pWnd->GetWindowTextU8(&strTextA, TRUE);
11 if (strTextA.IsEmpty())
12 return E_INVALIDARG;
13 SStringW strText = S_CA2W(strTextA, CP_UTF8);
14 *pszName = ::SysAllocString(strText);
15 return S_OK;
16}
17
18STDMETHODIMP SAccProxyWindow::get_accValue(BSTR *pszValue)
19{
20 SStringA strText;
21 m_pWnd->GetWindowTextU8(&strText, TRUE);
22 *pszValue = ::SysAllocString(S_CA2W(strText, CP_UTF8));
23 return S_OK;
24}
25
26STDMETHODIMP SAccProxyWindow::get_accDescription(BSTR *pszDescription)
27{
28 return E_NOTIMPL;
29}
30
31STDMETHODIMP SAccProxyWindow::get_accRole(VARIANT *pvarRole)
32{
33 pvarRole->vt = VT_I4;
34 pvarRole->lVal = ROLE_SYSTEM_WINDOW;
35 return S_OK;
36}
37
38STDMETHODIMP SAccProxyWindow::get_accState(VARIANT *pvarState)
39{
40 DWORD dwState = m_pWnd->GetState();
41
42 pvarState->vt = VT_I4;
43 pvarState->lVal = 0;
44 if (!m_pWnd->IsVisible(TRUE))
45 pvarState->lVal = STATE_SYSTEM_INVISIBLE;
46 else if (m_pWnd->IsDisabled(TRUE))
47 pvarState->lVal = STATE_SYSTEM_UNAVAILABLE;
48 else
49 {
50 if (dwState & WndState_PushDown)
51 pvarState->lVal = STATE_SYSTEM_PRESSED;
52 if (dwState & WndState_Check)
53 pvarState->lVal |= STATE_SYSTEM_CHECKED;
54
55 if (m_pWnd->GetContainer()->GetFocus() == m_pWnd->GetSwnd())
56 pvarState->lVal |= STATE_SYSTEM_FOCUSED;
57 if (m_pWnd->IsFocusable())
58 pvarState->lVal |= STATE_SYSTEM_FOCUSABLE;
59 }
60
61 return S_OK;
62}
63
64STDMETHODIMP SAccProxyWindow::get_accHelp(BSTR *pszHelp)
65{
66 return E_NOTIMPL;
67}
68STDMETHODIMP SAccProxyWindow::get_accHelpTopic(BSTR *pszHelpFile, long *pidTopic)
69{
70 return E_NOTIMPL;
71}
72STDMETHODIMP SAccProxyWindow::get_accKeyboardShortcut(BSTR *pszKeyboardShortcut)
73{
74 return E_NOTIMPL;
75}
76STDMETHODIMP SAccProxyWindow::get_accDefaultAction(BSTR *pszDefaultAction)
77{
78 *pszDefaultAction = ::SysAllocString(L"cmd");
79 return S_OK;
80}
81
82STDMETHODIMP SAccProxyWindow::accSelect(long flagsSelect)
83{
84 if (((flagsSelect & SELFLAG_TAKEFOCUS) > 0) && (::GetFocus() == m_pWnd->GetContainer()->GetHostHwnd()))
85 {
86 m_pWnd->SetFocus();
87 return S_OK;
88 }
89 else
90 {
91 return S_FALSE;
92 }
93}
94
95STDMETHODIMP SAccProxyWindow::accDoDefaultAction()
96{
97 m_pWnd->FireCommand();
98 return S_OK;
99}
100STDMETHODIMP SAccProxyWindow::put_accName(BSTR szName)
101{
102 m_pWnd->SetWindowText(S_CW2T(szName));
103 return S_OK;
104}
105
106STDMETHODIMP SAccProxyWindow::put_accValue(BSTR szValue)
107{
108 m_pWnd->SetWindowText(S_CW2T(szValue));
109 return S_OK;
110}
111
112#endif
113SNSEND
@ WndState_Check
Definition SWnd.h:78
@ WndState_PushDown
Definition SWnd.h:77
A class representing an ASCII string.
Definition sstringa.h:96
BOOL IsEmpty() SCONST
Checks if the string is empty.
A class representing an ASCII string.
Definition sstringw.h:96