mirror of
https://github.com/reactos/reactos.git
synced 2024-08-16 16:39:08 +00:00
167 lines
3.6 KiB
C
167 lines
3.6 KiB
C
/*
|
|
* PROJECT: ReactOS Character Map
|
|
* LICENSE: GPL - See COPYING in the top level directory
|
|
* FILE: base/applications/charmap/lrgcell.c
|
|
* PURPOSE: large cell window implementation
|
|
* COPYRIGHT: Copyright 2007 Ged Murphy <gedmurphy@reactos.org>
|
|
*
|
|
*/
|
|
|
|
#include "precomp.h"
|
|
|
|
static
|
|
HFONT
|
|
SetLrgFont(PMAP infoPtr)
|
|
{
|
|
LOGFONTW lf;
|
|
HFONT hFont = NULL;
|
|
HDC hdc;
|
|
HWND hCombo;
|
|
LPWSTR lpFontName;
|
|
INT Len;
|
|
|
|
hCombo = GetDlgItem(infoPtr->hParent,
|
|
IDC_FONTCOMBO);
|
|
|
|
Len = GetWindowTextLengthW(hCombo);
|
|
|
|
if (Len != 0)
|
|
{
|
|
lpFontName = HeapAlloc(GetProcessHeap(),
|
|
0,
|
|
(Len + 1) * sizeof(WCHAR));
|
|
|
|
if (lpFontName)
|
|
{
|
|
SendMessageW(hCombo,
|
|
WM_GETTEXT,
|
|
Len + 1,
|
|
(LPARAM)lpFontName);
|
|
|
|
ZeroMemory(&lf,
|
|
sizeof(lf));
|
|
|
|
hdc = GetDC(infoPtr->hLrgWnd);
|
|
lf.lfHeight = GetDeviceCaps(hdc,
|
|
LOGPIXELSY) / 2;
|
|
ReleaseDC(infoPtr->hLrgWnd,
|
|
hdc);
|
|
|
|
lf.lfCharSet = DEFAULT_CHARSET;
|
|
wcsncpy(lf.lfFaceName,
|
|
lpFontName,
|
|
sizeof(lf.lfFaceName) / sizeof(lf.lfFaceName[0]));
|
|
|
|
hFont = CreateFontIndirectW(&lf);
|
|
|
|
HeapFree(GetProcessHeap(),
|
|
0,
|
|
lpFontName);
|
|
}
|
|
}
|
|
|
|
return hFont;
|
|
}
|
|
|
|
|
|
LRESULT CALLBACK
|
|
LrgCellWndProc(HWND hwnd,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
PMAP infoPtr;
|
|
LRESULT Ret = 0;
|
|
static INT cxClient, cyClient;
|
|
static RECT rc;
|
|
static HFONT hFont = NULL;
|
|
|
|
infoPtr = (PMAP)GetWindowLongPtrW(hwnd,
|
|
GWLP_USERDATA);
|
|
|
|
if (infoPtr == NULL && uMsg != WM_CREATE)
|
|
{
|
|
goto HandleDefaultMessage;
|
|
}
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_CREATE:
|
|
{
|
|
infoPtr = (PMAP)(((LPCREATESTRUCTW)lParam)->lpCreateParams);
|
|
|
|
SetWindowLongPtrW(hwnd,
|
|
GWLP_USERDATA,
|
|
(LONG_PTR)infoPtr);
|
|
|
|
hFont = SetLrgFont(infoPtr);
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_SIZE:
|
|
{
|
|
cxClient = LOWORD(lParam);
|
|
cyClient = HIWORD(lParam);
|
|
|
|
rc.left = 0;
|
|
rc.top = 0;
|
|
rc.right = cxClient;
|
|
rc.bottom = cyClient;
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_PAINT:
|
|
{
|
|
PAINTSTRUCT ps;
|
|
HDC hdc;
|
|
HFONT hOldFont;
|
|
|
|
hdc = BeginPaint(hwnd,
|
|
&ps);
|
|
|
|
Rectangle(hdc,
|
|
0,
|
|
0,
|
|
cxClient,
|
|
cyClient);
|
|
|
|
hOldFont = SelectObject(hdc, hFont);
|
|
|
|
DrawTextW(hdc,
|
|
&infoPtr->pActiveCell->ch,
|
|
1,
|
|
&rc,
|
|
DT_CENTER | DT_VCENTER | DT_SINGLELINE);
|
|
|
|
SelectObject(hdc, hOldFont);
|
|
|
|
EndPaint(hwnd,
|
|
&ps);
|
|
|
|
UpdateStatusBar(infoPtr->pActiveCell->ch);
|
|
break;
|
|
}
|
|
|
|
case WM_DESTROY:
|
|
{
|
|
DeleteObject(hFont);
|
|
|
|
break;
|
|
}
|
|
|
|
default:
|
|
{
|
|
HandleDefaultMessage:
|
|
Ret = DefWindowProcW(hwnd,
|
|
uMsg,
|
|
wParam,
|
|
lParam);
|
|
break;
|
|
}
|
|
}
|
|
|
|
return Ret;
|
|
}
|