Value Map Annotation Sample

Cut, paste, and modify the following code sample for your own use. Follow instructions in comments marked with /* TODO */.

/*  TODO
 *  Delete / modify these sample mapping strings as
 *  appropriate.
 *  See <oleacc.h> for the possible states and roles, and
 *  their numeric values.
 */

LPCWSTR g_ListOrTreeStateMap = 
    L"A:0"     // 0 -> use regular image, 1 -> use state image, 2-> use overlay image.
    L":0:0x00" // image 0 is normal 
    L":1:0x10" // image 1 is checked - STATE_SYSTEM_CHECKED
    L":";

LPCWSTR g_ListOrTreeRoleMap = 
    L"A:0"     // 0 -> use regular image, 1 -> use state image, 2-> use overlay image.
    L":0:0x2C" // image 0 is checkbox - ROLE_SYSTEM_CHECKBUTTON (ie. checkbox)
    L":1:0x2C" // image 1 is also checkbox
    L":";


// This is an example for a slider that has 5 positions,
// ranging from Cold (0) to Hot (5).
// Note - since this contains textual strings, the entire
// string should be loaded from a localized resource, or
// it should be built at run time from localized strings.
// This non-localization-friendly string is used here for
// illustrative purposes only.
LPCWSTR g_SliderValueMap = 
    L"A:0" // always 0 for slider maps
    L":0:Cold"
    L":1:Cool"
    L":2:Warm"
    L":3:Toasty"
    L":4:Hot"
    L":";


[ ... ]

//
//  Skeleton code to set property map for a control
//
//  Do this after shortly after the corresponding control is
//  created (e.g., when handling WM_INITDIALOG)
//
//  Assumptions:
//  hwndListOrTree is the HWND of a listview or
//  treeview(listview, treeview),
//  hwndSlider is the HWND of a slider.
//

    IAccPropServices * pAccPropSvc = NULL;
    HRESULT hr;
    hr = CoCreateInstance( CLSID_AccPropServices, NULL, CLSCTX_SERVER, IID_IAccPropServices, (void **) & pAccPropSvc ) );
    if( hr == S_OK && pAccPropSvc )
    {
        /*  TODO
         *  For a listview or treeview, both role and state
         *  maps are typically set here.
         *  For sliders, only the value map is set.
         *  Delete / modify as appropriate.
         */
        pAccPropSvc->SetHwndPropStr( hwndListOrTree, OBJID_CLIENT, 0, PROPID_ACC_ROLEMAP, g_ListOrTreeRoleMap ) );
        pAccPropSvc->SetHwndPropStr( hwndListOrTree, OBJID_CLIENT, 0, PROPID_ACC_STATEMAP, g_ListOrTreeStateMap ) );

        pAccPropSvc->SetHwndPropStr( hwndSlider, OBJID_CLIENT, 0, PROPID_ACC_VALUEMAP, g_SliderValueMap );

        pAccPropSvc->Release();
    }