|
|
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.