GUI.C
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:7k
源码类别:
Windows编程
开发平台:
Visual C++
- /******************************************************************************
- * This is a part of the Microsoft Source Code Samples.
- * Copyright (C) 1993-1997 Microsoft Corporation.
- * All rights reserved.
- * This source code is only intended as a supplement to
- * Microsoft Development Tools and/or WinHelp documentation.
- * See these sources for detailed information regarding the
- * Microsoft samples programs.
- ******************************************************************************/
- // GUI.C
- // ================================================================
- // This module contains all of the functions that interface to the
- // 'graphical' part of this program. This currently only relates to
- // the code that brings up the dialog box, and calls the WinHelp
- // engine.
- #include <stdio.h>
- #include <string.h>
- #include <ctype.h>
- #include <windows.h>
- #include "ConGUI.h"
- int DoHelp (char *szHelpTopic);
- int GetDialogArgs (char ***pargv);
- BOOL CenterWindow (HWND hwnd);
- BOOL APIENTRY CLDlgProc (HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam);
- // Use WINHELP to bring up the applicaiton help file
- int DoHelp (char *szHelpTopic)
- {
- WinHelp (GetFocus(), "ConGUI.HLP", HELP_KEY, (DWORD)(LPSTR)szHelpTopic);
- return TRUE;
- }
- // Bring up the dialog box, and pass back a 'command line' as was
- // specified by the user
- int GetDialogArgs (char ***pargv)
- {
- int ret;
- HANDLE hinst;
- HWND hwnd;
- char szFile[80];
- hinst = GetModuleHandle (NULL);
- hwnd = GetFocus();
- ret = DialogBoxParam (hinst, "CL", NULL, CLDlgProc, (LPARAM)pargv);
- if (-1 == ret) {
- ret = GetLastError();
- printf ("Unable to create dialog: %dn", ret);
- GetModuleFileName (hinst, szFile, sizeof(szFile));
- printf ("hinst = %dn", hinst);
- printf ("hwnd = %dn", hwnd);
- printf ("File = %sn", szFile);
- return FALSE;
- }
- return ret;
- }
- // A quick little routine that will center a window on the screen.
- // Handy for dialog boxes
- BOOL CenterWindow (HWND hwnd)
- {
- RECT rect;
- int w, h;
- int wScreen, hScreen, xNew, yNew;
- HDC hdc;
- GetWindowRect (hwnd, &rect);
- w = rect.right - rect.left;
- h = rect.bottom - rect.top;
- hdc = GetDC (hwnd);
- wScreen = GetDeviceCaps (hdc, HORZRES);
- hScreen = GetDeviceCaps (hdc, VERTRES);
- ReleaseDC (hwnd, hdc);
- xNew = wScreen/2 - w/2;
- yNew = hScreen/2 - h/2;
- return SetWindowPos (hwnd, NULL, xNew, yNew, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
- }
- // Create a data structure that will hold the strings for the combo boxes
- // we have in our dialog. This just illustrates 'a' way to do this, not
- // necessarily the best.
- typedef struct tagDlgCtrls {
- int ctrlId;
- int def;
- char str[25];
- char opt[5];
- } DlgCtrls;
- DlgCtrls dlgctrls[] = {
- { 415, FALSE, "DOS EXE", "..." },
- { 415, FALSE, "Windows 3.0 EXE", "..." },
- { 415, FALSE, "Windows 3.0 DLL", "..." },
- { 415, FALSE, "Windows 3.1 EXE", "..." },
- { 415, FALSE, "Windows 3.1 DLL", "..." },
- { 415, TRUE, "Windows NT EXE", "..." },
- { 415, FALSE, "Windows NT DLL", "..." },
- { 415, FALSE, "Windows NT Console App", "..." },
- { 402, FALSE, "Small", "AS" },
- { 402, FALSE, "Medium", "AM" },
- { 402, FALSE, "Compact", "AC" },
- { 402, TRUE, "Large", "AL" },
- { 402, FALSE, "Huge", "AH" },
- { 402, FALSE, "Customize", "A?" },
- { 404, FALSE, "8086", "G0" },
- { 404, FALSE, "80186", "G1" },
- { 404, TRUE, "80286", "G2" },
- { 404, FALSE, "80386", "G3" },
- { 404, FALSE, "80486", "G4" },
- { 406, TRUE, "stdcall", "Gz" },
- { 406, FALSE, "Pascal", "Gc" },
- { 406, FALSE, "C", "Gd" },
- { 408, FALSE, "Level 0", "W0" },
- { 408, FALSE, "Level 1", "W1" },
- { 408, FALSE, "Level 2", "W2" },
- { 408, TRUE, "Level 3", "W3" },
- { 408, FALSE, "Level 4", "W4" },
- { 411, FALSE, "None", "" },
- { 411, FALSE, "Line Numbers Only", "Zd" },
- { 411, TRUE, "Full Information", "Zi" },
- { 418, FALSE, "Ansi C", "Za" },
- { 418, TRUE, "MS Extensions", "Ze" },
- { 413, FALSE, "None", "" },
- { 413, TRUE, "Protect Mode App", "GA" },
- { 413, FALSE, "Protect Mode DLL", "GD" },
- { 0, 0} // End Of List
- };
- BOOL APIENTRY CLDlgProc (HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)
- {
- int wmId;
- static char ***pargv;
- static char **argv;
- int i, item, index, iCtrl, argc;
- char *cmd;
- char *cmdline;
- switch (msg) {
- case WM_INITDIALOG:
- // We need to initialize stuff in the dialog box...
- pargv = (char ***)lParam;
- argv = *pargv;
- CenterWindow (hdlg);
- iCtrl = i = 0;
- while (dlgctrls[i].ctrlId) {
- if (dlgctrls[i].ctrlId != iCtrl) { // Starting a new list
- iCtrl = dlgctrls[i].ctrlId;
- }
- index = SendDlgItemMessage (hdlg, iCtrl, CB_ADDSTRING, 0, (DWORD)(LPSTR)dlgctrls[i].str);
- SendDlgItemMessage (hdlg, iCtrl, CB_SETITEMDATA, index, i);
- if (dlgctrls[i].def) {
- SendDlgItemMessage (hdlg, dlgctrls[i].ctrlId, CB_SETCURSEL, index, 0);
- }
- i++;
- }
- return (TRUE);
- case WM_DESTROY:
- break;
- case WM_COMMAND:
- wmId = LOWORD(wParam);
- switch (wmId) {
- case T_HELP:
- DoHelp ("Contents");
- break;
- case IDOK:
- cmd = cmdline = (char *)GlobalAlloc (GPTR, 128);
- argv[0] = cmdline;
- argc = 0;
- if (cmdline) {
- iCtrl = i = 0;
- while (dlgctrls[i].ctrlId) {
- if (dlgctrls[i].ctrlId != iCtrl) {
- iCtrl = dlgctrls[i].ctrlId;
- index = SendDlgItemMessage(hdlg, iCtrl, CB_GETCURSEL, 0, 0);
- if (index) {
- item = SendDlgItemMessage (hdlg, iCtrl, CB_GETITEMDATA, index, 0);
- wsprintf ((LPSTR)cmd, "-%s", (LPSTR)dlgctrls[item].opt);
- cmd += strlen(cmd);
- cmd[0] = 0;
- argv[++argc] = ++cmd;
- }
- }
- i++;
- }
- } // if (cmdline)...
- EndDialog(hdlg, argc);
- return (TRUE);
- case IDCANCEL:
- EndDialog(hdlg, 0);
- return (TRUE);
- }
- break;
- }
- return (FALSE);
- lParam; // unreferenced formal parameter
- }