|
|
1.1 root 1:
2: /******************************************************************************\
3: * This is a part of the Microsoft Source Code Samples.
4: * Copyright (C) 1993 Microsoft Corporation.
5: * All rights reserved.
6: * This source code is only intended as a supplement to
7: * Microsoft Development Tools and/or WinHelp documentation.
8: * See these sources for detailed information regarding the
9: * Microsoft samples programs.
10: \******************************************************************************/
11:
12: /**************************************************************************\
13: * dialogs.c -- module for the two dialogs (LOGFONT & TEXTMETRIC)
14: * Includes the window procedure and an initialization routine.
15: * the LogFontWndProc is actually used for multiple dialogs.
16: \**************************************************************************/
17: #define UNICODE
18:
19: #include <windows.h>
20: #include <string.h>
21: #include <stdio.h>
22: #include "ttfonts.h"
23:
24:
25:
26: int initDlg(HWND hwndMain)
27: {
28: /* load three dialogs and position them. Set the minimize icon for
29: * this CLASS and it affects all dialog windows.
30: */
31:
32: hwndDlgLF = CreateDialog (hInst, TEXT("logfontDlg"), hwndMain,
33: (DLGPROC)LogFontWndProc);
34: if (hwndDlgLF == NULL) return FALSE;
35:
36: SetWindowPos (hwndDlgLF, NULL,
37: CHILDLEFT(1), CHILDTOP,
38: 0,0, SWP_NOZORDER | SWP_NOSIZE);
39:
40:
41: hwndDlgTM = CreateDialog (hInst, TEXT("textmetricDlg"), hwndMain,
42: (DLGPROC)LogFontWndProc);
43: if (hwndDlgTM == NULL) return FALSE;
44:
45: SetWindowPos (hwndDlgTM, NULL,
46: CHILDLEFT(0), CHILDTOP,
47: 0,0, SWP_NOZORDER | SWP_NOSIZE);
48:
49:
50:
51: hwndDlgOLTM = CreateDialog (hInst, TEXT("oltextmetricDlg"), hwndMain,
52: (DLGPROC)LogFontWndProc);
53: if (hwndDlgOLTM == NULL) return FALSE;
54: ShowWindow (hwndDlgOLTM, SW_MINIMIZE);
55:
56:
57:
58:
59: hwndDlgFD = CreateDialog (hInst, TEXT("getfontdataDlg"), hwndMain,
60: (DLGPROC)FontDataWndProc);
61: if (hwndDlgFD == NULL) return FALSE;
62: ShowWindow (hwndDlgFD, SW_MINIMIZE);
63: SetWindowPos (hwndDlgFD, HWND_TOP,
64: 0, 0,
65: 0,0, SWP_NOSIZE );
66:
67:
68:
69: SetClassLong (hwndDlgLF, GCL_HICON, (LONG)LoadIcon(hInst, TEXT("ttfontsIcon")));
70:
71:
72: return TRUE;
73: }
74:
75:
76: /* first and last string IDs from string table in RC file */
77: #define FIRSTSTRING 1
78: #define LASTSTRING 20
79:
80:
81:
82: /**************************************************************************\
83: *
84: * function: FontDataWndProc
85: *
86: * input parameters: normal window procedure parameters.
87: *
88: * Allow the user to select a table, an offset, and a byte count.
89: * on command message, post self a user message (allows the user
90: * message to come in from other sources too). On the user message,
91: * just call GetFontData and display the results.
92: *
93: *
94: // UNICODE NOTICE
95: // Parts of this are held as ANSI because the dwTable
96: // in the fontdata is stored with four 8 bit chars.
97: // And because there is not yet a wide char version of sscanf().
98: *
99: *
100: \**************************************************************************/
101: LRESULT CALLBACK FontDataWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
102: {
103: #define NCHAR 255
104: TCHAR buffer[NCHAR];
105: HDC hdc;
106: int nBytes, nStrings, i;
107:
108:
109: switch (message) {
110:
111: /* fill combo box w/ table names, and
112: * entry fields w/ meaningful initial values.
113: */
114: case WM_INITDIALOG:
115: SetDlgItemInt (hwnd, DID_DWOFFSET, 0, TRUE);
116: SetDlgItemInt (hwnd, DID_CBDATA, 50, TRUE);
117: for (i = FIRSTSTRING; i<= LASTSTRING; i++) {
118: LoadString (GetModuleHandle (NULL), i, buffer, NCHAR);
119: SendDlgItemMessage (hwnd, DID_DWTABLE, CB_ADDSTRING, 0, (LPARAM)buffer);
120: }
121:
122: return TRUE;
123:
124: /* If the user hits the DOIT button, post message back to the
125: * main window. It will get an HDC and then post us the proper
126: * user message.
127: */
128: case WM_COMMAND:
129: if (wParam == DID_DOIT)
130: PostMessage (hwndMain, WM_COMMAND, TBID_GETFONTDATA, 0);
131: break; /* end WM_COMMAND */
132:
133:
134:
135: /**********************************************************************\
136: * WMU_GETFONTDATA
137: *
138: * lParam - HDC.
139: *
140: * User message. Parse the contents of the entry fields, and make the
141: * GetFontData() call. Put results in the listbox.
142: \**********************************************************************/
143: case WMU_GETFONTDATA: {
144: DWORD dwTable, dwOffset, cbData;
145: LPBYTE lpDataBuffer;
146: DWORD dwNBytes;
147:
148: hdc = (HDC) lParam;
149: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_RESETCONTENT, 0, 0);
150:
151:
152: {
153: // UNICODE NOTICE. GetDlgItemTextA returns ANSI strings.
154: // we are doing manipulation on a byte by byte basis
155:
156: CHAR fourbytes[5];
157: CHAR sbBuffer[NCHAR];
158:
159: nBytes = GetDlgItemTextA (hwnd, DID_DWTABLE, fourbytes, 5);
160: if (nBytes == 0) {
161: dwTable = 0;
162: } else {
163: dwTable = (DWORD) ((fourbytes[3] << 24)
164: + (fourbytes[2] << 16)
165: + (fourbytes[1] << 8)
166: + (fourbytes[0]));
167: }
168:
169:
170: // UNICODE NOTICE. GetDlgItemTextA returns ANSI strings.
171: // sscanf expects single byte strings.
172:
173: GetDlgItemTextA (hwnd, DID_DWOFFSET, sbBuffer, NCHAR);
174: sscanf (sbBuffer, "%x", &dwOffset);
175: GetDlgItemTextA (hwnd, DID_CBDATA , sbBuffer, NCHAR);
176: sscanf (sbBuffer, "%x", &cbData);
177: }
178:
179:
180: lpDataBuffer = (LPBYTE) LocalAlloc (LPTR, cbData);
181: if (lpDataBuffer == NULL) {
182: MessageBox (NULL, TEXT("alloc failed"), MBERROR, MBERRORFLAGS);
183: return 0;
184: }
185:
186: dwNBytes = GetFontData (hdc, dwTable, dwOffset, (LPVOID) lpDataBuffer, cbData);
187:
188: if (dwNBytes == -1) {
189: MessageBox (NULL, MBGETFONTDATAERR, MBERROR, MBERRORFLAGS);
190: } else {
191:
192: nStrings = dwNBytes / 16;
193: for (i = 0; i< nStrings; i++) {
194: wsprintf (buffer,
195: TEXT("%02x%02x %02x%02x %02x%02x %02x%02x %02x%02x %02x%02x %02x%02x %02x%02x"),
196: (int)lpDataBuffer[i*16+0],
197: (int)lpDataBuffer[i*16+1],
198: (int)lpDataBuffer[i*16+2],
199: (int)lpDataBuffer[i*16+3],
200: (int)lpDataBuffer[i*16+4],
201: (int)lpDataBuffer[i*16+5],
202: (int)lpDataBuffer[i*16+6],
203: (int)lpDataBuffer[i*16+7],
204: (int)lpDataBuffer[i*16+8],
205: (int)lpDataBuffer[i*16+9],
206: (int)lpDataBuffer[i*16+10],
207: (int)lpDataBuffer[i*16+11],
208: (int)lpDataBuffer[i*16+12],
209: (int)lpDataBuffer[i*16+13],
210: (int)lpDataBuffer[i*16+14],
211: (int)lpDataBuffer[i*16+15]);
212: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
213: }
214: }
215:
216: LocalFree ( LocalHandle ((LPVOID)lpDataBuffer));
217: } return TRUE; /* end WMU_GETFONTDATA */
218:
219: } /* end switch */
220: return 0;
221: }
222:
223:
224:
225:
226:
227:
228: /**************************************************************************\
229: *
230: * function: LogFontWndProc
231: *
232: * input parameters: normal window procedure parameters.
233: * global variables:
234: *
235: * This window procedure is used for two completely different dialog boxes.
236: \**************************************************************************/
237: LRESULT CALLBACK LogFontWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
238: {
239: static LPLOGFONT lplf;
240: static LPTEXTMETRIC lptm;
241:
242: switch (message) {
243:
244:
245: /**********************************************************************\
246: * WMU_DEMOTOLF
247: *
248: * lParam - pointer to LOGFONT structure.
249: *
250: * User message. Take the input LOGFONT and fill the edit fields of the
251: * dialog box.
252: \**********************************************************************/
253: case WMU_DEMOTOLF: {
254: lplf = (LPLOGFONT) lParam;
255:
256: SetDlgItemInt (hwnd, DIDHEIGHT , lplf->lfHeight, TRUE);
257: SetDlgItemInt (hwnd, DIDWIDTH , lplf->lfWidth, TRUE);
258: SetDlgItemInt (hwnd, DIDESCAPE , lplf->lfEscapement, TRUE);
259: SetDlgItemInt (hwnd, DIDORIENT , lplf->lfOrientation, TRUE);
260: SetDlgItemInt (hwnd, DIDWEIGHT , lplf->lfWeight, TRUE);
261: SetDlgItemInt (hwnd, DIDITALIC , lplf->lfItalic, FALSE);
262: SetDlgItemInt (hwnd, DIDUNDERL , lplf->lfUnderline, FALSE);
263: SetDlgItemInt (hwnd, DIDSTRIKE , lplf->lfStrikeOut, FALSE);
264: SetDlgItemInt (hwnd, DIDCHARSE , lplf->lfCharSet, FALSE);
265: SetDlgItemInt (hwnd, DIDOUTPRE , lplf->lfOutPrecision, FALSE);
266: SetDlgItemInt (hwnd, DIDCLIPPR , lplf->lfClipPrecision, FALSE);
267: SetDlgItemInt (hwnd, DIDQUALIT , lplf->lfQuality, FALSE);
268: SetDlgItemInt (hwnd, DIDPITCHA , lplf->lfPitchAndFamily,FALSE);
269: SetDlgItemText (hwnd, DIDFACENA, lplf->lfFaceName);
270:
271: } break;
272:
273:
274: /**********************************************************************\
275: * WMU_LFTODEMO
276: *
277: * lParam - pointer to LOGFONT structure.
278: *
279: * User message. Fill the input LOGFONT with the contents of the
280: * edit fields of dialog box.
281: \**********************************************************************/
282: case WMU_LFTODEMO: {
283: BOOL success;
284: lplf = (LPLOGFONT) lParam;
285:
286:
287: lplf->lfHeight = GetDlgItemInt (hwnd, DIDHEIGHT, &success , TRUE);
288: lplf->lfWidth = GetDlgItemInt (hwnd, DIDWIDTH , &success , TRUE);
289: lplf->lfEscapement = GetDlgItemInt (hwnd, DIDESCAPE, &success , TRUE);
290: lplf->lfOrientation = GetDlgItemInt (hwnd, DIDORIENT, &success , TRUE);
291: lplf->lfWeight = GetDlgItemInt (hwnd, DIDWEIGHT, &success , TRUE);
292: lplf->lfItalic = (BYTE) GetDlgItemInt (hwnd, DIDITALIC, &success , FALSE);
293: lplf->lfUnderline = (BYTE) GetDlgItemInt (hwnd, DIDUNDERL, &success , FALSE);
294: lplf->lfStrikeOut = (BYTE) GetDlgItemInt (hwnd, DIDSTRIKE, &success , FALSE);
295: lplf->lfCharSet = (BYTE) GetDlgItemInt (hwnd, DIDCHARSE, &success , FALSE);
296: lplf->lfOutPrecision = (BYTE) GetDlgItemInt (hwnd, DIDOUTPRE, &success , FALSE);
297: lplf->lfClipPrecision = (BYTE) GetDlgItemInt (hwnd, DIDCLIPPR, &success , FALSE);
298: lplf->lfQuality = (BYTE) GetDlgItemInt (hwnd, DIDQUALIT, &success , FALSE);
299: lplf->lfPitchAndFamily =(BYTE) GetDlgItemInt (hwnd, DIDPITCHA, &success , FALSE);
300: GetDlgItemText (hwnd, DIDFACENA, lplf->lfFaceName, LF_FACESIZE);
301:
302: } break;
303:
304:
305:
306: /**********************************************************************\
307: * WMU_DEMOTOTM
308: *
309: * lParam - pointer to TEXTMETRIC structure.
310: *
311: * User message. Take the input LOGFONT and fill the list box with
312: * strings. Turn off update before hand, then reenable when complete.
313: \**********************************************************************/
314: case WMU_DEMOTOTM: {
315: TCHAR buffer[100];
316:
317: lptm = (LPTEXTMETRIC) lParam;
318:
319: SendDlgItemMessage (hwnd, DID_LISTBOX, WM_SETREDRAW, FALSE, 0);
320: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_RESETCONTENT, 0, 0);
321:
322: #define LBPUT SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
323:
324: wsprintf (buffer, TEXT("tmHeight \t%d") ,(int) lptm->tmHeight ); LBPUT
325: wsprintf (buffer, TEXT("tmAscent \t%d") ,(int) lptm->tmAscent ); LBPUT
326: wsprintf (buffer, TEXT("tmDescent \t%d") ,(int) lptm->tmDescent ); LBPUT
327: wsprintf (buffer, TEXT("tmInternalLeading\t%d") ,(int) lptm->tmInternalLeading ); LBPUT
328: wsprintf (buffer, TEXT("tmExternalLeading\t%d") ,(int) lptm->tmExternalLeading ); LBPUT
329: wsprintf (buffer, TEXT("tmAveCharWidth \t%d") ,(int) lptm->tmAveCharWidth ); LBPUT
330: wsprintf (buffer, TEXT("tmMaxCharWidth \t%d") ,(int) lptm->tmMaxCharWidth ); LBPUT
331: wsprintf (buffer, TEXT("tmWeight \t%d") ,(int) lptm->tmWeight ); LBPUT
332: wsprintf (buffer, TEXT("tmOverhang \t%d") ,(int) lptm->tmOverhang ); LBPUT
333: wsprintf (buffer, TEXT("tmDigitizedAspectX\t%d"),(int) lptm->tmDigitizedAspectX ); LBPUT
334: wsprintf (buffer, TEXT("tmDigitizedAspectY\t%d"),(int) lptm->tmDigitizedAspectY ); LBPUT
335: wsprintf (buffer, TEXT("tmItalic \t%d") ,(int) lptm->tmItalic ); LBPUT
336: wsprintf (buffer, TEXT("tmUnderlined \t%d") ,(int) lptm->tmUnderlined ); LBPUT
337: wsprintf (buffer, TEXT("tmStruckOut \t%d") ,(int) lptm->tmStruckOut ); LBPUT
338: wsprintf (buffer, TEXT("tmFirstChar \t%d") ,(int) lptm->tmFirstChar ); LBPUT
339: wsprintf (buffer, TEXT("tmLastChar \t%d") ,(int) lptm->tmLastChar ); LBPUT
340: wsprintf (buffer, TEXT("tmDefaultChar \t%d") ,(int) lptm->tmDefaultChar ); LBPUT
341: wsprintf (buffer, TEXT("tmBreakChar \t%d") ,(int) lptm->tmBreakChar ); LBPUT
342: wsprintf (buffer, TEXT("tmPitchAndFamily\t%d") ,(int) lptm->tmPitchAndFamily ); LBPUT
343: wsprintf (buffer, TEXT("tmCharSet \t%d") ,(int) lptm->tmCharSet ); LBPUT
344:
345: SendDlgItemMessage (hwnd, DID_LISTBOX, WM_SETREDRAW, TRUE, 0);
346: InvalidateRect (hwnd, NULL, TRUE);
347: UpdateWindow (hwnd);
348:
349: } break;
350:
351:
352: /**********************************************************************\
353: * WMU_DEMOTOOLTM
354: *
355: * lParam - HDC.
356: *
357: * User message. With the input HDC, allocate space for OUTLINETEXTMETRIC
358: * structure, query it from the HDC, and fill the listbox. (Allocate the
359: * OUTLINETEXTMETRIC structure dynamically since it is variable size.)
360: \**********************************************************************/
361: case WMU_DEMOTOOLTM: {
362: HDC hdc;
363: TCHAR buffer[100];
364: UINT cbData;
365: LPOUTLINETEXTMETRIC lpoltm;
366: LPBYTE lptStr;
367:
368: hdc = (HDC) lParam;
369:
370:
371: /* figure out how large the structure is, alloc, and re-query
372: * unless cbData ==0, then post no-op string and exit.
373: */
374: cbData = GetOutlineTextMetrics (hdc, 0, NULL);
375: if (cbData == 0) {
376: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_RESETCONTENT, 0, 0);
377: wsprintf (buffer, TEXT("cbData == 0")); LBPUT
378: return 0;
379: }
380: lpoltm = (LPOUTLINETEXTMETRIC)LocalAlloc (LPTR, cbData);
381: GetOutlineTextMetrics (hdc, cbData, lpoltm);
382:
383:
384: /* freeze redraw of listbox, and clear contents. */
385: SendDlgItemMessage (hwnd, DID_LISTBOX, WM_SETREDRAW, FALSE, 0);
386: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_RESETCONTENT, 0, 0);
387:
388:
389: wsprintf (buffer, TEXT("otmSize \t%d"),(int) lpoltm->otmSize ); LBPUT
390: wsprintf (buffer, TEXT("otmTextMetrics { }")); LBPUT
391: wsprintf (buffer, TEXT("otmFiller \t%d"),(int)(BYTE) lpoltm->otmFiller ); LBPUT
392:
393: wsprintf (buffer, TEXT("otmPanoseNumber ")); LBPUT
394: // removed for beta 2. wsprintf (buffer, TEXT("\t ulCulture \t%d"), (int) lpoltm->otmPanoseNumber.ulCulture ); LBPUT
395: wsprintf (buffer, TEXT("\t bFamilyType \t0x%lx"),(int) lpoltm->otmPanoseNumber.bFamilyType ); LBPUT
396: wsprintf (buffer, TEXT("\t bSerifStyle \t0x%lx"),(int) lpoltm->otmPanoseNumber.bSerifStyle ); LBPUT
397: wsprintf (buffer, TEXT("\t bWeight \t0x%lx"),(int) lpoltm->otmPanoseNumber.bWeight ); LBPUT
398: wsprintf (buffer, TEXT("\t bProportion \t0x%lx"),(int) lpoltm->otmPanoseNumber.bProportion ); LBPUT
399: wsprintf (buffer, TEXT("\t bContrast \t0x%lx"),(int) lpoltm->otmPanoseNumber.bContrast ); LBPUT
400: wsprintf (buffer, TEXT("\t bStrokeVariation \t0x%lx"),(int) lpoltm->otmPanoseNumber.bStrokeVariation ); LBPUT
401: wsprintf (buffer, TEXT("\t bArmStyle \t0x%lx"),(int) lpoltm->otmPanoseNumber.bArmStyle ); LBPUT
402: wsprintf (buffer, TEXT("\t bLetterform \t0x%lx"),(int) lpoltm->otmPanoseNumber.bLetterform ); LBPUT
403: wsprintf (buffer, TEXT("\t bMidline \t0x%lx"),(int) lpoltm->otmPanoseNumber.bMidline ); LBPUT
404: wsprintf (buffer, TEXT("\t bXHeight \t0x%lx"),(int) lpoltm->otmPanoseNumber.bXHeight ); LBPUT
405:
406:
407: wsprintf (buffer, TEXT("otmfsSelection \t%d"),(UINT) lpoltm->otmfsSelection ); LBPUT
408: wsprintf (buffer, TEXT("otmfsType \t%d"),(UINT) lpoltm->otmfsType ); LBPUT
409: wsprintf (buffer, TEXT("otmsCharSlopeRise \t%d"),(UINT) lpoltm->otmsCharSlopeRise ); LBPUT
410: wsprintf (buffer, TEXT("otmsCharSlopeRun \t%d"),(UINT) lpoltm->otmsCharSlopeRun ); LBPUT
411: wsprintf (buffer, TEXT("otmItalicAngle \t%d"),(UINT) lpoltm->otmItalicAngle ); LBPUT
412: wsprintf (buffer, TEXT("otmEMSquare \t%d"),(UINT) lpoltm->otmEMSquare ); LBPUT
413: wsprintf (buffer, TEXT("otmAscent \t%d"),(UINT) lpoltm->otmAscent ); LBPUT
414: wsprintf (buffer, TEXT("otmDescent \t%d"),(int) lpoltm->otmDescent ); LBPUT
415: wsprintf (buffer, TEXT("otmLineGap \t%d"),(int) lpoltm->otmLineGap ); LBPUT
416: wsprintf (buffer, TEXT("otmsCapEmHeight \t%d"),(UINT) lpoltm->otmsCapEmHeight ); LBPUT
417: wsprintf (buffer, TEXT("otmsXHeight \t%d"),(UINT) lpoltm->otmsXHeight ); LBPUT
418: wsprintf (buffer, TEXT("otmrcFontBox \t (%d, %d, %d, %d)"),
419: (int) lpoltm->otmrcFontBox.left,
420: (int) lpoltm->otmrcFontBox.top,
421: (int) lpoltm->otmrcFontBox.right,
422: (int) lpoltm->otmrcFontBox.bottom ); LBPUT
423: wsprintf (buffer, TEXT("otmMacAscent \t%d"),(int) lpoltm->otmMacAscent ); LBPUT
424: wsprintf (buffer, TEXT("otmMacDescent \t%d"),(int) lpoltm->otmMacDescent ); LBPUT
425: wsprintf (buffer, TEXT("otmMacLineGap \t%d"),(UINT) lpoltm->otmMacLineGap ); LBPUT
426: wsprintf (buffer, TEXT("otmusMinimumPPEM \t%d"),(UINT) lpoltm->otmusMinimumPPEM ); LBPUT
427:
428: wsprintf (buffer, TEXT("otmptSubscriptSize \t(%d, %d)"),
429: (int) lpoltm->otmptSubscriptSize.x,
430: (int) lpoltm->otmptSubscriptSize.y ); LBPUT
431: wsprintf (buffer, TEXT("otmptSubscriptOffset \t(%d, %d)"),
432: (int) lpoltm->otmptSubscriptOffset.x,
433: (int) lpoltm->otmptSubscriptOffset.y ); LBPUT
434: wsprintf (buffer, TEXT("otmptSuperscriptSize \t(%d, %d)"),
435: (int) lpoltm->otmptSuperscriptSize.x,
436: (int) lpoltm->otmptSuperscriptSize.y ); LBPUT
437: wsprintf (buffer, TEXT("otmptSuperscriptOffset \t(%d, %d)"),
438: (int) lpoltm->otmptSuperscriptOffset.x,
439: (int) lpoltm->otmptSuperscriptOffset.y); LBPUT
440:
441: wsprintf (buffer, TEXT("otmsStrikeoutSize \t%d"),(UINT) lpoltm->otmsStrikeoutSize ); LBPUT
442: wsprintf (buffer, TEXT("otmsStrikeoutPosition \t%d"),(int) lpoltm->otmsStrikeoutPosition ); LBPUT
443: wsprintf (buffer, TEXT("otmsUnderscoreSize \t%d"),(int) lpoltm->otmsUnderscoreSize ); LBPUT
444: wsprintf (buffer, TEXT("otmsUnderscorePosition \t%d"),(UINT) lpoltm->otmsUnderscorePosition); LBPUT
445:
446: /* the last 4 fields are incorrectly typed as PSTR,
447: * they are in fact offsets from the top of the
448: * OUTLINETEXTMETRIC structure, to the location of the string.
449: */
450: lptStr = (LPBYTE)lpoltm;
451: lptStr += (UINT) (PBYTE) lpoltm->otmpFamilyName;
452: wsprintf (buffer, TEXT("otmpFamilyName: %s"),lptStr); LBPUT
453:
454: lptStr = (LPBYTE)lpoltm;
455: lptStr += (UINT) (PBYTE) lpoltm->otmpFaceName;
456: wsprintf (buffer, TEXT("otmpFaceName: %s"),lptStr); LBPUT
457:
458: lptStr = (LPBYTE)lpoltm;
459: lptStr += (UINT) (PBYTE) lpoltm->otmpStyleName;
460: wsprintf (buffer, TEXT("otmpStyleName: %s"),lptStr); LBPUT
461:
462: wsprintf (buffer, TEXT("otmpFullName:")); LBPUT
463: lptStr = (LPBYTE)lpoltm;
464: lptStr += (UINT) (PBYTE) lpoltm->otmpFullName;
465: wsprintf (buffer, TEXT(" %s"),lptStr); LBPUT
466:
467:
468: SendDlgItemMessage (hwnd, DID_LISTBOX, WM_SETREDRAW, TRUE, 0);
469: InvalidateRect (hwnd, NULL, TRUE);
470: UpdateWindow (hwnd);
471:
472: /* balance LocalAlloc(), release memory. */
473: LocalFree (LocalHandle (lpoltm));
474:
475: } break;
476:
477:
478:
479: } /* end switch */
480: return 0;
481: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.