|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996 - 1999.
//
// File: toolbar.cxx
//
// Contents:
//
// History: 15 Aug 1996 DLee Created
//
//--------------------------------------------------------------------------
#include "pch.cxx"
#pragma hdrstop
// cImages = Number of images in toolbar.bmp. Note that this is not
// the same as the number of elements on the toolbar.
// cpImageWidth = Width of a single button image in toolbar.bmp
// cpImageHeight = Height of a single button image in toolbar.bmp
// cpButtonWidth = Width of a button on the toolbar (zero = default)
// cpButtonHeight = Height of a button on the toolbar (zero = default)
const int cImages = 12;
const int cpImageWidth = 19; const int cpImageHeight = 16; const int cpButtonWidth = 19; const int cpButtonHeight = 16;
TBBUTTON aButtons[] = // Array defining the toolbar buttons
{ // {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0},
{7, IDM_SEARCH, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0}, {8, IDM_SEARCHCLASSDEF, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0}, {9, IDM_SEARCHFUNCDEF, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0},
{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0},
{2, IDM_BROWSE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0},
{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0},
{11, IDM_DISPLAY_PROPS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0},
{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0},
{0, IDM_NEWSEARCH, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0},
{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0},
{6, IDM_PREVIOUS_HIT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0}, {5, IDM_NEXT_HIT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0},
{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0},
{4, IDM_FONT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0},
{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, 0},
{1, IDM_OPEN, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0}, {10, IDM_TILE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0}, {3, IDM_CASCADE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0}, };
static WNDPROC _lpOrgTBProc = 0;
LRESULT WINAPI TBSubclassProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) { LRESULT lRet = 0;
// ordinarily, flat toolbars ride on a background window with a cool
// bitmap. this one doesn't -- so draw an appropriate background.
if ( WM_ERASEBKGND == msg ) { RECT rect; GetClientRect( hwnd, &rect ); FillRect( (HDC) wParam, & rect, App.BtnFaceBrush() ); } else { lRet = CallWindowProc( _lpOrgTBProc, hwnd, msg, wParam, lParam ); }
return lRet; } //TBSubclassProc
HWND CreateTBar( HWND hwnd, HINSTANCE hInst) { HWND bar = CreateToolbarEx( hwnd, WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | TBSTYLE_FLAT, IDM_TOOLBAR_WINDOW, cImages, hInst, ToolbarBmpNormal, aButtons, sizeof aButtons / sizeof TBBUTTON, cpButtonWidth, cpButtonHeight, cpImageWidth, cpImageHeight, sizeof TBBUTTON );
if ( 0 == bar ) return 0;
_lpOrgTBProc = (WNDPROC) GetWindowLongPtr( bar, GWLP_WNDPROC ); SetWindowLongPtr( bar, GWLP_WNDPROC, (LONG_PTR) TBSubclassProc );
SendMessage( bar, TB_BUTTONSTRUCTSIZE, sizeof TBBUTTON, 0 );
// pixels with color 192,192,192 are changed to buttonface color
HIMAGELIST h = ImageList_LoadBitmap( hInst, MAKEINTRESOURCE( ToolbarBmpHilite ), cpImageWidth, 6, RGB(192,192,192) ); SendMessage( bar, TB_SETBITMAPSIZE, 0, MAKELONG( cpImageWidth, cpImageHeight ) ); SendMessage( bar, TB_SETHOTIMAGELIST, 0, (LPARAM) h );
return bar; } //CreateTBar
LRESULT ToolBarNotify( HWND hwnd, UINT uMessage, WPARAM wparam, LPARAM lparam, HINSTANCE hInst ) { WCHAR awcBuffer[64];
TOOLTIPTEXT * pToolTipText = (LPTOOLTIPTEXT)lparam;
if ( TTN_NEEDTEXT == pToolTipText->hdr.code ) { int id = (int)pToolTipText->hdr.idFrom;
if ( ( IDM_NEWSEARCH == id ) && ( IsSpecificClass( GetFocus(), BROWSE_CLASS ) ) ) id = IDS_CLOSEBROWSE;
LoadString( hInst, id, awcBuffer, sizeof awcBuffer / sizeof WCHAR );
pToolTipText->lpszText = awcBuffer; }
return 0; } //ToolBarNotify
void UpdateButton(UINT iID, UINT iFlags) { int iCurrentFlags = (int) SendMessage( App.ToolBarWindow(), TB_GETSTATE, iID, 0L );
if (iCurrentFlags & TBSTATE_PRESSED) iFlags |= TBSTATE_PRESSED;
SendMessage( App.ToolBarWindow(), TB_SETSTATE, iID, MAKELPARAM( iFlags, 0 ) ); } //UpdateButton
void UpdateButtons( UINT *aId, UINT cId, BOOL fEnabled ) { for ( UINT i = 0; i < cId; i++ ) UpdateButton( aId[ i ], fEnabled ? TBSTATE_ENABLED : TBSTATE_INDETERMINATE );
} //UpdateButtons
|