fixed resource leak (DestroyMenu before destroying main window)
[reactos.git] / rosapps / devutils / zoomin / main.c
1 /*
2 * ReactOS zoomin
3 *
4 * main.c
5 *
6 * Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
22
23 #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
24 #include <windows.h>
25 #include <tchar.h>
26 #include <stdlib.h>
27 #include <stdio.h>
28
29 #include "main.h"
30 #include "framewnd.h"
31
32
33 ////////////////////////////////////////////////////////////////////////////////
34 // Global Variables:
35 //
36
37 HWND hFrameWnd;
38 HMENU hMenuFrame;
39
40 TCHAR szTitle[MAX_LOADSTRING];
41
42
43 ////////////////////////////////////////////////////////////////////////////////
44 //
45 // FUNCTION: InitInstance(HANDLE, int)
46 //
47 // PURPOSE: creates main window
48 //
49
50 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
51 {
52 WNDCLASSEX wcFrame = {
53 sizeof(WNDCLASSEX),
54 CS_HREDRAW | CS_VREDRAW/*style*/,
55 FrameWndProc,
56 0/*cbClsExtra*/,
57 0/*cbWndExtra*/,
58 hInstance,
59 LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ZOOMIN)),
60 LoadCursor(0, IDC_ARROW),
61 0,//(HBRUSH)(COLOR_BTNFACE+1),
62 0/*lpszMenuName*/,
63 WNDCLASS_ZOOMIN,
64 (HICON)LoadImage(hInstance, MAKEINTRESOURCE(IDI_ZOOMIN), IMAGE_ICON,
65 GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED)
66 };
67 ATOM hFrameWndClass = RegisterClassEx(&wcFrame); // register frame window class
68
69 hMenuFrame = LoadMenu(hInstance, MAKEINTRESOURCE(IDR_ZOOMIN_MENU));
70
71 hFrameWnd = CreateWindowEx(0, (LPCTSTR)UlongToPtr(hFrameWndClass), szTitle,
72 WS_OVERLAPPEDWINDOW | WS_EX_CLIENTEDGE | WS_VSCROLL,
73 CW_USEDEFAULT, CW_USEDEFAULT, 250, 250,
74 NULL, hMenuFrame, hInstance, NULL/*lpParam*/);
75
76 if (!hFrameWnd) {
77 return FALSE;
78 }
79
80 ShowWindow(hFrameWnd, nCmdShow);
81 UpdateWindow(hFrameWnd);
82
83 return TRUE;
84 }
85
86 ////////////////////////////////////////////////////////////////////////////////
87
88 void ExitInstance(void)
89 {
90 DestroyMenu(hMenuFrame);
91 }
92
93 int APIENTRY WinMain(HINSTANCE hInstance,
94 HINSTANCE hPrevInstance,
95 LPSTR lpCmdLine,
96 int nCmdShow)
97 {
98 MSG msg;
99 HACCEL hAccel;
100
101 // Initialize global strings
102 LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
103
104 // Perform application initialization:
105 if (!InitInstance(hInstance, nCmdShow)) {
106 return FALSE;
107 }
108
109 hAccel = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDR_ZOOMIN));
110
111 // Main message loop:
112 while (GetMessage(&msg, (HWND)NULL, 0, 0)) {
113 if (!TranslateAccelerator(msg.hwnd, hAccel, &msg)) {
114 TranslateMessage(&msg);
115 DispatchMessage(&msg);
116 }
117 }
118 return msg.wParam;
119 }