windows-nt/Source/XPSP1/NT/inetsrv/query/apps/srch/toolbar.cxx
2020-09-26 16:20:57 +08:00

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