You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
184 lines
4.2 KiB
184 lines
4.2 KiB
#include "sol.h"
|
|
VSZASSERT
|
|
|
|
#define dyStatMarg 1
|
|
#define dxStatMarg 4
|
|
|
|
static TCHAR szStatClass[] = TEXT("Stat"); // class name
|
|
|
|
HWND hwndStat = NULL; // window to status area
|
|
static INT dyStat; // height of status window
|
|
|
|
|
|
BOOL FRegisterStat(BOOL fFirstInst)
|
|
{
|
|
WNDCLASS cls;
|
|
LRESULT APIENTRY StatWndProc(HWND, UINT, WPARAM, LPARAM );
|
|
|
|
/* ?? can I use static class? */
|
|
if(fFirstInst)
|
|
{
|
|
cls.style = 0,
|
|
cls.lpfnWndProc = StatWndProc;
|
|
cls.cbClsExtra = cls.cbWndExtra = 0;
|
|
cls.hInstance = hinstApp;
|
|
cls.hIcon = NULL;
|
|
cls.hCursor = LoadCursor(NULL, IDC_ARROW);
|
|
cls.hbrBackground = GetStockObject(WHITE_BRUSH);
|
|
cls.lpszMenuName = NULL;
|
|
cls.lpszClassName = (LPTSTR)szStatClass;
|
|
if (!RegisterClass((LPWNDCLASS)&cls))
|
|
return(fFalse);
|
|
}
|
|
return fTrue;
|
|
}
|
|
|
|
|
|
BOOL FCreateStat()
|
|
{
|
|
RC rc;
|
|
|
|
dyStat = dyChar+2*dyStatMarg;
|
|
GetClientRect(hwndApp, (LPRECT) &rc);
|
|
hwndStat = CreateWindow((LPTSTR) szStatClass, TEXT(""),
|
|
WS_BORDER|WS_CHILD|CS_HREDRAW|CS_VREDRAW,
|
|
rc.xLeft-1, rc.yBot-dyStat+1, rc.xRight-rc.xLeft+2, dyStat, hwndApp,
|
|
NULL, hinstApp, NULL);
|
|
|
|
|
|
ShowWindow(hwndStat, SW_SHOWNOACTIVATE);
|
|
UpdateWindow(hwndStat);
|
|
return fTrue;
|
|
}
|
|
|
|
|
|
|
|
BOOL FDestroyStat()
|
|
{
|
|
if(hwndStat)
|
|
{
|
|
DestroyWindow(hwndStat);
|
|
hwndStat = NULL;
|
|
}
|
|
return fTrue;
|
|
}
|
|
|
|
|
|
LRESULT APIENTRY StatWndProc(HWND hwnd, UINT wm, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
PAINTSTRUCT paint;
|
|
HDC hdc;
|
|
VOID StatRender();
|
|
|
|
switch(wm)
|
|
{
|
|
case WM_PAINT:
|
|
BeginPaint(hwnd, (LPPAINTSTRUCT) &paint);
|
|
hdc = HdcSet(paint.hdc, 0, 0);
|
|
StatRender();
|
|
HdcSet(hdc, 0, 0);
|
|
EndPaint(hwnd, (LPPAINTSTRUCT) &paint);
|
|
return(0L);
|
|
}
|
|
|
|
return(DefWindowProc(hwnd, wm, wParam, lParam));
|
|
}
|
|
|
|
|
|
VOID StatRender()
|
|
{
|
|
RC rc;
|
|
|
|
if(pgmCur != NULL && hwndStat != NULL)
|
|
{
|
|
GetClientRect(hwndStat, (LPRECT) &rc);
|
|
rc.xRight -= dxStatMarg;
|
|
SendGmMsg(pgmCur, msggDrawStatus, (INT_PTR) &rc, 0);
|
|
}
|
|
}
|
|
|
|
|
|
VOID StatUpdate()
|
|
{
|
|
HDC hdc;
|
|
HDC hdcSav;
|
|
|
|
if(hwndStat == NULL)
|
|
return;
|
|
if((hdc = GetDC(hwndStat)) != NULL)
|
|
{
|
|
hdcSav = HdcSet(hdc, 0, 0);
|
|
StatRender();
|
|
HdcSet(hdcSav, 0, 0);
|
|
ReleaseDC(hwndStat, hdc);
|
|
}
|
|
}
|
|
|
|
|
|
VOID StatMove()
|
|
{
|
|
RC rc;
|
|
|
|
if(hwndStat != NULL)
|
|
{
|
|
GetClientRect(hwndApp, (LPRECT) &rc);
|
|
MoveWindow(hwndStat, rc.xLeft-1, rc.yBot-dyStat+1, rc.xRight-rc.xLeft+2, dyStat, fTrue);
|
|
InvalidateRect(hwndStat, NULL, fTrue);
|
|
}
|
|
}
|
|
|
|
|
|
VOID StatStringSz(TCHAR *sz)
|
|
{
|
|
HDC hdc, hdcSav;
|
|
RC rc;
|
|
HFONT hFontOld = NULL;
|
|
HFONT hStatusFont = NULL;
|
|
|
|
if(hwndStat == NULL)
|
|
return;
|
|
hdc = GetDC(hwndStat);
|
|
if(hdc == NULL)
|
|
return;
|
|
|
|
// store the old font and replace the status font by MS Shell Dlg
|
|
// as it supports FE characters as well as euro characters.
|
|
|
|
hStatusFont = CreateFont(-MulDiv(9, GetDeviceCaps(hdc, LOGPIXELSY), 72), 0, 0, 0, FW_BOLD, 0, 0, 0,
|
|
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
|
|
DEFAULT_PITCH, TEXT("MS Shell Dlg"));
|
|
|
|
if (hStatusFont)
|
|
hFontOld = SelectObject(hdc, hStatusFont);
|
|
|
|
|
|
hdcSav = HdcSet(hdc, 0, 0);
|
|
GetClientRect(hwndStat, (LPRECT) &rc);
|
|
PatBlt(hdcCur, rc.xLeft, rc.yTop, rc.xRight-rc.xLeft, rc.yBot-rc.yTop, PATCOPY);
|
|
TextOut(hdcCur, dxStatMarg, 0, sz, lstrlen(sz));
|
|
StatRender();
|
|
|
|
// restore the font
|
|
if (hFontOld)
|
|
SelectObject(hdcCur, hFontOld);
|
|
|
|
// close the created font handle
|
|
if (hStatusFont)
|
|
DeleteObject(hStatusFont);
|
|
|
|
HdcSet(hdcSav, 0, 0);
|
|
ReleaseDC(hwndStat, hdc);
|
|
}
|
|
|
|
|
|
VOID StatString(INT ids)
|
|
{
|
|
TCHAR sz[60];
|
|
|
|
if(ids != idsNil)
|
|
CchString(sz, ids, ARRAYSIZE(sz));
|
|
else
|
|
sz[0] = TEXT('\000');
|
|
|
|
StatStringSz(sz);
|
|
}
|