CmdShow)
112 {
113 HWND hWnd;
114
115 hInst = hInstance; // Store instance handle in our global variable
116
117 hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
118 CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
119
120 if (!hWnd)
121 {
122 return FALSE;
123 }
124
125 ShowWindow(hWnd, nCmdShow);
126 UpdateWindow(hWnd);
127
128 return TRUE;
129 }
130
131 //
132 // FUNCTION: WndProc(HWND, UINT,
WPARAM, LPARAM)
133 //
134 // PURPOSE: Processes messages for the main window.
135 //
136 // WM_COMMAND - process the application menu
137 // WM_PAINT - Paint the main window
138 // WM_DESTROY - post a quit message and return
139 //
140 //
141 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
142 {
143 int wmId, wmEvent;
144 PAINTSTRUCT ps;
145 HDC hdc;
146
147 HRGN hTmp;
148 BOOL bChanged;
149 LRESULT result;
150
151 switch (message)
152 {
153 case WM_COMMAND:
154 wmId = LOWORD(wParam);
155 wmEvent = HIWORD(wParam);
156 // Parse the menu selections:
157 switch (wmId)
158 {
159 case IDM_ABOUT:
160 DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
161 break;
162 case IDM_EXIT:
163 DestroyWindow(hWnd);
164 break;
165 default:
166 return DefWindowProc(hWnd, message, wParam, lParam);
167 }
168 break;
169 case WM_PAINT:
170 hdc = BeginPaint(hWnd, &ps);
171 // TODO: Add any drawing code here...
172 EndPaint(hWnd, &ps);
173 break;
174
175 case WM_NCPAINT:
176 hdc = GetWindowDC(hWnd);
177 PaintNC(hWnd, hdc);
178 ReleaseDC(hWnd, hdc);
179 break;
180
181 case WM_NCCALCSIZE:
182 ((LPNCCALCSIZE_PARAMS)lParam)->rgrc[0].left += 3;
183 ((LPNCCALCSIZE_PARAMS)lParam)->rgrc[0].top += 55;
184 ((LPNCCALCSIZE_PARAMS)lParam)->rgrc[0].right -= 4;
185 ((LPNCCALCSIZE_PARAMS)lParam)->rgrc[0].bottom -= 4;
186 break;
187
188 case WM_NCACTIVATE:
189 PostMessage(hWnd, WM_NCPAINT, 1, 0);
190 break;
191
192 case WM_WINDOWPOSCHANGING:
193 bChanged = FALSE;
194
195 if (!gChangeSizeCalled) {
196 bChanged = (((LPWINDOWPOS)lParam)->flags & SWP_FRAMECHANGED);
197
198 if ((((LPWINDOWPOS)lParam)->flags & SWP_NOMOVE) == 0){
199 gWindowSize.left = ((LPWINDOWPOS)lParam)->x;
200 gWindowSize.top = ((LPWINDOWPOS)lParam)->y;
201 }
202 if ((((LPWINDOWPOS)lParam)->flags & SWP_NOSIZE) == 0){
203 bChanged = bChanged || (((LPWINDOWPOS)lParam)->cx != gWindowSize.right) || (((LPWINDOWPOS)lParam)->cy != gWindowSize.bottom);
204 gWindowSize.right = ((LPWINDOWPOS)lParam)->cx;
205 gWindowSize.bottom = ((LPWINDOWPOS)lParam)->cy;
206 }
207
208 bChanged = bChanged && ((gWindowSize.right * gWindowSize.bottom) != 0);
209
210 if (bChanged)
211 {
212 gChangeSizeCalled = TRUE;
213 __try {
214 hTmp = gRegion;
215 gRegion = CreateRoundRectRgn(0, 0, gWindowSize.rig