Lars Martin Hambro <lars_martin4 AT hotmail DOT com>
[reactos.git] / base / applications / charmap / lrgcell.c
1 /*
2 * PROJECT: ReactOS Character Map
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: base/applications/charmap/lrgcell.c
5 * PURPOSE: large cell window implementation
6 * COPYRIGHT: Copyright 2007 Ged Murphy <gedmurphy@reactos.org>
7 *
8 */
9
10 #include <precomp.h>
11
12
13 static HFONT
14 SetLrgFont(PMAP infoPtr)
15 {
16 LOGFONTW lf;
17 HFONT hFont = NULL;
18 HDC hdc;
19 HWND hCombo;
20 LPWSTR lpFontName;
21 INT Len;
22
23 hCombo = GetDlgItem(infoPtr->hParent,
24 IDC_FONTCOMBO);
25
26 Len = GetWindowTextLengthW(hCombo);
27
28 if (Len != 0)
29 {
30 lpFontName = HeapAlloc(GetProcessHeap(),
31 0,
32 (Len + 1) * sizeof(WCHAR));
33
34 if (lpFontName)
35 {
36 SendMessageW(hCombo,
37 WM_GETTEXT,
38 31,
39 (LPARAM)lpFontName);
40
41 ZeroMemory(&lf,
42 sizeof(lf));
43
44 hdc = GetDC(infoPtr->hLrgWnd);
45 lf.lfHeight = GetDeviceCaps(hdc,
46 LOGPIXELSY) / 2;
47 ReleaseDC(infoPtr->hLrgWnd,
48 hdc);
49
50 lf.lfCharSet = DEFAULT_CHARSET;
51 wcscpy(lf.lfFaceName,
52 lpFontName);
53
54 hFont = CreateFontIndirectW(&lf);
55
56 HeapFree(GetProcessHeap(),
57 0,
58 lpFontName);
59 }
60 }
61
62 return hFont;
63 }
64
65
66 LRESULT CALLBACK
67 LrgCellWndProc(HWND hwnd,
68 UINT uMsg,
69 WPARAM wParam,
70 LPARAM lParam)
71 {
72 PMAP infoPtr;
73 LRESULT Ret = 0;
74 static INT cxClient, cyClient;
75 static RECT rc;
76 static HFONT hFont = NULL;
77
78 infoPtr = (PMAP)GetWindowLongPtrW(hwnd,
79 GWLP_USERDATA);
80
81 if (infoPtr == NULL && uMsg != WM_CREATE)
82 {
83 goto HandleDefaultMessage;
84 }
85
86 switch (uMsg)
87 {
88 case WM_CREATE:
89 {
90 infoPtr = (PMAP)(((LPCREATESTRUCTW)lParam)->lpCreateParams);
91
92 SetWindowLongPtrW(hwnd,
93 GWLP_USERDATA,
94 (LONG_PTR)infoPtr);
95
96 hFont = SetLrgFont(infoPtr);
97
98 break;
99 }
100
101 case WM_SIZE:
102 {
103 cxClient = LOWORD(lParam);
104 cyClient = HIWORD(lParam);
105
106 rc.left = 0;
107 rc.top = 0;
108 rc.right = cxClient;
109 rc.bottom = cyClient;
110
111 break;
112 }
113
114 case WM_PAINT:
115 {
116 PAINTSTRUCT ps;
117 HDC hdc;
118 HFONT hOldFont;
119
120 hdc = BeginPaint(hwnd,
121 &ps);
122
123 Rectangle(hdc,
124 0,
125 0,
126 cxClient,
127 cyClient);
128
129 hOldFont = SelectObject(hdc, hFont);
130
131 DrawTextW(hdc,
132 &infoPtr->pActiveCell->ch,
133 1,
134 &rc,
135 DT_CENTER | DT_VCENTER | DT_SINGLELINE);
136
137 SelectObject(hdc, hOldFont);
138
139 EndPaint(hwnd,
140 &ps);
141
142 break;
143 }
144
145 case WM_DESTROY:
146 {
147 DeleteObject(hFont);
148
149 break;
150 }
151
152 default:
153 {
154 HandleDefaultMessage:
155 Ret = DefWindowProcW(hwnd,
156 uMsg,
157 wParam,
158 lParam);
159 break;
160 }
161 }
162
163 return Ret;
164 }