|
|
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: // GUI.C ! 13: // ================================================================ ! 14: // This module contains all of the functions that interface to the ! 15: // 'graphical' part of this program. This currently only relates to ! 16: // the code that brings up the dialog box, and calls the WinHelp ! 17: // engine. ! 18: ! 19: #include <stdio.h> ! 20: #include <string.h> ! 21: #include <ctype.h> ! 22: #include <windows.h> ! 23: #include "ConGUI.h" ! 24: ! 25: int DoHelp (char *szHelpTopic); ! 26: int GetDialogArgs (char ***pargv); ! 27: BOOL CenterWindow (HWND hwnd); ! 28: BOOL APIENTRY CLDlgProc (HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam); ! 29: ! 30: ! 31: // Use WINHELP to bring up the applicaiton help file ! 32: int DoHelp (char *szHelpTopic) ! 33: { ! 34: WinHelp (GetFocus(), "ConGUI.HLP", HELP_KEY, (DWORD)(LPSTR)szHelpTopic); ! 35: return TRUE; ! 36: } ! 37: ! 38: ! 39: // Bring up the dialog box, and pass back a 'command line' as was ! 40: // specified by the user ! 41: int GetDialogArgs (char ***pargv) ! 42: { ! 43: int ret; ! 44: HANDLE hinst; ! 45: HWND hwnd; ! 46: char szFile[80]; ! 47: ! 48: hinst = GetModuleHandle (NULL); ! 49: hwnd = GetFocus(); ! 50: ! 51: ret = DialogBoxParam (hinst, "CL", NULL, CLDlgProc, (LPARAM)pargv); ! 52: ! 53: if (-1 == ret) { ! 54: ret = GetLastError(); ! 55: printf ("Unable to create dialog: %d\n", ret); ! 56: GetModuleFileName (hinst, szFile, sizeof(szFile)); ! 57: printf ("hinst = %d\n", hinst); ! 58: printf ("hwnd = %d\n", hwnd); ! 59: printf ("File = %s\n", szFile); ! 60: return FALSE; ! 61: ! 62: } ! 63: return ret; ! 64: } ! 65: ! 66: // A quick little routine that will center a window on the screen. ! 67: // Handy for dialog boxes ! 68: BOOL CenterWindow (HWND hwnd) ! 69: { ! 70: RECT rect; ! 71: int w, h; ! 72: int wScreen, hScreen, xNew, yNew; ! 73: HDC hdc; ! 74: ! 75: GetWindowRect (hwnd, &rect); ! 76: w = rect.right - rect.left; ! 77: h = rect.bottom - rect.top; ! 78: ! 79: hdc = GetDC (hwnd); ! 80: wScreen = GetDeviceCaps (hdc, HORZRES); ! 81: hScreen = GetDeviceCaps (hdc, VERTRES); ! 82: ReleaseDC (hwnd, hdc); ! 83: ! 84: xNew = wScreen/2 - w/2; ! 85: yNew = hScreen/2 - h/2; ! 86: ! 87: return SetWindowPos (hwnd, NULL, xNew, yNew, 0, 0, SWP_NOSIZE | SWP_NOZORDER); ! 88: } ! 89: ! 90: ! 91: // Create a data structure that will hold the strings for the combo boxes ! 92: // we have in our dialog. This just illustrates 'a' way to do this, not ! 93: // necessarily the best. ! 94: ! 95: typedef struct tagDlgCtrls { ! 96: int ctrlId; ! 97: int def; ! 98: char str[25]; ! 99: char opt[5]; ! 100: } DlgCtrls; ! 101: ! 102: DlgCtrls dlgctrls[] = { ! 103: { 415, FALSE, "DOS EXE", "..." }, ! 104: { 415, FALSE, "Windows 3.0 EXE", "..." }, ! 105: { 415, FALSE, "Windows 3.0 DLL", "..." }, ! 106: { 415, FALSE, "Windows 3.1 EXE", "..." }, ! 107: { 415, FALSE, "Windows 3.1 DLL", "..." }, ! 108: { 415, TRUE, "Windows NT EXE", "..." }, ! 109: { 415, FALSE, "Windows NT DLL", "..." }, ! 110: { 415, FALSE, "Windows NT Console App", "..." }, ! 111: ! 112: { 402, FALSE, "Small", "AS" }, ! 113: { 402, FALSE, "Medium", "AM" }, ! 114: { 402, FALSE, "Compact", "AC" }, ! 115: { 402, TRUE, "Large", "AL" }, ! 116: { 402, FALSE, "Huge", "AH" }, ! 117: { 402, FALSE, "Customize", "A?" }, ! 118: ! 119: { 404, FALSE, "8086", "G0" }, ! 120: { 404, FALSE, "80186", "G1" }, ! 121: { 404, TRUE, "80286", "G2" }, ! 122: { 404, FALSE, "80386", "G3" }, ! 123: { 404, FALSE, "80486", "G4" }, ! 124: ! 125: { 406, TRUE, "stdcall", "Gz" }, ! 126: { 406, FALSE, "Pascal", "Gc" }, ! 127: { 406, FALSE, "C", "Gd" }, ! 128: ! 129: { 408, FALSE, "Level 0", "W0" }, ! 130: { 408, FALSE, "Level 1", "W1" }, ! 131: { 408, FALSE, "Level 2", "W2" }, ! 132: { 408, TRUE, "Level 3", "W3" }, ! 133: { 408, FALSE, "Level 4", "W4" }, ! 134: ! 135: { 411, FALSE, "None", "" }, ! 136: { 411, FALSE, "Line Numbers Only", "Zd" }, ! 137: { 411, TRUE, "Full Information", "Zi" }, ! 138: ! 139: { 418, FALSE, "Ansi C", "Za" }, ! 140: { 418, TRUE, "MS Extensions", "Ze" }, ! 141: ! 142: { 413, FALSE, "None", "" }, ! 143: { 413, TRUE, "Protect Mode App", "GA" }, ! 144: { 413, FALSE, "Protect Mode DLL", "GD" }, ! 145: ! 146: { 0, 0} // End Of List ! 147: }; ! 148: ! 149: ! 150: BOOL APIENTRY CLDlgProc (HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam) ! 151: { ! 152: int wmId; ! 153: static char ***pargv; ! 154: static char **argv; ! 155: ! 156: int i, item, index, iCtrl, argc; ! 157: char *cmd; ! 158: char *cmdline; ! 159: ! 160: switch (msg) { ! 161: case WM_INITDIALOG: ! 162: // We need to initialize stuff in the dialog box... ! 163: ! 164: pargv = (char ***)lParam; ! 165: argv = *pargv; ! 166: CenterWindow (hdlg); ! 167: ! 168: iCtrl = i = 0; ! 169: while (dlgctrls[i].ctrlId) { ! 170: if (dlgctrls[i].ctrlId != iCtrl) { // Starting a new list ! 171: iCtrl = dlgctrls[i].ctrlId; ! 172: } ! 173: index = SendDlgItemMessage (hdlg, iCtrl, CB_ADDSTRING, 0, (DWORD)(LPSTR)dlgctrls[i].str); ! 174: SendDlgItemMessage (hdlg, iCtrl, CB_SETITEMDATA, index, i); ! 175: if (dlgctrls[i].def) { ! 176: SendDlgItemMessage (hdlg, dlgctrls[i].ctrlId, CB_SETCURSEL, index, 0); ! 177: } ! 178: i++; ! 179: } ! 180: return (TRUE); ! 181: ! 182: case WM_DESTROY: ! 183: break; ! 184: ! 185: case WM_COMMAND: ! 186: wmId = LOWORD(wParam); ! 187: switch (wmId) { ! 188: ! 189: case T_HELP: ! 190: DoHelp ("Contents"); ! 191: break; ! 192: ! 193: case IDOK: ! 194: cmd = cmdline = (char *)GlobalAlloc (GPTR, 128); ! 195: argv[0] = cmdline; ! 196: argc = 0; ! 197: ! 198: if (cmdline) { ! 199: iCtrl = i = 0; ! 200: while (dlgctrls[i].ctrlId) { ! 201: if (dlgctrls[i].ctrlId != iCtrl) { ! 202: iCtrl = dlgctrls[i].ctrlId; ! 203: index = SendDlgItemMessage(hdlg, iCtrl, CB_GETCURSEL, 0, 0); ! 204: if (index) { ! 205: item = SendDlgItemMessage (hdlg, iCtrl, CB_GETITEMDATA, index, 0); ! 206: wsprintf ((LPSTR)cmd, "-%s", (LPSTR)dlgctrls[item].opt); ! 207: cmd += strlen(cmd); ! 208: cmd[0] = 0; ! 209: argv[++argc] = ++cmd; ! 210: } ! 211: } ! 212: i++; ! 213: } ! 214: ! 215: } // if (cmdline)... ! 216: ! 217: EndDialog(hdlg, argc); ! 218: return (TRUE); ! 219: ! 220: case IDCANCEL: ! 221: EndDialog(hdlg, 0); ! 222: return (TRUE); ! 223: } ! 224: break; ! 225: } ! 226: return (FALSE); ! 227: ! 228: lParam; // unreferenced formal parameter ! 229: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.