Using Toolbar Controls

Using Toolbar Controls


This section contains examples that demonstrate how to create a toolbar and process tooltip notification messages.

Creating a Toolbar

The following example shows how to use the CreateWindowEx function to create a toolbar that the user can customize and that has a tooltip control associated with it. The example uses the TB_ADDBITMAP and TB_ADDSTRING messages to add button images and buttons strings to the toolbar. The example also adds three buttons by using the TB_ADDBUTTONS message.

	// CreateAToolBar - creates a toolbar and adds the initial set of 
	//     buttons to it. 
	// Returns the handle to the toolbar if successful, or NULL otherwise. 
	// hwndParent - handle to the parent window. 
	HWND CreateAToolBar(HWND hwndParent) 
	{ 
	    HWND hwndTB; 
	    TBADDBITMAP tbab; 
    TBBUTTON tbb[3]; 
    char szBuf[16]; 
    int iCut, iCopy, iPaste; 
 
    // Ensure that the common control DLL is loaded. 
    InitCommonControls(); 
 
    // Create a toolbar that the user can customize and that has a 
    // tooltip associated with it. 
    hwndTB = CreateWindowEx(0, TOOLBARCLASSNAME, (LPSTR) NULL, 
        WS_CHILD | TBSTYLE_TOOLTIPS | CCS_ADJUSTABLE, 
        0, 0, 0, 0, hwndParent, (HMENU) ID_TOOLBAR, g_hinst, NULL); 
 
    // Send the TB_BUTTONSTRUCTSIZE message, which is required for 
    // backward compatibility. 
    SendMessage(hwndTB, TB_BUTTONSTRUCTSIZE, 
        (WPARAM) sizeof(TBBUTTON), 0); 
 
    // Add the bitmap containing button images to the toolbar. 
    tbab.hInst = g_hinst; 
    tbab.nID   = IDB_BUTTONS; 
    SendMessage(hwndTB, TB_ADDBITMAP, (WPARAM) NUM_BUTTON_BITMAPS, 
        (WPARAM) &tbab); 
 
    // Add the button strings to the toolbar. 
    LoadString(g_hinst, IDS_CUT, (LPSTR) &szBuf, MAX_LEN); 
    iCut = SendMessage(hwndTB, TB_ADDSTRING, 0, (LPARAM) (LPSTR) szBuf); 
 
    LoadString(g_hinst, IDS_COPY, (LPSTR) &szBuf, MAX_LEN); 
    iCopy = SendMessage(hwndTB, TB_ADDSTRING, (WPARAM) 0, 
        (LPARAM) (LPSTR) szBuf); 
 
    LoadString(g_hinst, IDS_PASTE, (LPSTR) &szBuf, MAX_LEN); 
    iPaste = SendMessage(hwndTB, TB_ADDSTRING, (WPARAM) 0, 
        (LPARAM) (LPSTR) szBuf); 
 
    // Fill the TBBUTTON array with button information, and add the 
    // buttons to the toolbar. 
    tbb[0].iBitmap = BMP_CUT; 
    tbb[0].idCommand = IDM_CUT; 
    tbb[0].fsState = TBSTATE_ENABLED; 
    tbb[0].fsStyle = TBSTYLE_BUTTON; 
    tbb[0].dwData = 0; 
    tbb[0].iString = iCut; 
 
    tbb[1].iBitmap = BMP_COPY; 
    tbb[1].idCommand = IDM_COPY; 
    tbb[1].fsState = TBSTATE_ENABLED; 
    tbb[1].fsStyle = TBSTYLE_BUTTON; 
    tbb[1].dwData = 0; 
    tbb[1].iString = iCopy; 
 
    tbb[2].iBitmap = BMP_PASTE; 
    tbb[2].idCommand = IDM_PASTE; 
    tbb[2].fsState = TBSTATE_ENABLED; 
    tbb[2].fsStyle = TBSTYLE_BUTTON; 
    tbb[2].dwData = 0; 
    tbb[2].iString = iPaste; 
 
    SendMessage(hwndTB, TB_ADDBUTTONS, (WPARAM) NUM_BUTTONS, 
        (LPARAM) (LPTBBUTTON) &tbb); 
 
    SendMessage(hwndTB, TB_AUTOSIZE, 0, 0); 

    ShowWindow(hwndTB, SW_SHOW); 
    return hwndTB; 
	} 
 

Processing Tooltip Notification Messages

A toolbar that has the TBSTYLE_TOOLTIPS style creates a tooltip control, which an application can use to display Help text for toolbar buttons. The parent window receives the TTN_NEEDTEXT notification message when the toolbar needs the Help text for a button. The tooltip sends the notification in the form of a WM_NOTIFY message. The lParam parameter includes the address of a TOOLTIPTEXT structure that specifies the command identifier of the button for which Help text is needed. An application can copy the Help text to the structure, specify the address of a string containing the Help text, or specify the instance handle and resource identifier of a string resource.

The following example demonstrates how to process the TTN_NEEDTEXT notification.

	case WM_NOTIFY: 
    switch (((LPNMHDR) lParam)->code) { 
        case TTN_NEEDTEXT: 
            { 
            LPTOOLTIPTEXT lpttt; 
 
            lpttt = (LPTOOLTIPTEXT) lParam; 
            lpttt->hinst = g_hinst; 
 
            // Specify the resource identifier of the descriptive 
            // text for the given button. 
            idButton = lpttt->hdr.idFrom; 
            switch (idButton) { 
                case IDM_CUT: 
                    lpttt->lpszText = MAKEINTRESOURCE(IDS_TIPS_CUT); 
                    break; 
                case IDM_COPY: 
                    lpttt->lpszText = MAKEINTRESOURCE(IDS_TIPS_COPY); 
                    break; 
                case IDM_PASTE: 
                    lpttt->lpszText = MAKEINTRESOURCE(IDS_TIPS_PASTE); 
                    break; 
            } 
            break; 
            } 
        . 
        . // Process other notifications here. 
        . 
        default: 
            break; 
    } 
 

© 1997 Microsoft Corporation. All rights reserved. Terms of Use.