WindowsXP-SP1/windows/oleacc/oleacc/propmgr_util.cpp
2020-09-30 16:53:49 +02:00

102 lines
2.9 KiB
C++

// Copyright (c) 2000-2000 Microsoft Corporation
// --------------------------------------------------------------------------
//
// PropMgr_Util
//
// Utility and shared code and data used by both the exe-server and the
// shared memory client.
//
// --------------------------------------------------------------------------
#include "oleacc_p.h"
#include "PropMgr_Util.h"
// Note: Keep this array's size in sync with NUMPROPS #defined in the .h file
PropInfo g_PropInfo [ NUMPROPS ] =
{
{ & PROPID_ACC_NAME , VT_BSTR, TRUE },
{ & PROPID_ACC_VALUE , VT_BSTR, TRUE },
{ & PROPID_ACC_DESCRIPTION , VT_BSTR, TRUE },
{ & PROPID_ACC_ROLE , VT_I4, TRUE },
{ & PROPID_ACC_STATE , VT_I4, TRUE },
{ & PROPID_ACC_HELP , VT_BSTR, TRUE },
{ & PROPID_ACC_KEYBOARDSHORTCUT , VT_BSTR, TRUE },
{ & PROPID_ACC_DEFAULTACTION , VT_BSTR, TRUE },
{ & PROPID_ACC_HELPTOPIC , VT_EMPTY, FALSE },
{ & PROPID_ACC_FOCUS , VT_EMPTY, FALSE },
{ & PROPID_ACC_SELECTION , VT_EMPTY, FALSE },
{ & PROPID_ACC_PARENT , VT_EMPTY, FALSE },
{ & PROPID_ACC_NAV_UP , VT_EMPTY, FALSE },
{ & PROPID_ACC_NAV_DOWN , VT_EMPTY, FALSE },
{ & PROPID_ACC_NAV_LEFT , VT_EMPTY, FALSE },
{ & PROPID_ACC_NAV_RIGHT , VT_EMPTY, FALSE },
{ & PROPID_ACC_NAV_PREV , VT_EMPTY, FALSE },
{ & PROPID_ACC_NAV_NEXT , VT_EMPTY, FALSE },
{ & PROPID_ACC_NAV_FIRSTCHILD , VT_EMPTY, FALSE },
{ & PROPID_ACC_NAV_LASTCHILD , VT_EMPTY, FALSE },
{ & PROPID_ACC_VALUEMAP , VT_BSTR, TRUE },
{ & PROPID_ACC_ROLEMAP , VT_BSTR, TRUE },
{ & PROPID_ACC_STATEMAP , VT_BSTR, TRUE },
{ & PROPID_ACC_DESCRIPTIONMAP , VT_BSTR, TRUE },
{ & PROPID_ACC_DODEFAULTACTION , VT_EMPTY, FALSE },
};
int IndexFromProp( const MSAAPROPID & idProp )
{
for( int i = 0 ; i < NUMPROPS ; i++ )
{
if( *g_PropInfo[ i ].m_idProp == idProp )
return i;
}
return -1;
}
LPTSTR MakeKeyString( const BYTE * pKeyData, DWORD dwKeyLen )
{
const LPCTSTR szHexChars = TEXT("0123456789ABCDEF");
LPTSTR pStart = new TCHAR [ ( dwKeyLen * 2 ) + 5 + 1 ]; // +5 for MSAA_, +1 for NUL
if( pStart == NULL )
{
return NULL;
}
memcpy( pStart, TEXT("MSAA_"), sizeof(TCHAR) * 5 );
LPTSTR pScan = pStart + 5;
while( dwKeyLen-- )
{
*pScan++ = szHexChars[ *pKeyData >> 4 ]; // High nybble
*pScan++ = szHexChars[ *pKeyData & 0x0F ]; // Low nybble
pKeyData++;
}
*pScan = '\0';
return pStart;
}