193 lines
5.9 KiB
C++
193 lines
5.9 KiB
C++
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// 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
|
||
|
|
||
|
|