142 lines
3.3 KiB
C++
142 lines
3.3 KiB
C++
// Copyright (c) 1996-1999 Microsoft Corporation
|
|
|
|
// --------------------------------------------------------------------------
|
|
//
|
|
// STATIC.CPP
|
|
//
|
|
// --------------------------------------------------------------------------
|
|
|
|
#include "oleacc_p.h"
|
|
#include "default.h"
|
|
#include "window.h"
|
|
#include "client.h"
|
|
#include "static.h"
|
|
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
//
|
|
// CreateStaticClient()
|
|
//
|
|
// --------------------------------------------------------------------------
|
|
HRESULT CreateStaticClient(HWND hwnd, long idChildCur, REFIID riid, void** ppvStatic)
|
|
{
|
|
CStatic * pstatic;
|
|
HRESULT hr;
|
|
|
|
InitPv(ppvStatic);
|
|
|
|
pstatic = new CStatic(hwnd, idChildCur);
|
|
if (!pstatic)
|
|
return(E_OUTOFMEMORY);
|
|
|
|
hr = pstatic->QueryInterface(riid, ppvStatic);
|
|
if (!SUCCEEDED(hr))
|
|
delete pstatic;
|
|
|
|
return(hr);
|
|
}
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
//
|
|
// CStatic::CStatic()
|
|
//
|
|
// --------------------------------------------------------------------------
|
|
CStatic::CStatic(HWND hwnd, long idChildCur)
|
|
: CClient( CLASS_StaticClient )
|
|
{
|
|
Initialize(hwnd, idChildCur);
|
|
|
|
// Is this a graphic?
|
|
long lStyle = GetWindowLong(m_hwnd, GWL_STYLE);
|
|
long lType = lStyle & SS_TYPEMASK;
|
|
switch ( lType )
|
|
{
|
|
case SS_LEFT:
|
|
case SS_CENTER:
|
|
case SS_RIGHT:
|
|
case SS_SIMPLE:
|
|
case SS_LEFTNOWORDWRAP:
|
|
case SS_EDITCONTROL:
|
|
// For label-like statics, use their own text, and expose a text role.
|
|
m_fUseLabel = FALSE;
|
|
m_fGraphic = FALSE;
|
|
break;
|
|
|
|
case SS_OWNERDRAW:
|
|
// For owner-draw statics, use their own text, and expose a graphic role.
|
|
m_fUseLabel = FALSE;
|
|
m_fGraphic = TRUE;
|
|
break;
|
|
|
|
default:
|
|
// For everything else, ignore the control's own text (probably a meaningless
|
|
// resource ID) and use a label instead; and expose a graphic role.
|
|
m_fUseLabel = TRUE;
|
|
m_fGraphic = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
//
|
|
// CStatic::get_accRole()
|
|
//
|
|
// --------------------------------------------------------------------------
|
|
STDMETHODIMP CStatic::get_accRole(VARIANT varChild, VARIANT *pvarRole)
|
|
{
|
|
InitPvar(pvarRole);
|
|
|
|
//
|
|
// Validate parameters
|
|
//
|
|
if (! ValidateChild(&varChild))
|
|
return(E_INVALIDARG);
|
|
|
|
pvarRole->vt = VT_I4;
|
|
if (m_fGraphic)
|
|
pvarRole->lVal = ROLE_SYSTEM_GRAPHIC;
|
|
else
|
|
pvarRole->lVal = ROLE_SYSTEM_STATICTEXT;
|
|
|
|
return(S_OK);
|
|
}
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
//
|
|
// CStatic::get_accState()
|
|
//
|
|
// --------------------------------------------------------------------------
|
|
STDMETHODIMP CStatic::get_accState(VARIANT varChild, VARIANT *pvarState)
|
|
{
|
|
WINDOWINFO wi;
|
|
|
|
InitPvar(pvarState);
|
|
|
|
if (!ValidateChild(&varChild))
|
|
return(E_INVALIDARG);
|
|
|
|
pvarState->vt = VT_I4;
|
|
pvarState->lVal = 0;
|
|
|
|
pvarState->lVal |= STATE_SYSTEM_READONLY;
|
|
|
|
if (!MyGetWindowInfo(m_hwnd, &wi))
|
|
{
|
|
pvarState->lVal |= STATE_SYSTEM_INVISIBLE;
|
|
return(S_OK);
|
|
}
|
|
|
|
if (!(wi.dwStyle & WS_VISIBLE))
|
|
pvarState->lVal |= STATE_SYSTEM_INVISIBLE;
|
|
|
|
return(S_OK);
|
|
}
|