|
|
/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
fdstleg.c
Abstract:
Routines to support the status bar and legend displays.
Author:
Ted Miller (tedm) 7-Jan-1992
--*/
#include "fdisk.h"
HFONT hFontStatus,hFontLegend;
DWORD dyLegend,wLegendItem; DWORD dyStatus,dyBorder;
// text for status area
TCHAR StatusTextStat[STATUS_TEXT_SIZE]; TCHAR StatusTextSize[STATUS_TEXT_SIZE];
WCHAR StatusTextDrlt[3];
WCHAR StatusTextType[STATUS_TEXT_SIZE]; WCHAR StatusTextVoll[STATUS_TEXT_SIZE];
TCHAR *LegendLabels[LEGEND_STRING_COUNT];
// whether status bar and legend are currently shown
BOOL StatusBar = TRUE, Legend = TRUE;
VOID UpdateStatusBarDisplay( VOID ) { RECT rc;
if(StatusBar) { GetClientRect(hwndFrame,&rc); rc.top = rc.bottom - dyStatus; InvalidateRect(hwndFrame,&rc,FALSE); } }
VOID ClearStatusArea( VOID ) { StatusTextStat[0] = StatusTextSize[0] = 0; StatusTextVoll[0] = StatusTextType[0] = 0; StatusTextDrlt[0] = 0; UpdateStatusBarDisplay(); }
VOID DrawLegend( IN HDC hdc, IN PRECT rc )
/*++
Routine Description:
This routine draws the legend onto the given device context. The legend lists the brush styles used to indicate various region types in the disk graphs.
Arguments:
None.
Return Value:
None.
--*/
{ DWORD i, left, delta = GraphWidth / BRUSH_ARRAY_SIZE; HBRUSH hBrush; RECT rc1,rc2; HFONT hfontOld; SIZE size; DWORD dx; COLORREF OldTextColor,OldBkColor;
rc1 = *rc; rc2 = *rc;
// first draw the background.
hBrush = CreateSolidBrush(GetSysColor(COLOR_BTNFACE)); rc1.right = rc1.left + GetSystemMetrics(SM_CXSCREEN); // erase it all
FillRect(hdc,&rc1,hBrush); DeleteObject(hBrush);
// now draw the nice container
rc2.left += 8 * dyBorder; rc2.right -= 8 * dyBorder; DrawStatusAreaItem(&rc2,hdc,NULL,FALSE);
// now draw the legend items
SelectObject(hdc,hPenThinSolid);
left = rc2.left + (wLegendItem / 2); SetBkColor(hdc,GetSysColor(COLOR_BTNFACE)); hfontOld = SelectObject(hdc,hFontLegend);
OldTextColor = SetTextColor(hdc,GetSysColor(COLOR_BTNTEXT)); SetBkMode(hdc,OPAQUE);
for(i=0; i<BRUSH_ARRAY_SIZE; i++) {
hBrush = SelectObject(hdc,Brushes[i]);
OldBkColor = SetBkColor(hdc,RGB(255,255,255));
Rectangle(hdc, left, rc->top + (wLegendItem / 2), left + wLegendItem, rc->top + (3 * wLegendItem / 2) );
SetBkColor(hdc,OldBkColor);
// BUGBUG unicode lstrlen?
GetTextExtentPoint(hdc,LegendLabels[i],lstrlen(LegendLabels[i]),&size); dx = (DWORD)size.cx; TextOut(hdc, left + (3*wLegendItem/2), rc->top + (wLegendItem / 2) + ((wLegendItem-size.cy)/2), LegendLabels[i], lstrlen(LegendLabels[i]) ); #if 0
SelectObject(hdc,Brushes[++i]);
OldBkColor = SetBkColor(hdc,RGB(255,255,255));
Rectangle(hdc, left, rc->top + (2 * wLegendItem), left + wLegendItem, rc->top + (3 * wLegendItem) );
SetBkColor(hdc,OldBkColor);
GetTextExtentPoint(hdc,LegendLabels[i],lstrlen(LegendLabels[i]),&size); TextOut(hdc, left + (3*wLegendItem/2), rc->top + (2 * wLegendItem) + ((wLegendItem-size.cy)/2), LegendLabels[i], lstrlen(LegendLabels[i]) );
if((DWORD)size.cx > dx) { dx = (DWORD)size.cx; } #endif
left += dx + (5*wLegendItem/2);
if(hBrush) { SelectObject(hdc,hBrush); } } if(hfontOld) { SelectObject(hdc,hfontOld); } SetTextColor(hdc,OldTextColor); }
VOID DrawStatusAreaItem( IN PRECT rc, IN HDC hdc, IN LPTSTR Text, IN BOOL Unicode )
/*++
Routine Description:
This routine draws a status area item into a given dc. This includes drawing the nice shaded button-like container, and then drawing text within it.
Arguments:
rc - rectangle describing the status area item
hdc - device context into which to draw
Text - optional parameter that if present represents text to be placed in the item.
Unicode - if TRUE, Text points to a wide character string regardless of the type of LPTSTR
Return Value:
None.
--*/
{ HBRUSH hBrush; RECT rcx;
// the shadow
if(hBrush = CreateSolidBrush(GetSysColor(COLOR_BTNSHADOW))) {
// left edge
rcx.left = rc->left; rcx.right = rc->left + dyBorder; rcx.top = rc->top + (2*dyBorder); rcx.bottom = rc->bottom - (2*dyBorder); FillRect(hdc,&rcx,hBrush);
// top edge
rcx.right = rc->right; rcx.bottom = rcx.top + dyBorder; FillRect(hdc,&rcx,hBrush);
DeleteObject(hBrush); }
// the highlight
if(hBrush = CreateSolidBrush(GetSysColor(COLOR_BTNHIGHLIGHT))) {
// right edge
rcx.left = rc->right - dyBorder; rcx.right = rc->right; rcx.top = rc->top + (2*dyBorder); rcx.bottom = rc->bottom - (2*dyBorder); FillRect(hdc,&rcx,hBrush);
// top edge
rcx.left = rc->left; rcx.right = rc->right; rcx.top = rc->bottom - (3*dyBorder); rcx.bottom = rcx.top + dyBorder; FillRect(hdc,&rcx,hBrush);
DeleteObject(hBrush); }
if(Text) {
// draw the text
SetTextColor(hdc,GetSysColor(COLOR_BTNTEXT)); SetBkColor(hdc,GetSysColor(COLOR_BTNFACE));
rcx.top = rc->top + (3*dyBorder); rcx.bottom = rc->bottom - (3*dyBorder); rcx.left = rc->left + dyBorder; rcx.right = rc->right - dyBorder;
if(Unicode && (sizeof(TCHAR) != sizeof(WCHAR))) {
ExtTextOutW(hdc, rcx.left+(2*dyBorder), rcx.top, ETO_OPAQUE | ETO_CLIPPED, &rcx, (PWSTR)Text, lstrlenW((PWSTR)Text), NULL );
} else { ExtTextOut(hdc, rcx.left+(2*dyBorder), rcx.top, ETO_OPAQUE | ETO_CLIPPED, &rcx, Text, lstrlen(Text), NULL ); } } }
|