TOOLBAR.C
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF 
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A 
// PARTICULAR PURPOSE. 
// 
// Copyright 1995 - 1998 Microsoft Corporation.  All Rights Reserved. 
// 
//  MODULE: toolbar.c 
// 
//  PURPOSE: Handles general routines for the Toolbar control 
// 
//  FUNCTIONS: 
//    CreateTBar    - Creates the Toolbar control for the sample. 
//    MsgNotify     - Handles the WM_NOTIFY message that gets sent to 
//                    the parent window to get ToolTip Text. 
//  COMMENTS: 
// 
 
#include <windows.h>            // required for all Windows applications 
#include <windowsx.h> 
#include <commctrl.h>           // prototypes and defs for common controls 
#include "globals.h"            // prototypes specific to this application 
#include "toolbar.h"            // prototypes and #defines for toolbar.c 
 
// Global Variable for the toolbar control. 
 
HWND    hWndToolbar; 
 
//  **TODO**  Change the following values to match your toolbar bitmap 
// 
// NUMIMAGES    = Number of images in toolbar.bmp.  Note that this is not 
//                the same as the number of elements on the toolbar. 
// IMAGEWIDTH   = Width of a single button image in toolbar.bmp 
// IMAGEHEIGHT  = Height of a single button image in toolbar.bmp 
// BUTTONWIDTH  = Width of a button on the toolbar (zero = default) 
// BUTTONHEIGHT = Height of a button on the toolbar (zero = default) 
 
#define NUMIMAGES       9 
#define IMAGEWIDTH      18 
#define IMAGEHEIGHT     17 
#define BUTTONWIDTH     0 
#define BUTTONHEIGHT    0 
 
//  **TODO**  Add/remove entries in the following array to define the  
//            toolbar buttons (see documentation for TBBUTTON). 
 
TBBUTTON tbButton[] = 
{ 
    {1, IDM_MAKECALL,   TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0}, 
    {2, IDM_HANGUPCALL, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0}, 
    {0, 0,              TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0}, 
    {7, IDM_ABOUT,      TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0}, 
}; 
 
 
// 
//  FUNCTION: CreateTBar(HWND) 
// 
//  PURPOSE:  Calls CreateToolBarEx() 
// 
// 
//  PARAMETERS: 
// 
//  hwnd - Window handle : Used for the hWndParent parameter of the control. 
// 
//  RETURN VALUE: 
// 
//  If toolbar control was created successfully Return TRUE, 
//  else returns FALSE. 
// 
//  COMMENTS: 
// 
// 
 
BOOL CreateTBar(HWND hwnd) 
{ 
    hWndToolbar = CreateToolbarEx(hwnd, 
                                  WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS, 
                                  IDM_TOOLBAR, 
                                  NUMIMAGES, 
                                  hInst, 
                                  IDB_BMP, 
                                  tbButton, 
                                  sizeof(tbButton)/sizeof(TBBUTTON), 
                                  BUTTONWIDTH, 
                                  BUTTONHEIGHT, 
                                  IMAGEWIDTH, 
                                  IMAGEHEIGHT, 
                                  sizeof(TBBUTTON)); 
 
    return (hWndToolbar != NULL); 
} 
 
// 
//  FUNCTION: MsgNotify(HWND, UINT, WPARAM, LPARAM) 
// 
//  PURPOSE:  WM_NOTIFY is sent to the parent window to get the 
//            tooltip text assoc'd with that toolbar button. 
// 
//  PARAMETERS: 
// 
//    hwnd      - Window handle  (Unused) 
//    uMessage  - Message number (Unused) 
//    wparam    - Extra data     (Unused) 
//    lparam    - TOOLTIPTEXT FAR* 
// 
//  RETURN VALUE: 
//    Always returns 0 - Message handled 
// 
// 
//  COMMENTS: 
//    This message fills in the lpszText field of the TOOLTIPTEXT 
//    structure if code == TTN_NEEDTEXT 
// 
 
LRESULT MsgNotify(HWND hwnd, UINT uMessage, WPARAM wparam, LPARAM lparam) 
{ 
    LPTOOLTIPTEXT lpToolTipText; 
    static char   szBuffer[64]; 
 
    lpToolTipText = (LPTOOLTIPTEXT)lparam; 
    if (lpToolTipText->hdr.code == TTN_NEEDTEXT) 
    { 
        LoadString(hInst, 
                   lpToolTipText->hdr.idFrom,   // string ID == command ID 
                   szBuffer, 
                   sizeof(szBuffer)); 
 
        lpToolTipText->lpszText = szBuffer; 
    } 
    return 0; 
} 
 
void EnableMakeCall(HWND hWnd, BOOL bEnable) 
{ 
    EnableMenuItem(GetMenu(hWnd), IDM_MAKECALL, MF_BYCOMMAND |  
        (bEnable ? MF_ENABLED : MF_GRAYED)); 
    SendMessage(hWndToolbar, TB_ENABLEBUTTON, (WPARAM) IDM_MAKECALL, 
        (LPARAM) MAKELONG(bEnable, 0)); 
 
} 
 
void EnableHangupCall(HWND hWnd, BOOL bEnable) 
{ 
    EnableMenuItem(GetMenu(hWnd), IDM_HANGUPCALL, MF_BYCOMMAND |  
        (bEnable ? MF_ENABLED : MF_GRAYED)); 
    SendMessage(hWndToolbar, TB_ENABLEBUTTON, (WPARAM) IDM_HANGUPCALL, 
        (LPARAM) MAKELONG(bEnable, 0)); 
}