|
|
1.1 root 1: #include "FirstAid.H" // Just a temporary include while things are in motion
2:
3: #define NOMINMAX
4: #include <windows.h>
5: #include "FontView.H"
6: #include <stdlib.h>
7: #include <math.h>
8: #include <string.h>
9: #include <time.h>
10:
11: // So that we can use WNDPROC from Win16:
12: #if defined (WIN16)
13: typedef LONG (APIENTRY *WNDPROC)(HWND, UINT, DWORD, LONG);
14: #endif
15:
16:
17: char szAppName[] = "FontView";
18: char szAppTitle[] = "FontView - A Font Examination Utility";
19:
20: HWND hwndMain, hwndClient;
21: HWND hwndMenuField, hwndTimeField, hwndOvrField, hwndBogusField, hwndCapsField, hwndNumField;
22: HWND hwndLabel1, hwndCreateParam, hwndCreateValue;
23:
24: LOGFONT lf = {0,0,0,0,0,0,0,0,0,0,0,0,0,""};
25:
26: HMENU hSysMenuMain = (HMENU)NULL;
27: HMENU hFileMenu = (HMENU)NULL;
28: HMENU hEditMenu = (HMENU)NULL;
29: HMENU hItemMenu = (HMENU)NULL;
30: HMENU hHelpMenu = (HMENU)NULL;
31: HMENU hSysMenuAdv = (HMENU)NULL;
32: HMENU hMenu = (HMENU)NULL;
33:
34:
35: LONG APIENTRY WndProc (HWND, UINT, UINT, LONG);
36: LONG APIENTRY ClientProc (HWND, UINT, UINT, LONG);
37: BOOL FillInParam (HWND, int);
38: BOOL FillInValue (HWND, int);
39: int FAR PASCAL EnumFontNames (LPLOGFONT, LPTEXTMETRIC, short, LPINT);
40:
41:
42: /* Dialogs.C Prototypes */
43: BOOL APIENTRY SimpleDlgProc (HWND, UINT, UINT, LONG);
44: BOOL APIENTRY CreateDlgProc (HWND, UINT, UINT, LONG);
45: BOOL APIENTRY MetricsDlgProc (HWND, UINT, UINT, LONG);
46: BOOL APIENTRY EnumDlgProc (HWND, UINT, UINT, LONG);
47:
48: /* Display.C Prototypes */
49: void DrawAscii (HDC hdc, RECT *pRect, WORD direction);
50:
51: /* ToolBar.C Prototypes */
52: BOOL InitToolBar (HANDLE);
53: BOOL CreateToolBar (HWND, HANDLE, INT);
54: BOOL AdjustToolBar (HWND);
55: HWND AddToolLabel (HANDLE , INT, LPSTR, INT, DWORD);
56: HWND AddToolCombo (HANDLE, INT, INT, DWORD);
57: HWND AddToolButton (HANDLE, INT, LPSTR, INT, INT, DWORD);
58: BOOL AddToolSpace (INT, INT);
59: int ToolBarHeight (HWND);
60:
61: /* StatusBar.C Prototypes */
62: BOOL InitStatusBar (HANDLE);
63: BOOL CreateStatusBar (HWND, HANDLE, INT);
64: BOOL AdjustStatusBar (HWND);
65: HWND AddStatusField (HANDLE, INT, INT, INT, BOOL);
66: int StatusBarHeight (HWND);
67:
68:
69: int APIENTRY WinMain(HANDLE hInst, HANDLE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
70: {
71:
72: MSG msg;
73: WNDCLASS wndclass;
74: HANDLE hAccelTable;
75:
76: #if defined(NT)
77: // Temporary work-around due to WinMain bugs
78: nCmdShow = SW_SHOWNORMAL;
79: hInst = GetModuleHandle( NULL );
80: #endif
81:
82: if (!hPrevInst) {
83: wndclass.style = CS_HREDRAW | CS_VREDRAW;
84: wndclass.lpfnWndProc = (WNDPROC) WndProc;
85: wndclass.cbClsExtra = 0;
86: wndclass.cbWndExtra = 0;
87: wndclass.hInstance = hInst;
88: wndclass.hIcon = LoadIcon (hInst, szAppName);
89: wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
90: wndclass.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE+1);
91: wndclass.lpszMenuName = szAppName;
92: wndclass.lpszClassName = szAppName;
93:
94: if (!RegisterClass (&wndclass)) {
95: OutputDebugString (__FILE__": RegisterClass(szAppName) Failed\n");
96: return FALSE;
97: }
98:
99: wndclass.style = CS_HREDRAW | CS_VREDRAW;
100: wndclass.lpfnWndProc = (WNDPROC) ClientProc;
101: wndclass.cbClsExtra = 0;
102: wndclass.cbWndExtra = 0;
103: wndclass.hInstance = hInst;
104: wndclass.hIcon = LoadIcon (hInst, szAppName);
105: wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
106: wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
107: wndclass.lpszMenuName = NULL;
108: wndclass.lpszClassName = "FontClient";
109:
110: if (!RegisterClass (&wndclass)) {
111: OutputDebugString (__FILE__": RegisterClass(FontClient) Failed\n");
112: return FALSE;
113: }
114:
115:
116: if (!InitToolBar (hInst)) {
117: OutputDebugString (__FILE__": InitToolBar Failed\n");
118: return FALSE;
119: }
120:
121: if (!InitStatusBar (hInst)) {
122: OutputDebugString (__FILE__": InitStatusBar Failed\n");
123: return FALSE;
124: }
125: }
126:
127:
128: hwndMain = CreateWindow (szAppName, szAppName,
129: WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
130: CW_USEDEFAULT, 0,
131: CW_USEDEFAULT, 0,
132: NULL, NULL, hInst, NULL);
133:
134: if (!hwndMain) {
135: OutputDebugString (__FILE__": CreateWindow(hwndMain) Failed\n");
136: return FALSE;
137: }
138: /* Get handles to the various menus. Some of these we will use later */
139: /* to display menu descriptions in the status bar */
140: hSysMenuMain = GetSystemMenu(hwndMain,FALSE);
141: if (!hSysMenuMain) OutputDebugString ("No System Menu\n");
142: hMenu = GetMenu(hwndMain);
143: if (hMenu) {
144: hFileMenu = GetSubMenu(hMenu,0);
145: hEditMenu = GetSubMenu(hMenu,1);
146: hItemMenu = GetSubMenu(hMenu,2);
147: hHelpMenu = GetSubMenu(hMenu,3);
148: } else {
149: OutputDebugString ("No Menu Bar!\n");
150: }
151:
152: //OutputDebugString (__FILE__": Call CreateToolBar\n");
153: if (CreateToolBar (hwndMain, hInst, ID_TOOLBAR)) {
154: //OutputDebugString (__FILE__": CreateToolBar Succeeded\n");
155: hwndLabel1 = AddToolLabel (hInst, 0, "CreateFont:", 0, SS_RIGHT);
156: AddToolSpace (6, 0);
157: hwndCreateParam = AddToolCombo (hInst, ID_CREATEPARAM, -25, CBS_DROPDOWN | WS_VSCROLL);
158: FillInParam (hwndCreateParam, 0);
159:
160: AddToolSpace (10, 0);
161: hwndCreateValue = AddToolCombo (hInst, ID_CREATEVALUE, -30, CBS_DROPDOWN | WS_VSCROLL);
162: FillInValue (hwndCreateValue, CFP_BASE+0);
163:
164: } else {
165: OutputDebugString (__FILE__": CreateToolBar Failed\n");
166: return FALSE;
167: }
168:
169: //OutputDebugString (__FILE__": Call CreateStatusBar\n");
170:
171: if (CreateStatusBar (hwndMain, hInst, ID_STATUSBAR)) {
172: //OutputDebugString (__FILE__": CreateStatusBar Succeeded\n");
173: hwndMenuField = AddStatusField (hInst, ID_MENUFIELD, 100, 0, FALSE);
174: hwndTimeField = AddStatusField (hInst, ID_TIMEFIELD, -12, -12, TRUE);
175: if (hwndTimeField) {
176: SetTimer (hwndMain, 1, 1000, NULL);
177: }
178: hwndOvrField = AddStatusField (hInst, ID_OVRFIELD, -6, -6, TRUE);
179: hwndBogusField = AddStatusField (hInst, ID_SCROLLFIELD, -6, -6, FALSE);
180: hwndCapsField = AddStatusField (hInst, ID_CAPSFIELD, -6, -6, FALSE);
181: hwndNumField = AddStatusField (hInst, ID_NUMFIELD, -6, -6, FALSE);
182: } else {
183: OutputDebugString (__FILE__": CreateStatusBar Failed\n");
184: return FALSE;
185: }
186:
187: hwndClient = CreateWindow ("FontClient", "FontClient",
188: WS_CHILD | WS_CLIPSIBLINGS | WS_BORDER | WS_VISIBLE,
189: 0, 0, 0, 0,
190: hwndMain,(HMENU)666, hInst, NULL);
191:
192: if (!hwndMain) {
193: OutputDebugString (__FILE__": CreateWindow(hwndMain) Failed\n");
194: return FALSE;
195: }
196:
197: ShowWindow (hwndMain, nCmdShow);
198: UpdateWindow (hwndMain);
199:
200: hAccelTable = LoadAccelerators (hInst, szAppName);
201:
202:
203: while (GetMessage (&msg, NULL, 0, 0)) {
204: if (!TranslateAccelerator (hwndMain, hAccelTable, &msg)) {
205: TranslateMessage (&msg);
206: DispatchMessage (&msg);
207: }
208: }
209:
210:
211: return msg.wParam;
212:
213: lpCmdLine; // Just to resolve reference
214: }
215:
216: BOOL FillInParam (HWND hwnd, int focus)
217: {
218: int index;
219:
220: index = 0;
221: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"nHeight");
222: SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_HEIGHT);
223: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"nWidth");
224: SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_WIDTH);
225: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"nEscapement");
226: SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_ESCAPEMENT);
227: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"nOrientation");
228: SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_ORIENTATION);
229: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"nWeight");
230: SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_WEIGHT);
231: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"cItalic");
232: SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_ITALIC);
233: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"cUnderline");
234: SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_UNDERLINE);
235: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"cStrikeOut");
236: SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_STRIKEOUT);
237: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"cCharSet");
238: SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_CHARSET);
239: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"cOutputPrecision");
240: SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_OUTPUTPRECISION);
241: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"cClipPrecision");
242: SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_CLIPPRECISION);
243: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"cQuality");
244: SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_QUALITY);
245: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"cPitch...");
246: SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_PITCH);
247: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"c...Family");
248: SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_FAMILY);
249: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"lpFacename");
250: SendMessage (hwnd, CB_SETITEMDATA, index++, CFP_FACENAME);
251: SendMessage (hwnd, CB_SETCURSEL, focus, 0);
252: return TRUE;
253: }
254:
255: BOOL FillInValue (HWND hwnd, int param)
256: {
257: int i, j, index, focus;
258: long data;
259: char szTmp[80];
260: ATOM atom;
261: HDC hdc;
262: FARPROC lpEnumFonts;
263: HANDLE hInst;
264:
265: SendMessage (hwnd, CB_RESETCONTENT, 0, 0);
266: focus = -1;
267: index = 0;
268: switch (param) {
269: case CFP_HEIGHT:
270: for (i=-72; i<72; i+=2) {
271: if (i < 0) {
272: wsprintf (szTmp, "%d = cell height = %u", i, abs(i));
273: } else if (i == 0) {
274: wsprintf (szTmp, "%u = default", i);
275: } else {
276: wsprintf (szTmp, "%u = character height", i);
277: }
278: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)szTmp);
279: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)i);
280: }
281:
282: for (i=0; i<index; i++) {
283: data = (long)SendMessage (hwnd, CB_GETITEMDATA, i, 0);
284: if (data == lf.lfHeight) {
285: focus = i;
286: break;
287: } else if (data > lf.lfHeight) {
288: wsprintf (szTmp, "%u", lf.lfHeight);
289: SendMessage (hwnd, CB_INSERTSTRING, i, (DWORD)(LPSTR)szTmp);
290: SendMessage (hwnd, CB_SETITEMDATA, i, (DWORD)lf.lfHeight);
291: focus = i;
292: break;
293: }
294: }
295: if (focus == -1) {
296: wsprintf (szTmp, "%u", lf.lfHeight);
297: focus = (int)SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)szTmp);
298: SendMessage (hwnd, CB_SETITEMDATA, focus, (DWORD)lf.lfHeight);
299: }
300:
301: break;
302:
303: case CFP_WIDTH:
304: for (i=0; i<72; i+=2) {
305: if (i==0) {
306: wsprintf (szTmp, "%u = default aspect", i);
307: } else {
308: wsprintf (szTmp, "%u", i);
309: }
310: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)szTmp);
311: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)i);
312: }
313: for (i=0; i<index; i++) {
314: data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
315: if (data == lf.lfWidth) {
316: focus = i;
317: break;
318: } else if (data > lf.lfWidth) {
319: wsprintf (szTmp, "%u", lf.lfWidth);
320: SendMessage (hwnd, CB_INSERTSTRING, i, (DWORD)(LPSTR)szTmp);
321: SendMessage (hwnd, CB_SETITEMDATA, i, (DWORD)lf.lfWidth);
322: focus = i;
323: break;
324: }
325: }
326: break;
327:
328: case CFP_ESCAPEMENT:
329: for (i=0; i<4500; i+=10) {
330: wsprintf (szTmp, "%u = (%u * .10 degrees)", i, i);
331: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)szTmp);
332: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)i);
333: }
334: for (i=0; i<index; i++) {
335: data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
336: if (data == lf.lfEscapement) {
337: focus = i;
338: break;
339: } else if (data > lf.lfEscapement) {
340: wsprintf (szTmp, "%u = (%u * .01 degrees)", lf.lfWidth);
341: SendMessage (hwnd, CB_INSERTSTRING, i, (DWORD)(LPSTR)szTmp);
342: SendMessage (hwnd, CB_SETITEMDATA, i, (DWORD)lf.lfEscapement);
343: focus = i;
344: break;
345: }
346: }
347: break;
348:
349: case CFP_ORIENTATION:
350: for (i=0; i<4500; i+=10) {
351: wsprintf (szTmp, "%u = (%u * .01 degrees)", i, i);
352: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)szTmp);
353: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)i);
354: }
355: for (i=0; i<index; i++) {
356: data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
357: if (data == lf.lfOrientation) {
358: focus = i;
359: break;
360: } else if (data > lf.lfOrientation) {
361: wsprintf (szTmp, "%u = (%u * .01 degrees)", lf.lfWidth);
362: SendMessage (hwnd, CB_INSERTSTRING, i, (DWORD)(LPSTR)szTmp);
363: SendMessage (hwnd, CB_SETITEMDATA, i, (DWORD)lf.lfOrientation);
364: focus = i;
365: break;
366: }
367: }
368: break;
369:
370: case CFP_WEIGHT:
371: index = 0;
372: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"0 = FW_DONTCARE");
373: SendMessage (hwnd, CB_SETITEMDATA, index++, 0);
374: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"100 = FW_THIN");
375: SendMessage (hwnd, CB_SETITEMDATA, index++, 100);
376: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"200 = FW_EXTRALIGHT");
377: SendMessage (hwnd, CB_SETITEMDATA, index++, 200);
378: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"300 = FW_LIGHT");
379: SendMessage (hwnd, CB_SETITEMDATA, index++, 300);
380: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"400 = FW_NORMAL");
381: SendMessage (hwnd, CB_SETITEMDATA, index++, 400);
382: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"500 = FW_MEDIUM");
383: SendMessage (hwnd, CB_SETITEMDATA, index++, 500);
384: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"600 = FW_SEMIBOLD");
385: SendMessage (hwnd, CB_SETITEMDATA, index++, 600);
386: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"700 = FW_BOLD");
387: SendMessage (hwnd, CB_SETITEMDATA, index++, 700);
388: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"800 = FW_EXTRABOLD");
389: SendMessage (hwnd, CB_SETITEMDATA, index++, 800);
390: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"900 = FW_HEAVY");
391: SendMessage (hwnd, CB_SETITEMDATA, index++, 900);
392:
393: for (i=0; i<index; i++) {
394: data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
395: if (data == lf.lfWeight) {
396: focus = i;
397: break;
398: } else if (data > lf.lfWeight) {
399: wsprintf (szTmp, "%u", lf.lfWeight);
400: SendMessage (hwnd, CB_INSERTSTRING, i, (DWORD)(LPSTR)szTmp);
401: focus = i;
402: break;
403: }
404: }
405: break;
406:
407: case CFP_ITALIC:
408: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"FALSE");
409: SendMessage (hwnd, CB_SETITEMDATA, 0, (DWORD)FALSE);
410: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"TRUE");
411: SendMessage (hwnd, CB_SETITEMDATA, 1, (DWORD)TRUE);
412: focus = (lf.lfItalic?1:0);
413: break;
414:
415: case CFP_UNDERLINE:
416: index=0;
417: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"FALSE");
418: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)FALSE);
419: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"TRUE");
420: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)TRUE);
421: focus = (lf.lfUnderline?1:0);
422: break;
423:
424: case CFP_STRIKEOUT:
425: index=0;
426: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"FALSE");
427: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)FALSE);
428: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"TRUE");
429: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)TRUE);
430: focus = (lf.lfStrikeOut?1:0);
431: break;
432:
433: case CFP_CHARSET:
434: index = 0;
435: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"0 = ANSI_CHARSET");
436: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)ANSI_CHARSET);
437: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"SYMBOL_CHARSET");
438: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)SYMBOL_CHARSET);
439: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"SHIFTJIS_CHARSET");
440: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)SHIFTJIS_CHARSET);
441: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"OEM_CHARSET");
442: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)OEM_CHARSET);
443: for (i=0; i<index; i++) {
444: data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
445: if (data == (long)lf.lfCharSet) {
446: focus = i;
447: break;
448: }
449: }
450: break;
451:
452: break;
453:
454: case CFP_OUTPUTPRECISION:
455: index=0;
456: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"0 = OUT_DEFAULT_PRECIS");
457: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)OUT_DEFAULT_PRECIS);
458: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"OUT_STRING_PRECIS");
459: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)OUT_STRING_PRECIS);
460: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"OUT_CHARACTER_PRECIS");
461: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)OUT_CHARACTER_PRECIS);
462: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"OUT_STROKE_PRECIS");
463: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)OUT_STROKE_PRECIS);
464: for (i=0; i<index; i++) {
465: data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
466: if (data == (long)lf.lfOutPrecision) {
467: focus = i;
468: break;
469: }
470: }
471: break;
472:
473: case CFP_CLIPPRECISION:
474: index=0;
475: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"0 = CLIP_DEFAULT_PRECIS");
476: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)CLIP_DEFAULT_PRECIS);
477: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"CLIP_CHARACTER_PRECIS");
478: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)CLIP_CHARACTER_PRECIS);
479: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"CLIP_STROKE_PRECIS");
480: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)CLIP_STROKE_PRECIS);
481: for (i=0; i<index; i++) {
482: data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
483: if (data == (long)lf.lfClipPrecision) {
484: focus = i;
485: break;
486: }
487: }
488: break;
489:
490: case CFP_QUALITY:
491: index=0;
492: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"0 = DEFAULT_QUALITY");
493: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)DEFAULT_QUALITY);
494: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"DRAFT_QUALITY");
495: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)DRAFT_QUALITY);
496: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"PROOF_QUALITY");
497: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)PROOF_QUALITY);
498: for (i=0; i<index; i++) {
499: data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
500: if (data == (long)lf.lfQuality) {
501: focus = i;
502: break;
503: }
504: }
505: break;
506:
507: case CFP_PITCH:
508: index=0;
509: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"0 = DEFAULT_PITCH");
510: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)DEFAULT_PITCH);
511: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"FIXED_PITCH");
512: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)FIXED_PITCH);
513: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"VARIABLE_PITCH");
514: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)VARIABLE_PITCH);
515: for (i=0; i<index; i++) {
516: data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
517: if (data == (long)(0x03&lf.lfPitchAndFamily)) {
518: focus = i;
519: break;
520: }
521: }
522: break;
523:
524: case CFP_FAMILY:
525: index=0;
526: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"0 = FF_DONTCARE");
527: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)FF_DONTCARE);
528: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"FF_ROMAN");
529: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)FF_ROMAN);
530: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"FF_SWISS");
531: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)FF_SWISS);
532: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"FF_MODERN");
533: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)FF_MODERN);
534: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"FF_SCRIPT");
535: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)FF_SCRIPT);
536: SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"FF_DECORATIVE");
537: SendMessage (hwnd, CB_SETITEMDATA, index++, (DWORD)FF_DECORATIVE);
538: for (i=0; i<index; i++) {
539: data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
540: if (data == (long)(0xFC&lf.lfPitchAndFamily)) {
541: focus = i;
542: break;
543: }
544: }
545: break;
546:
547: case CFP_FACENAME:
548: // Need to add ability to notice "(none)" for a null string
549: index = (int)SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)"(none)");
550: SendMessage (hwnd, CB_SETITEMDATA, index, 0);
551: if (lstrcmp(lf.lfFaceName, "(none)") == 0) {
552: lf.lfFaceName[0] = 0;
553: }
554: hdc = GetDC (hwnd);
555: #if defined (NT)
556: hInst = (HANDLE)GetWindowLong (hwnd, GWL_HINSTANCE);
557: #elif
558: hInst = GetWindowWord (hwnd, GWW_HINSTANCE);
559: #endif
560: lpEnumFonts = MakeProcInstance ((FARPROC)EnumFontNames, hInst);
561: EnumFonts (hdc, NULL, lpEnumFonts, (LPSTR)&hwnd);
562: FreeProcInstance (lpEnumFonts);
563: ReleaseDC (hwnd, hdc);
564: atom = GlobalFindAtom ((LPSTR)lf.lfFaceName);
565: if (atom == NULL && (lstrlen (lf.lfFaceName)>0)) {
566: index = (int)SendMessage (hwnd, CB_ADDSTRING, 0, (DWORD)(LPSTR)lf.lfFaceName);
567: focus = index;
568: } else if (lstrlen(lf.lfFaceName)==0) {
569: index = (int)SendMessage (hwnd, CB_FINDSTRING, -1, (DWORD)(LPSTR)"(none)");
570: focus = index;
571: } else {
572: index = (int)SendMessage (hwnd, CB_GETCOUNT, 0, 0);
573: for (i=0; i<index; i++) {
574: data = SendMessage (hwnd, CB_GETITEMDATA, i, 0);
575: if ((DWORD)data == (DWORD)atom) {
576: focus = i;
577: break;
578: }
579: }
580: }
581: break;
582: }
583: if (focus >= 0) {
584: SendMessage (hwnd, CB_SETCURSEL, focus, 0);
585: } else {
586: SendMessage (hwnd, CB_SETCURSEL, 0, 0);
587: }
588: j; // unreferenced
589: return TRUE;
590: }
591:
592: int FAR PASCAL EnumFontNames (
593: LPLOGFONT lpLogFont,
594: LPTEXTMETRIC lpTextMetric,
595: short nFontType,
596: LPINT lpData)
597: {
598: HWND hwnd;
599: FARPROC lpFontEnumProc;
600: HDC hdc;
601: ATOM atom;
602: HWND hwndCombo;
603: int index;
604: extern HANDLE hwndMain;
605:
606: // hwnd = GetFocus();
607: hdc = GetDC(hwndMain);
608: hwndCombo = (HWND)*lpData;
609:
610: atom = GlobalFindAtom ((LPSTR)lpLogFont->lfFaceName);
611: if (atom == NULL) {
612: atom = GlobalAddAtom (lpLogFont->lfFaceName);
613: }
614: if (index = SendMessage(hwndCombo, CB_FINDSTRING, -1, (DWORD)(LPSTR)lpLogFont->lfFaceName) == CB_ERR) {
615: index = (int)SendMessage (hwndCombo, CB_ADDSTRING, 0, (DWORD)(LPSTR)lpLogFont->lfFaceName);
616: SendMessage (hwndCombo, CB_SETITEMDATA, index, atom);
617: }
618:
619: ReleaseDC(hwndMain, hdc);
620:
621: lpTextMetric; // unreferenced
622: nFontType; // unreferenced
623: lpFontEnumProc; // unreferenced
624:
625: return TRUE;
626: }
627:
628:
629: BOOL CenterWindow (HWND hwndChild, HWND hwndParent)
630: {
631: RECT rChild, rParent;
632: int wChild, hChild, wParent, hParent;
633: int wScreen, hScreen, xNew, yNew;
634: HDC hdc;
635:
636: GetWindowRect (hwndChild, &rChild);
637: wChild = rChild.right - rChild.left;
638: hChild = rChild.bottom - rChild.top;
639:
640: GetWindowRect (hwndParent, &rParent);
641: wParent = rParent.right - rParent.left;
642: hParent = rParent.bottom - rParent.top;
643:
644: hdc = GetDC (hwndChild);
645: wScreen = GetDeviceCaps (hdc, HORZRES);
646: hScreen = GetDeviceCaps (hdc, VERTRES);
647: ReleaseDC (hwndChild, hdc);
648:
649: xNew = rParent.left + ((wParent - wChild) /2);
650: if (xNew < 0) {
651: xNew = 0;
652: } else if ((xNew+wChild) > wScreen) {
653: xNew = wScreen - wChild;
654: }
655:
656: yNew = rParent.top + ((hParent - hChild) /2);
657: if (yNew < 0) {
658: yNew = 0;
659: } else if ((yNew+hChild) > hScreen) {
660: yNew = hScreen - hChild;
661: }
662:
663: return SetWindowPos (hwndChild, NULL, xNew, yNew, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
664: }
665:
666:
667: #define VK_OEM_SCROLL 0x91 // This isn't in WINDOWS.H, will it always work?
668:
669: LONG APIENTRY WndProc (HWND hwnd, UINT msg, UINT wParam, LONG lParam)
670: {
671: HANDLE hInst;
672: HDC hdc;
673: PAINTSTRUCT ps;
674: FARPROC lpDlgFunc;
675: char szMsg [80];
676: time_t lTime;
677: struct tm *datetime;
678: #define HOUR (datetime->tm_hour)
679: #define MIN (datetime->tm_min)
680: #define SEC (datetime->tm_sec)
681: char szTime [20];
682: INT index;
683: RECT rect;
684:
685: static INT idMenuSelect;
686: INT tmp, wmEvent, wmId;
687: HWND wmhWnd;
688: POINT point;
689: BOOL bRedraw;
690: ATOM atom;
691: INT wmMenuCmd, wmFlags;
692: HMENU wmhMenu;
693:
694: atom; // unreferenced
695:
696: #if defined (NT)
697: hInst = (HANDLE)GetWindowLong (hwnd, GWL_HINSTANCE);
698: #elif defined (WIN16)
699: hInst = (HANDLE)GetWindowWord (hwnd, GWW_HINSTANCE);
700: #endif
701:
702: switch (msg) {
703: case WM_CREATE:
704: return DefWindowProc (hwnd, msg, wParam, lParam);
705: break;
706:
707: case WM_TIMER:
708: #ifndef NT
709: SetWindowText (hwndTimeField, "No Time");
710: #else
711: time (&lTime);
712: datetime = localtime (&lTime);
713: wsprintf (szTime, "%02d:%02d:%02d %s",
714: (HOUR%12?HOUR%12:12), MIN, SEC, (LPSTR)(HOUR/12?"PM":"AM"));
715: SetWindowText (hwndTimeField, szTime);
716: #endif
717: if (GetKeyState (VK_NUMLOCK)&1) {
718: SetWindowText (hwndNumField, "NUM");
719: } else {
720: SetWindowText (hwndNumField, "");
721: }
722: if (GetKeyState (VK_CAPITAL)&1) {
723: SetWindowText (hwndCapsField, "CAPS");
724: } else {
725: SetWindowText (hwndCapsField, "");
726: }
727: if (GetKeyState (VK_INSERT)&1) {
728: SetWindowText (hwndOvrField, "OVR");
729: } else {
730: SetWindowText (hwndOvrField, "");
731: }
732:
733: break;
734:
735: case WM_SIZE:
736: AdjustToolBar (hwnd);
737: AdjustStatusBar (hwnd);
738: GetClientRect (hwnd, &rect);
739: rect.top += ToolBarHeight (hwnd);
740: rect.bottom -= StatusBarHeight (hwnd);
741: SetWindowPos (hwndClient, NULL, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, SWP_NOZORDER);
742: break;
743:
744: case WM_KEYUP:
745: case WM_KEYDOWN:
746: if (GetKeyState (VK_NUMLOCK)&1) {
747: SetWindowText (hwndNumField, "NUM");
748: } else {
749: SetWindowText (hwndNumField, "");
750: }
751: if (GetKeyState (VK_CAPITAL)&1) {
752: SetWindowText (hwndCapsField, "CAPS");
753: } else {
754: SetWindowText (hwndCapsField, "");
755: }
756: if (GetKeyState (VK_INSERT)&1) {
757: SetWindowText (hwndOvrField, "OVR");
758: } else {
759: SetWindowText (hwndOvrField, "");
760: }
761: if (GetKeyState (VK_OEM_SCROLL)&1) {
762: SetWindowText (hwndBogusField, "SCROLL");
763: } else {
764: SetWindowText (hwndBogusField, "");
765: }
766: return DefWindowProc (hwnd, msg, wParam, lParam);
767: break;
768:
769: case WM_CHAR:
770: switch (wParam) {
771: case VK_F10:
772: wParam = VK_MENU;
773: return DefWindowProc (hwnd, msg, wParam, lParam);
774: break;
775: }
776: break;
777:
778: case WM_PARENTNOTIFY:
779: #if defined (NT)
780: wmEvent = wParam; // Same as Win16, but only on (x,y) msgs
781: #elif defined (WIN16)
782: wmEvent = wParam;
783: #endif
784: point.x = (INT)LOWORD(lParam);
785: point.y = (INT)HIWORD(lParam);
786:
787: ClientToScreen (hwnd, &point);
788: wmhWnd = WindowFromPoint(point);
789: if(wmhWnd != NULL){ /* JAP MOD*/
790: #if defined (NT)
791: wmId = GetWindowLong (wmhWnd, GWL_ID);
792: #elif defined (WIN16)
793: wmId = GetWindowWord (wmhWnd, GWW_ID);
794: #endif
795: }
796: switch (wmEvent) {
797: case WM_LBUTTONDOWN:
798: case WM_MBUTTONDOWN:
799: case WM_RBUTTONDOWN:
800: if (!LoadString (hInst, (UINT)wmId, szMsg, sizeof(szMsg))) {
801: wsprintf ((LPSTR)szMsg, "Unable to load ParentNotify string #%u", wmId);
802: }
803: break;
804: case WM_CREATE:
805: wsprintf (szMsg,"WM_PARENTNOTIFY: WM_CREATE, id:%i, hwnd:%i\r\n", wmId, wmhWnd);
806: //OutputDebugString (szMsg);
807: break;
808:
809: case WM_DESTROY:
810: wsprintf (szMsg,"WM_PARENTNOTIFY: WM_DESTROY, id:%i, hwnd:%i\r\n", wmId, wmhWnd);
811: //OutputDebugString (szMsg);
812: break;
813:
814: default:
815: wsprintf (szMsg,"WM_PARENTNOTIFY: %i, id:%i, hwnd:%i\r\n", wmEvent, wmId, wmhWnd);
816: //OutputDebugString (szMsg);
817: break;
818: }
819: if (hwndMenuField) {
820: SetWindowText (hwndMenuField, szMsg);
821: }
822: break;
823:
824: case WM_COMMAND:
825: //wmId = GET_WM_COMMAND_ID (wParam, lParam);
826: //wmEvent = GET_WM_COMMAND_CMD (wParam, lParam);
827: #if defined (NT)
828: wmId = LOWORD(wParam);
829: wmEvent = HIWORD(wParam);
830: #elif defined (WIN16)
831: wmId = wParam;
832: wmEvent = HIWORD(lParam);
833: #endif
834:
835: switch (wmId) {
836: // On the combo boxes, I should probably add code to
837: // automatically de-select the edit control if the user
838: // clicked in the list box to select something, but
839: // unfortunately, there is no single message that comes
840: // through that allows me to do this. I would need to
841: // keep track of 'state' information regarding if the
842: // list ever 'dropped down', and on every SELCHANGE
843: // determine if the list is still dropped or not. I would
844: // also want to handle a <CR> which would also set the
845: // selection, and then de-select the control.
846: case ID_CREATEPARAM:
847:
848: switch (wmEvent) {
849: case CBN_SETFOCUS: //Indicates that the combo box has received input focus.
850: case CBN_DROPDOWN: //Informs the owner of the combo box that its list box is about to be dropped down.
851: if (!LoadString (hInst, wmId, szMsg, sizeof(szMsg))) {
852: wsprintf ((LPSTR)szMsg, "Unable to load FontName string #%u", wmId);
853: }
854: break;
855:
856: case CBN_SELCHANGE: //Sent when the selection has been changed.
857: index = (INT)SendMessage (hwndCreateParam, CB_GETCURSEL, 0, 0);
858: if (index != CB_ERR) {
859: SendMessage (hwndCreateParam, CB_GETLBTEXT, index, (LONG)(LPSTR)szMsg);
860: FillInValue (hwndCreateValue, CFP_BASE+index);
861: } else {
862: wsprintf (szMsg, "FontName: CB_ERR while retrieving text");
863: }
864: break;
865:
866: case CBN_DBLCLK: //Sent when the user double-clicks a string with the mouse.
867: wsprintf (szMsg, "CBN_DBLCLK");
868: break;
869: case CBN_EDITCHANGE: //Indicates that the user has altered text in the edit control.
870: wsprintf (szMsg, "CBN_EDITCHANGE");
871: break;
872: case CBN_EDITUPDATE: //Indicates that the edit control will display altered text.
873: wsprintf (szMsg, "CBN_EDITUPDATE");
874: break;
875: case CBN_KILLFOCUS: //Indicates that a combo box has lost input focus.
876: wsprintf (szMsg, "CBN_KILLFOCUS");
877: break;
878: default:
879: wsprintf (szMsg, "WM_COMMAND: DEFAULT");
880: break;
881: }
882: SetWindowText (hwndMenuField, szMsg);
883: break;
884:
885: case ID_CREATEVALUE:
886: switch (wmEvent){
887: int iCreateParam;
888: int iParamValue;
889:
890: case CBN_SETFOCUS: //Indicates that the combo box has received input focus.
891: case CBN_DROPDOWN: //Informs the owner of the combo box that its list box is about to be dropped down.
892: if (!LoadString (hInst, wmId, szMsg, sizeof(szMsg))) {
893: wsprintf (szMsg, "Unable to load FontSize string #%u", wmId);
894: }
895: break;
896:
897: case CBN_SELCHANGE: //Sent when the selection has been changed.
898: index = (INT)SendMessage (hwndCreateValue, CB_GETCURSEL, 0, 0);
899: bRedraw = FALSE;
900: if (index != CB_ERR) {
901: SendMessage (hwndCreateValue, CB_GETLBTEXT, index, (LONG)(LPSTR)szMsg);
902: iCreateParam =
903: (int)SendMessage (hwndCreateParam, CB_GETITEMDATA,
904: (WORD)SendMessage (hwndCreateParam, CB_GETCURSEL, 0, (DWORD)0),
905: (DWORD)0);
906: iParamValue = (int)SendMessage (hwndCreateValue, CB_GETITEMDATA, index, 0);
907:
908: switch (iCreateParam) {
909: BYTE tmpByte;
910:
911: case CFP_HEIGHT:
912: if (lf.lfHeight != iParamValue) {
913: lf.lfHeight = iParamValue;
914: bRedraw = TRUE;
915: }
916: break;
917:
918: case CFP_WIDTH:
919: if (lf.lfWidth != iParamValue) {
920: lf.lfWidth = iParamValue;
921: bRedraw = TRUE;
922: }
923: break;
924:
925: case CFP_ESCAPEMENT:
926: if (lf.lfEscapement != iParamValue) {
927: lf.lfEscapement= iParamValue;
928: bRedraw = TRUE;
929: }
930: break;
931:
932: case CFP_ORIENTATION:
933: if (lf.lfOrientation!= iParamValue) {
934: lf.lfOrientation= iParamValue;
935: bRedraw = TRUE;
936: }
937: break;
938:
939: case CFP_WEIGHT:
940: if (lf.lfWeight != iParamValue) {
941: lf.lfWeight= iParamValue;
942: bRedraw = TRUE;
943: }
944: break;
945:
946: case CFP_ITALIC:
947: if ((int)lf.lfItalic != iParamValue) {
948: lf.lfItalic = (BYTE)iParamValue;
949: bRedraw = TRUE;
950: }
951: break;
952:
953: case CFP_UNDERLINE:
954: if (lf.lfUnderline != (BYTE)iParamValue) {
955: lf.lfUnderline= (BYTE)iParamValue;
956: bRedraw = TRUE;
957: }
958: break;
959:
960: case CFP_STRIKEOUT:
961: if (lf.lfStrikeOut != (BYTE)iParamValue) {
962: lf.lfStrikeOut= (BYTE)iParamValue;
963: bRedraw = TRUE;
964: }
965: break;
966:
967: case CFP_CHARSET:
968: if (lf.lfCharSet != (BYTE)iParamValue) {
969: lf.lfCharSet= (BYTE)iParamValue;
970: bRedraw = TRUE;
971: }
972: break;
973:
974: case CFP_OUTPUTPRECISION:
975: if (lf.lfOutPrecision != (BYTE)iParamValue) {
976: lf.lfOutPrecision = (BYTE)iParamValue;
977: bRedraw = TRUE;
978: }
979: break;
980:
981: case CFP_CLIPPRECISION:
982: if (lf.lfClipPrecision != (BYTE)iParamValue) {
983: lf.lfClipPrecision = (BYTE)iParamValue;
984: bRedraw = TRUE;
985: }
986: break;
987:
988: case CFP_QUALITY:
989: if (lf.lfQuality != (BYTE)iParamValue) {
990: lf.lfQuality = (BYTE)iParamValue;
991: bRedraw = TRUE;
992: }
993: break;
994:
995: case CFP_PITCH:
996: tmpByte = lf.lfPitchAndFamily;
997: tmpByte &= 0xFC;
998: tmpByte |= iParamValue;
999: if (tmpByte != lf.lfPitchAndFamily) {
1000: lf.lfPitchAndFamily = tmpByte;
1001: bRedraw = TRUE;
1002: }
1003: break;
1004:
1005: case CFP_FAMILY:
1006: tmpByte = lf.lfPitchAndFamily;
1007: tmpByte &= 0x03;
1008: tmpByte |= iParamValue;
1009: if (tmpByte != lf.lfPitchAndFamily) {
1010: lf.lfPitchAndFamily = tmpByte;
1011: bRedraw = TRUE;
1012: }
1013: break;
1014:
1015: case CFP_FACENAME:
1016: if (lstrcmp (lf.lfFaceName, szMsg)!=0) {
1017: if (lstrcmp(lf.lfFaceName, "(none)") == 0) {
1018: lf.lfFaceName[0] = 0;
1019: } else {
1020: wsprintf (lf.lfFaceName, "%s",(LPSTR)szMsg);
1021: bRedraw = TRUE;
1022: }
1023: }
1024: break;
1025: }
1026: } else {
1027: wsprintf (szMsg, "CreateValue: CB_ERR while retrieving text");
1028: }
1029: if (bRedraw) {
1030: InvalidateRect (hwndClient, NULL, TRUE);
1031: }
1032: break;
1033:
1034: case CBN_DBLCLK: //Sent when the user double-clicks a string with the mouse.
1035: wsprintf (szMsg, "CBN_DBLCLK");
1036: break;
1037: case CBN_EDITCHANGE: //Indicates that the user has altered text in the edit control.
1038: wsprintf (szMsg, "CBN_EDITCHANGE");
1039: break;
1040: case CBN_EDITUPDATE: //Indicates that the edit control will display altered text.
1041: wsprintf (szMsg, "CBN_EDITUPDATE");
1042: break;
1043: case CBN_KILLFOCUS: //Indicates that a combo box has lost input focus.
1044: wsprintf (szMsg, "CBN_KILLFOCUS");
1045: break;
1046: default:
1047: wsprintf (szMsg, "WM_COMMAND: DEFAULT");
1048: break;
1049: }
1050: SetWindowText (hwndMenuField, szMsg);
1051: break;
1052:
1053: // The Menu Selections
1054: case IDM_NEW:
1055: case IDM_OPEN:
1056: case IDM_CLOSE:
1057: case IDM_SAVE:
1058: case IDM_SAVEAS:
1059: case IDM_PRINT:
1060: case IDM_PRINTSET:
1061: SetWindowText (hwndMenuField, "This command is not yet implemented.");
1062: break;
1063:
1064: case IDM_EXIT:
1065: DestroyWindow(hwnd);
1066: break;
1067:
1068: case IDM_UNDO:
1069: case IDM_CUT:
1070: case IDM_COPY:
1071: case IDM_PASTE:
1072: case IDM_DELETE:
1073: case IDM_FIND:
1074: case IDM_REPLACE:
1075: SetWindowText (hwndMenuField, "This command is not yet implemented.");
1076: break;
1077:
1078: case IDM_TOOLBAR:
1079: break;
1080:
1081: case IDM_STATUSBAR:
1082: break;
1083:
1084: case IDM_TEST1:
1085: lpDlgFunc = MakeProcInstance((FARPROC) CreateDlgProc, hInst);
1086: #if defined (NT)
1087: DialogBoxParam(hInst, "CreateFont", hwnd, (WNDPROC)lpDlgFunc, (DWORD)(LPLOGFONT)&lf);
1088: #elif defined (WIN16)
1089: DialogBoxParam(hInst, "CreateFont", hwnd, (FARPROC)lpDlgFunc, (DWORD)(LPLOGFONT)&lf);
1090: #endif
1091: FreeProcInstance(lpDlgFunc);
1092: index = (INT)SendMessage (hwndCreateParam, CB_GETCURSEL, 0, 0);
1093: if (index != CB_ERR) {
1094: FillInValue (hwndCreateValue, CFP_BASE+index);
1095: } else {
1096: wsprintf (szMsg, "CreateFont: CB_ERR while setting values");
1097: }
1098: InvalidateRect (hwndClient, NULL, TRUE);
1099:
1100: break;
1101:
1102: case IDM_TEST2:
1103: lpDlgFunc = MakeProcInstance((FARPROC) MetricsDlgProc, hInst);
1104: #if defined (NT)
1105: DialogBoxParam(hInst, "TextMetric", hwnd, (WNDPROC)lpDlgFunc, (DWORD)(LPLOGFONT)&lf);
1106: #elif defined (WIN16)
1107: DialogBoxParam(hInst, "TextMetric", hwnd, (FARPROC)lpDlgFunc, (DWORD)(LPLOGFONT)&lf);
1108: #endif
1109: FreeProcInstance(lpDlgFunc);
1110: index = (INT)SendMessage (hwndCreateParam, CB_GETCURSEL, 0, 0);
1111: if (index != CB_ERR) {
1112: FillInValue (hwndCreateValue, CFP_BASE+index);
1113: } else {
1114: wsprintf (szMsg, "CreateFont: CB_ERR while setting values");
1115: }
1116: InvalidateRect (hwndClient, NULL, TRUE);
1117: break;
1118: case IDM_TEST3:
1119: lpDlgFunc = MakeProcInstance((FARPROC) EnumDlgProc, hInst);
1120: #if defined (NT)
1121: DialogBoxParam(hInst, "EnumFonts", hwnd, (WNDPROC)lpDlgFunc, (DWORD)(LPLOGFONT)&lf);
1122: #elif defined (WIN16)
1123: DialogBoxParam(hInst, "EnumFonts", hwnd, (FARPROC)lpDlgFunc, (DWORD)(LPLOGFONT)&lf);
1124: #endif
1125: FreeProcInstance(lpDlgFunc);
1126: index = (INT)SendMessage (hwndCreateParam, CB_GETCURSEL, 0, 0);
1127: if (index != CB_ERR) {
1128: FillInValue (hwndCreateValue, CFP_BASE+index);
1129: } else {
1130: wsprintf (szMsg, "CreateFont: CB_ERR while setting values");
1131: }
1132: InvalidateRect (hwndClient, NULL, TRUE);
1133: break;
1134: case IDM_TEST4:
1135: break;
1136:
1137: case IDM_USAGE:
1138: strcpy(szMsg, "Usage");
1139: if (WinHelp (hwnd, "FontView.HLP", HELP_KEY, (DWORD)(LPSTR)szMsg)) {
1140: SetWindowText (hwndMenuField, "WinHelp suceeded");
1141: } else {
1142: SetWindowText (hwndMenuField, "WinHelp failed");
1143: }
1144: break;
1145:
1146: case IDM_ABOUT:
1147: lpDlgFunc = MakeProcInstance((FARPROC) SimpleDlgProc, hInst);
1148: #if defined (NT)
1149: DialogBox(hInst,
1150: (wmId==IDM_ABOUT)?"AboutBox":"UsageBox",
1151: hwnd,
1152: (WNDPROC)lpDlgFunc);
1153: #elif defined (WIN16)
1154: DialogBox(hInst,
1155: (wmId==IDM_ABOUT)?"AboutBox":"UsageBox",
1156: hwnd,
1157: (FARPROC)lpDlgFunc);
1158: #endif
1159: FreeProcInstance(lpDlgFunc);
1160: break;
1161:
1162:
1163:
1164: }
1165: break;
1166:
1167: case WM_PAINT:
1168: hdc = BeginPaint (hwnd, &ps);
1169: EndPaint (hwnd, &ps);
1170: break;
1171:
1172: case WM_MENUSELECT:
1173: /* A menu item is hilited, get description text for status bar */
1174: //DebugBreak();
1175: tmp = idMenuSelect;
1176:
1177: #if defined (NT)
1178: wmMenuCmd = LOWORD(wParam);
1179: wmFlags = HIWORD(wParam);
1180: wmhMenu = (HMENU)lParam;
1181: #elif defined (WIN16)
1182: wmMenuCmd = wParam;
1183: wmFlags = LOWORD(lParam);
1184: wmhMenu = (HMENU)HIWORD(lParam);
1185: #endif
1186:
1187: if((wmhMenu == 0) && (wmFlags = -1)) {
1188: tmp = idMenuSelect = 0;
1189: SetWindowText(hwndMenuField, "Ready...");
1190: } else if(wmhMenu == 0) {
1191: /* don't do anything for this */
1192: } else if(wmFlags & MF_POPUP) {
1193: if((HMENU)wmMenuCmd == hSysMenuMain)
1194: idMenuSelect = IDM_SYSMENU;
1195: else if((HMENU)wmMenuCmd == hFileMenu)
1196: idMenuSelect = IDM_FILE;
1197: else if((HMENU)wmMenuCmd == hEditMenu)
1198: idMenuSelect = IDM_EDIT;
1199: else if((HMENU)wmMenuCmd == hItemMenu)
1200: idMenuSelect = IDM_ITEM;
1201: else if((HMENU)wmMenuCmd == hHelpMenu)
1202: idMenuSelect = IDM_HELP;
1203: } else {
1204: if(wmMenuCmd != 0) { /* separators have wparam of 0 */
1205: idMenuSelect = wmMenuCmd;
1206: }
1207: }
1208:
1209: if (idMenuSelect != tmp) {
1210: if (!LoadString ( hInst, (int)idMenuSelect, szMsg, sizeof(szMsg))) {
1211: if(idMenuSelect != (WORD)-1){
1212: wsprintf ((LPSTR)szMsg, "Unable to load menu string #%u", idMenuSelect);
1213: }
1214: else{
1215: strcpy(szMsg, "Unsupported Function");
1216: }
1217: }
1218: SetWindowText (hwndMenuField, szMsg);
1219: }
1220: break;
1221:
1222: case WM_QUERYENDSESSION:
1223: return (MessageBox (GetFocus(), "Exit Application?", szAppTitle,
1224: MB_ICONQUESTION | MB_YESNO) == IDYES);
1225:
1226: case WM_DESTROY:
1227: if (hwnd == hwndMain) {
1228: PostQuitMessage (0);
1229: }
1230: break;
1231:
1232: default:
1233: return DefWindowProc (hwnd, msg, wParam, lParam);
1234: }
1235: return 0L;
1236:
1237: #if defined(NOTIME)
1238: szTime; lTime; datetime; //Just to resolve references
1239: #endif
1240: }
1241:
1242: LONG APIENTRY ClientProc (HWND hwnd, UINT msg, UINT wParam, LONG lParam)
1243: {
1244: HANDLE hInst;
1245: PAINTSTRUCT ps;
1246: HFONT hfont, hfontPrev;
1247: RECT rect;
1248: HDC hdc;
1249:
1250: #if defined (NT)
1251: hInst = (HANDLE)GetWindowLong (hwnd, GWL_HINSTANCE);
1252: #elif defined (WIN16)
1253: hInst = (HANDLE)GetWindowWord (hwnd, GWW_HINSTANCE);
1254: #endif
1255:
1256: switch (msg) {
1257: case WM_PAINT:
1258: hdc = BeginPaint (hwnd, &ps);
1259: hfont = CreateFontIndirect (&lf);
1260: hfontPrev = SelectObject (hdc, hfont);
1261: GetClientRect (hwnd, &rect);
1262: DrawAscii (hdc, &rect, 0);
1263: SelectObject (hdc, hfontPrev);
1264: DeleteObject (hfont);
1265: EndPaint (hwnd, &ps);
1266: break;
1267:
1268: default:
1269: return DefWindowProc (hwnd, msg, wParam, lParam);
1270: }
1271: return 0L;
1272: }
1273:
1274:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.