|
| 1 | +#include <windows.h> |
| 2 | +#include <string.h> |
| 3 | +#include "mainwnd.h" |
| 4 | +#include "aboutdlg.h" |
| 5 | +#include "resource.h" |
| 6 | +#include "globals.h" |
| 7 | + |
| 8 | +/* Main window class and title */ |
| 9 | +static char MainWndClass[] = "Windows 1 Example Application"; |
| 10 | + |
| 11 | +/* Window procedure for our main window */ |
| 12 | +LONG FAR PASCAL MainWndProc(hWnd, msg, wParam, lParam) |
| 13 | +HWND hWnd; |
| 14 | +unsigned msg; |
| 15 | +WORD wParam; |
| 16 | +LONG lParam; |
| 17 | +{ |
| 18 | + switch (msg) |
| 19 | + { |
| 20 | + case WM_COMMAND: |
| 21 | + { |
| 22 | + WORD id = wParam; |
| 23 | + |
| 24 | + switch (id) |
| 25 | + { |
| 26 | + case ID_HELP_ABOUT: |
| 27 | + { |
| 28 | + ShowAboutDialog(hWnd); |
| 29 | + break; |
| 30 | + } |
| 31 | + |
| 32 | + case ID_FILE_EXIT: |
| 33 | + { |
| 34 | + DestroyWindow(hWnd); |
| 35 | + break; |
| 36 | + } |
| 37 | + |
| 38 | + default: |
| 39 | + return DefWindowProc(hWnd, msg, wParam, lParam); |
| 40 | + } |
| 41 | + |
| 42 | + break; |
| 43 | + } |
| 44 | + |
| 45 | + case WM_GETMINMAXINFO: |
| 46 | + { |
| 47 | + /* Prevent our window from being sized too small */ |
| 48 | + MINMAXINFO *minMax = (MINMAXINFO*) lParam; |
| 49 | + minMax->ptMinTrackSize.x = 220; |
| 50 | + minMax->ptMinTrackSize.y = 110; |
| 51 | + |
| 52 | + break; |
| 53 | + } |
| 54 | + |
| 55 | + /* Item from system menu has been invoked */ |
| 56 | + case WM_SYSCOMMAND: |
| 57 | + { |
| 58 | + WORD id = wParam; |
| 59 | + |
| 60 | + switch (id) |
| 61 | + { |
| 62 | + case ID_HELP_ABOUT: |
| 63 | + { |
| 64 | + ShowAboutDialog(hWnd); |
| 65 | + break; |
| 66 | + } |
| 67 | + |
| 68 | + default: |
| 69 | + return DefWindowProc(hWnd, msg, wParam, lParam); |
| 70 | + } |
| 71 | + |
| 72 | + break; |
| 73 | + } |
| 74 | + |
| 75 | + case WM_DESTROY: |
| 76 | + { |
| 77 | + PostQuitMessage(0); |
| 78 | + break; |
| 79 | + } |
| 80 | + |
| 81 | + default: |
| 82 | + return DefWindowProc(hWnd, msg, wParam, lParam); |
| 83 | + } |
| 84 | + |
| 85 | + return 0; |
| 86 | +} |
| 87 | + |
| 88 | +/* Register a class for our main window */ |
| 89 | +BOOL RegisterMainWindowClass() |
| 90 | +{ |
| 91 | + WNDCLASS wc; |
| 92 | + |
| 93 | + memset(&wc, 0, sizeof(wc)); |
| 94 | + |
| 95 | + wc.lpfnWndProc = MainWndProc; |
| 96 | + wc.hInstance = g_hInstance; |
| 97 | + wc.hIcon = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_APPICON)); |
| 98 | + wc.hCursor = LoadCursor(NULL, IDC_ARROW); |
| 99 | + wc.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1); |
| 100 | + wc.lpszMenuName = MAKEINTRESOURCE(IDR_MAINMENU); |
| 101 | + wc.lpszClassName = MainWndClass; |
| 102 | + |
| 103 | + return (RegisterClass(&wc)) ? TRUE : FALSE; |
| 104 | +} |
| 105 | + |
| 106 | +/* Create an instance of our main window */ |
| 107 | +HWND CreateMainWindow() |
| 108 | +{ |
| 109 | + HWND hWnd; |
| 110 | + HMENU hSysMenu; |
| 111 | + |
| 112 | + hWnd = CreateWindow(MainWndClass, MainWndClass, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, |
| 113 | + 320, 200, NULL, NULL, g_hInstance, NULL); |
| 114 | + |
| 115 | + if (hWnd) |
| 116 | + { |
| 117 | + /* Add "about" to the system menu. */ |
| 118 | + hSysMenu = GetSystemMenu(hWnd, FALSE); |
| 119 | + ChangeMenu(hSysMenu, 0, NULL, 999, MF_APPEND | MF_SEPARATOR); |
| 120 | + ChangeMenu(hSysMenu, 0, "About", ID_HELP_ABOUT, MF_APPEND | MF_STRING); |
| 121 | + } |
| 122 | + |
| 123 | + return hWnd; |
| 124 | +} |
0 commit comments