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