]> git.sesse.net Git - casparcg/blob - WTL80/include/atlcrack.h
2.0.2: INFO TEMPLATE works on both compressed and uncompressed templates.
[casparcg] / WTL80 / include / atlcrack.h
1 // Windows Template Library - WTL version 8.0\r
2 // Copyright (C) Microsoft Corporation. All rights reserved.\r
3 //\r
4 // This file is a part of the Windows Template Library.\r
5 // The use and distribution terms for this software are covered by the\r
6 // Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)\r
7 // which can be found in the file CPL.TXT at the root of this distribution.\r
8 // By using this software in any fashion, you are agreeing to be bound by\r
9 // the terms of this license. You must not remove this notice, or\r
10 // any other, from this software.\r
11 \r
12 #ifndef __ATLCRACK_H__\r
13 #define __ATLCRACK_H__\r
14 \r
15 #pragma once\r
16 \r
17 \r
18 ///////////////////////////////////////////////////////////////////////////////\r
19 // Message map macro for cracked handlers\r
20 \r
21 // Note about message maps with cracked handlers:\r
22 // For ATL 3.0, a message map using cracked handlers MUST use BEGIN_MSG_MAP_EX.\r
23 // For ATL 7.0 or higher, you can use BEGIN_MSG_MAP for CWindowImpl/CDialogImpl derived classes,\r
24 // but must use BEGIN_MSG_MAP_EX for classes that don't derive from CWindowImpl/CDialogImpl.\r
25 \r
26 #define BEGIN_MSG_MAP_EX(theClass) \\r
27 public: \\r
28         BOOL m_bMsgHandled; \\r
29         /* "handled" management for cracked handlers */ \\r
30         BOOL IsMsgHandled() const \\r
31         { \\r
32                 return m_bMsgHandled; \\r
33         } \\r
34         void SetMsgHandled(BOOL bHandled) \\r
35         { \\r
36                 m_bMsgHandled = bHandled; \\r
37         } \\r
38         BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lResult, DWORD dwMsgMapID = 0) \\r
39         { \\r
40                 BOOL bOldMsgHandled = m_bMsgHandled; \\r
41                 BOOL bRet = _ProcessWindowMessage(hWnd, uMsg, wParam, lParam, lResult, dwMsgMapID); \\r
42                 m_bMsgHandled = bOldMsgHandled; \\r
43                 return bRet; \\r
44         } \\r
45         BOOL _ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lResult, DWORD dwMsgMapID) \\r
46         { \\r
47                 BOOL bHandled = TRUE; \\r
48                 hWnd; \\r
49                 uMsg; \\r
50                 wParam; \\r
51                 lParam; \\r
52                 lResult; \\r
53                 bHandled; \\r
54                 switch(dwMsgMapID) \\r
55                 { \\r
56                 case 0:\r
57 \r
58 \r
59 ///////////////////////////////////////////////////////////////////////////////\r
60 // Standard Windows message macros\r
61 \r
62 // int OnCreate(LPCREATESTRUCT lpCreateStruct)\r
63 #define MSG_WM_CREATE(func) \\r
64         if (uMsg == WM_CREATE) \\r
65         { \\r
66                 SetMsgHandled(TRUE); \\r
67                 lResult = (LRESULT)func((LPCREATESTRUCT)lParam); \\r
68                 if(IsMsgHandled()) \\r
69                         return TRUE; \\r
70         }\r
71 \r
72 // BOOL OnInitDialog(CWindow wndFocus, LPARAM lInitParam)\r
73 #define MSG_WM_INITDIALOG(func) \\r
74         if (uMsg == WM_INITDIALOG) \\r
75         { \\r
76                 SetMsgHandled(TRUE); \\r
77                 lResult = (LRESULT)func((HWND)wParam, lParam); \\r
78                 if(IsMsgHandled()) \\r
79                         return TRUE; \\r
80         }\r
81 \r
82 // BOOL OnCopyData(CWindow wnd, PCOPYDATASTRUCT pCopyDataStruct)\r
83 #define MSG_WM_COPYDATA(func) \\r
84         if (uMsg == WM_COPYDATA) \\r
85         { \\r
86                 SetMsgHandled(TRUE); \\r
87                 lResult = (LRESULT)func((HWND)wParam, (PCOPYDATASTRUCT)lParam); \\r
88                 if(IsMsgHandled()) \\r
89                         return TRUE; \\r
90         }\r
91 \r
92 // void OnDestroy()\r
93 #define MSG_WM_DESTROY(func) \\r
94         if (uMsg == WM_DESTROY) \\r
95         { \\r
96                 SetMsgHandled(TRUE); \\r
97                 func(); \\r
98                 lResult = 0; \\r
99                 if(IsMsgHandled()) \\r
100                         return TRUE; \\r
101         }\r
102 \r
103 // void OnMove(CPoint ptPos)\r
104 #define MSG_WM_MOVE(func) \\r
105         if (uMsg == WM_MOVE) \\r
106         { \\r
107                 SetMsgHandled(TRUE); \\r
108                 func(_WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
109                 lResult = 0; \\r
110                 if(IsMsgHandled()) \\r
111                         return TRUE; \\r
112         }\r
113 \r
114 // void OnSize(UINT nType, CSize size)\r
115 #define MSG_WM_SIZE(func) \\r
116         if (uMsg == WM_SIZE) \\r
117         { \\r
118                 SetMsgHandled(TRUE); \\r
119                 func((UINT)wParam, _WTYPES_NS::CSize(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
120                 lResult = 0; \\r
121                 if(IsMsgHandled()) \\r
122                         return TRUE; \\r
123         }\r
124 \r
125 // void OnActivate(UINT nState, BOOL bMinimized, CWindow wndOther)\r
126 #define MSG_WM_ACTIVATE(func) \\r
127         if (uMsg == WM_ACTIVATE) \\r
128         { \\r
129                 SetMsgHandled(TRUE); \\r
130                 func((UINT)LOWORD(wParam), (BOOL)HIWORD(wParam), (HWND)lParam); \\r
131                 lResult = 0; \\r
132                 if(IsMsgHandled()) \\r
133                         return TRUE; \\r
134         }\r
135 \r
136 // void OnSetFocus(CWindow wndOld)\r
137 #define MSG_WM_SETFOCUS(func) \\r
138         if (uMsg == WM_SETFOCUS) \\r
139         { \\r
140                 SetMsgHandled(TRUE); \\r
141                 func((HWND)wParam); \\r
142                 lResult = 0; \\r
143                 if(IsMsgHandled()) \\r
144                         return TRUE; \\r
145         }\r
146 \r
147 // void OnKillFocus(CWindow wndFocus)\r
148 #define MSG_WM_KILLFOCUS(func) \\r
149         if (uMsg == WM_KILLFOCUS) \\r
150         { \\r
151                 SetMsgHandled(TRUE); \\r
152                 func((HWND)wParam); \\r
153                 lResult = 0; \\r
154                 if(IsMsgHandled()) \\r
155                         return TRUE; \\r
156         }\r
157 \r
158 // void OnEnable(BOOL bEnable)\r
159 #define MSG_WM_ENABLE(func) \\r
160         if (uMsg == WM_ENABLE) \\r
161         { \\r
162                 SetMsgHandled(TRUE); \\r
163                 func((BOOL)wParam); \\r
164                 lResult = 0; \\r
165                 if(IsMsgHandled()) \\r
166                         return TRUE; \\r
167         }\r
168 \r
169 // void OnPaint(CDCHandle dc)\r
170 #define MSG_WM_PAINT(func) \\r
171         if (uMsg == WM_PAINT) \\r
172         { \\r
173                 SetMsgHandled(TRUE); \\r
174                 func((HDC)wParam); \\r
175                 lResult = 0; \\r
176                 if(IsMsgHandled()) \\r
177                         return TRUE; \\r
178         }\r
179 \r
180 // void OnClose()\r
181 #define MSG_WM_CLOSE(func) \\r
182         if (uMsg == WM_CLOSE) \\r
183         { \\r
184                 SetMsgHandled(TRUE); \\r
185                 func(); \\r
186                 lResult = 0; \\r
187                 if(IsMsgHandled()) \\r
188                         return TRUE; \\r
189         }\r
190 \r
191 // BOOL OnQueryEndSession(UINT nSource, UINT uLogOff)\r
192 #define MSG_WM_QUERYENDSESSION(func) \\r
193         if (uMsg == WM_QUERYENDSESSION) \\r
194         { \\r
195                 SetMsgHandled(TRUE); \\r
196                 lResult = (LRESULT)func((UINT)wParam, (UINT)lParam); \\r
197                 if(IsMsgHandled()) \\r
198                         return TRUE; \\r
199         }\r
200 \r
201 // BOOL OnQueryOpen()\r
202 #define MSG_WM_QUERYOPEN(func) \\r
203         if (uMsg == WM_QUERYOPEN) \\r
204         { \\r
205                 SetMsgHandled(TRUE); \\r
206                 lResult = (LRESULT)func(); \\r
207                 if(IsMsgHandled()) \\r
208                         return TRUE; \\r
209         }\r
210 \r
211 // BOOL OnEraseBkgnd(CDCHandle dc)\r
212 #define MSG_WM_ERASEBKGND(func) \\r
213         if (uMsg == WM_ERASEBKGND) \\r
214         { \\r
215                 SetMsgHandled(TRUE); \\r
216                 lResult = (LRESULT)func((HDC)wParam); \\r
217                 if(IsMsgHandled()) \\r
218                         return TRUE; \\r
219         }\r
220 \r
221 // void OnSysColorChange()\r
222 #define MSG_WM_SYSCOLORCHANGE(func) \\r
223         if (uMsg == WM_SYSCOLORCHANGE) \\r
224         { \\r
225                 SetMsgHandled(TRUE); \\r
226                 func(); \\r
227                 lResult = 0; \\r
228                 if(IsMsgHandled()) \\r
229                         return TRUE; \\r
230         }\r
231 \r
232 // void OnEndSession(BOOL bEnding, UINT uLogOff)\r
233 #define MSG_WM_ENDSESSION(func) \\r
234         if (uMsg == WM_ENDSESSION) \\r
235         { \\r
236                 SetMsgHandled(TRUE); \\r
237                 func((BOOL)wParam, (UINT)lParam); \\r
238                 lResult = 0; \\r
239                 if(IsMsgHandled()) \\r
240                         return TRUE; \\r
241         }\r
242 \r
243 // void OnShowWindow(BOOL bShow, UINT nStatus)\r
244 #define MSG_WM_SHOWWINDOW(func) \\r
245         if (uMsg == WM_SHOWWINDOW) \\r
246         { \\r
247                 SetMsgHandled(TRUE); \\r
248                 func((BOOL)wParam, (int)lParam); \\r
249                 lResult = 0; \\r
250                 if(IsMsgHandled()) \\r
251                         return TRUE; \\r
252         }\r
253 \r
254 // HBRUSH OnCtlColorEdit(CDCHandle dc, CEdit edit)\r
255 #define MSG_WM_CTLCOLOREDIT(func) \\r
256         if (uMsg == WM_CTLCOLOREDIT) \\r
257         { \\r
258                 SetMsgHandled(TRUE); \\r
259                 lResult = (LRESULT)func((HDC)wParam, (HWND)lParam); \\r
260                 if(IsMsgHandled()) \\r
261                         return TRUE; \\r
262         }\r
263 \r
264 // HBRUSH OnCtlColorListBox(CDCHandle dc, CListBox listBox)\r
265 #define MSG_WM_CTLCOLORLISTBOX(func) \\r
266         if (uMsg == WM_CTLCOLORLISTBOX) \\r
267         { \\r
268                 SetMsgHandled(TRUE); \\r
269                 lResult = (LRESULT)func((HDC)wParam, (HWND)lParam); \\r
270                 if(IsMsgHandled()) \\r
271                         return TRUE; \\r
272         }\r
273 \r
274 // HBRUSH OnCtlColorBtn(CDCHandle dc, CButton button)\r
275 #define MSG_WM_CTLCOLORBTN(func) \\r
276         if (uMsg == WM_CTLCOLORBTN) \\r
277         { \\r
278                 SetMsgHandled(TRUE); \\r
279                 lResult = (LRESULT)func((HDC)wParam, (HWND)lParam); \\r
280                 if(IsMsgHandled()) \\r
281                         return TRUE; \\r
282         }\r
283 \r
284 // HBRUSH OnCtlColorDlg(CDCHandle dc, CWindow wnd)\r
285 #define MSG_WM_CTLCOLORDLG(func) \\r
286         if (uMsg == WM_CTLCOLORDLG) \\r
287         { \\r
288                 SetMsgHandled(TRUE); \\r
289                 lResult = (LRESULT)func((HDC)wParam, (HWND)lParam); \\r
290                 if(IsMsgHandled()) \\r
291                         return TRUE; \\r
292         }\r
293 \r
294 // HBRUSH OnCtlColorScrollBar(CDCHandle dc, CScrollBar scrollBar)\r
295 #define MSG_WM_CTLCOLORSCROLLBAR(func) \\r
296         if (uMsg == WM_CTLCOLORSCROLLBAR) \\r
297         { \\r
298                 SetMsgHandled(TRUE); \\r
299                 lResult = (LRESULT)func((HDC)wParam, (HWND)lParam); \\r
300                 if(IsMsgHandled()) \\r
301                         return TRUE; \\r
302         }\r
303 \r
304 // HBRUSH OnCtlColorStatic(CDCHandle dc, CStatic wndStatic)\r
305 #define MSG_WM_CTLCOLORSTATIC(func) \\r
306         if (uMsg == WM_CTLCOLORSTATIC) \\r
307         { \\r
308                 SetMsgHandled(TRUE); \\r
309                 lResult = (LRESULT)func((HDC)wParam, (HWND)lParam); \\r
310                 if(IsMsgHandled()) \\r
311                         return TRUE; \\r
312         }\r
313 \r
314 // void OnSettingChange(UINT uFlags, LPCTSTR lpszSection)\r
315 #define MSG_WM_SETTINGCHANGE(func) \\r
316         if (uMsg == WM_SETTINGCHANGE) \\r
317         { \\r
318                 SetMsgHandled(TRUE); \\r
319                 func((UINT)wParam, (LPCTSTR)lParam); \\r
320                 lResult = 0; \\r
321                 if(IsMsgHandled()) \\r
322                         return TRUE; \\r
323         }\r
324 \r
325 // void OnDevModeChange(LPCTSTR lpDeviceName)\r
326 #define MSG_WM_DEVMODECHANGE(func) \\r
327         if (uMsg == WM_DEVMODECHANGE) \\r
328         { \\r
329                 SetMsgHandled(TRUE); \\r
330                 func((LPCTSTR)lParam); \\r
331                 lResult = 0; \\r
332                 if(IsMsgHandled()) \\r
333                         return TRUE; \\r
334         }\r
335 \r
336 // void OnActivateApp(BOOL bActive, DWORD dwThreadID)\r
337 #define MSG_WM_ACTIVATEAPP(func) \\r
338         if (uMsg == WM_ACTIVATEAPP) \\r
339         { \\r
340                 SetMsgHandled(TRUE); \\r
341                 func((BOOL)wParam, (DWORD)lParam); \\r
342                 lResult = 0; \\r
343                 if(IsMsgHandled()) \\r
344                         return TRUE; \\r
345         }\r
346 \r
347 // void OnFontChange()\r
348 #define MSG_WM_FONTCHANGE(func) \\r
349         if (uMsg == WM_FONTCHANGE) \\r
350         { \\r
351                 SetMsgHandled(TRUE); \\r
352                 func(); \\r
353                 lResult = 0; \\r
354                 if(IsMsgHandled()) \\r
355                         return TRUE; \\r
356         }\r
357 \r
358 // void OnTimeChange()\r
359 #define MSG_WM_TIMECHANGE(func) \\r
360         if (uMsg == WM_TIMECHANGE) \\r
361         { \\r
362                 SetMsgHandled(TRUE); \\r
363                 func(); \\r
364                 lResult = 0; \\r
365                 if(IsMsgHandled()) \\r
366                         return TRUE; \\r
367         }\r
368 \r
369 // void OnCancelMode()\r
370 #define MSG_WM_CANCELMODE(func) \\r
371         if (uMsg == WM_CANCELMODE) \\r
372         { \\r
373                 SetMsgHandled(TRUE); \\r
374                 func(); \\r
375                 lResult = 0; \\r
376                 if(IsMsgHandled()) \\r
377                         return TRUE; \\r
378         }\r
379 \r
380 // BOOL OnSetCursor(CWindow wnd, UINT nHitTest, UINT message)\r
381 #define MSG_WM_SETCURSOR(func) \\r
382         if (uMsg == WM_SETCURSOR) \\r
383         { \\r
384                 SetMsgHandled(TRUE); \\r
385                 lResult = (LRESULT)func((HWND)wParam, (UINT)LOWORD(lParam), (UINT)HIWORD(lParam)); \\r
386                 if(IsMsgHandled()) \\r
387                         return TRUE; \\r
388         }\r
389 \r
390 // int OnMouseActivate(CWindow wndTopLevel, UINT nHitTest, UINT message)\r
391 #define MSG_WM_MOUSEACTIVATE(func) \\r
392         if (uMsg == WM_MOUSEACTIVATE) \\r
393         { \\r
394                 SetMsgHandled(TRUE); \\r
395                 lResult = (LRESULT)func((HWND)wParam, (UINT)LOWORD(lParam), (UINT)HIWORD(lParam)); \\r
396                 if(IsMsgHandled()) \\r
397                         return TRUE; \\r
398         }\r
399 \r
400 // void OnChildActivate()\r
401 #define MSG_WM_CHILDACTIVATE(func) \\r
402         if (uMsg == WM_CHILDACTIVATE) \\r
403         { \\r
404                 SetMsgHandled(TRUE); \\r
405                 func(); \\r
406                 lResult = 0; \\r
407                 if(IsMsgHandled()) \\r
408                         return TRUE; \\r
409         }\r
410 \r
411 // void OnGetMinMaxInfo(LPMINMAXINFO lpMMI)\r
412 #define MSG_WM_GETMINMAXINFO(func) \\r
413         if (uMsg == WM_GETMINMAXINFO) \\r
414         { \\r
415                 SetMsgHandled(TRUE); \\r
416                 func((LPMINMAXINFO)lParam); \\r
417                 lResult = 0; \\r
418                 if(IsMsgHandled()) \\r
419                         return TRUE; \\r
420         }\r
421 \r
422 // void OnIconEraseBkgnd(CDCHandle dc)\r
423 #define MSG_WM_ICONERASEBKGND(func) \\r
424         if (uMsg == WM_ICONERASEBKGND) \\r
425         { \\r
426                 SetMsgHandled(TRUE); \\r
427                 func((HDC)wParam); \\r
428                 lResult = 0; \\r
429                 if(IsMsgHandled()) \\r
430                         return TRUE; \\r
431         }\r
432 \r
433 // void OnSpoolerStatus(UINT nStatus, UINT nJobs)\r
434 #define MSG_WM_SPOOLERSTATUS(func) \\r
435         if (uMsg == WM_SPOOLERSTATUS) \\r
436         { \\r
437                 SetMsgHandled(TRUE); \\r
438                 func((UINT)wParam, (UINT)LOWORD(lParam)); \\r
439                 lResult = 0; \\r
440                 if(IsMsgHandled()) \\r
441                         return TRUE; \\r
442         }\r
443 \r
444 // void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)\r
445 #define MSG_WM_DRAWITEM(func) \\r
446         if (uMsg == WM_DRAWITEM) \\r
447         { \\r
448                 SetMsgHandled(TRUE); \\r
449                 func((UINT)wParam, (LPDRAWITEMSTRUCT)lParam); \\r
450                 lResult = TRUE; \\r
451                 if(IsMsgHandled()) \\r
452                         return TRUE; \\r
453         }\r
454 \r
455 // void OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)\r
456 #define MSG_WM_MEASUREITEM(func) \\r
457         if (uMsg == WM_MEASUREITEM) \\r
458         { \\r
459                 SetMsgHandled(TRUE); \\r
460                 func((UINT)wParam, (LPMEASUREITEMSTRUCT)lParam); \\r
461                 lResult = TRUE; \\r
462                 if(IsMsgHandled()) \\r
463                         return TRUE; \\r
464         }\r
465 \r
466 // void OnDeleteItem(int nIDCtl, LPDELETEITEMSTRUCT lpDeleteItemStruct)\r
467 #define MSG_WM_DELETEITEM(func) \\r
468         if (uMsg == WM_DELETEITEM) \\r
469         { \\r
470                 SetMsgHandled(TRUE); \\r
471                 func((UINT)wParam, (LPDELETEITEMSTRUCT)lParam); \\r
472                 lResult = TRUE; \\r
473                 if(IsMsgHandled()) \\r
474                         return TRUE; \\r
475         }\r
476 \r
477 //int OnCharToItem(UINT nChar, UINT nIndex, CListBox listBox)\r
478 #define MSG_WM_CHARTOITEM(func) \\r
479         if (uMsg == WM_CHARTOITEM) \\r
480         { \\r
481                 SetMsgHandled(TRUE); \\r
482                 lResult = (LRESULT)func((UINT)LOWORD(wParam), (UINT)HIWORD(wParam), (HWND)lParam); \\r
483                 if(IsMsgHandled()) \\r
484                         return TRUE; \\r
485         }\r
486 \r
487 // int OnVKeyToItem(UINT nKey, UINT nIndex, CListBox listBox)\r
488 #define MSG_WM_VKEYTOITEM(func) \\r
489         if (uMsg == WM_VKEYTOITEM) \\r
490         { \\r
491                 SetMsgHandled(TRUE); \\r
492                 lResult = (LRESULT)func((UINT)LOWORD(wParam), (UINT)HIWORD(wParam), (HWND)lParam); \\r
493                 if(IsMsgHandled()) \\r
494                         return TRUE; \\r
495         }\r
496 \r
497 // HCURSOR OnQueryDragIcon()\r
498 #define MSG_WM_QUERYDRAGICON(func) \\r
499         if (uMsg == WM_QUERYDRAGICON) \\r
500         { \\r
501                 SetMsgHandled(TRUE); \\r
502                 lResult = (LRESULT)func(); \\r
503                 if(IsMsgHandled()) \\r
504                         return TRUE; \\r
505         }\r
506 \r
507 // int OnCompareItem(int nIDCtl, LPCOMPAREITEMSTRUCT lpCompareItemStruct)\r
508 #define MSG_WM_COMPAREITEM(func) \\r
509         if (uMsg == WM_COMPAREITEM) \\r
510         { \\r
511                 SetMsgHandled(TRUE); \\r
512                 lResult = (LRESULT)func((UINT)wParam, (LPCOMPAREITEMSTRUCT)lParam); \\r
513                 if(IsMsgHandled()) \\r
514                         return TRUE; \\r
515         }\r
516 \r
517 // void OnCompacting(UINT nCpuTime)\r
518 #define MSG_WM_COMPACTING(func) \\r
519         if (uMsg == WM_COMPACTING) \\r
520         { \\r
521                 SetMsgHandled(TRUE); \\r
522                 func((UINT)wParam); \\r
523                 lResult = 0; \\r
524                 if(IsMsgHandled()) \\r
525                         return TRUE; \\r
526         }\r
527 \r
528 // BOOL OnNcCreate(LPCREATESTRUCT lpCreateStruct)\r
529 #define MSG_WM_NCCREATE(func) \\r
530         if (uMsg == WM_NCCREATE) \\r
531         { \\r
532                 SetMsgHandled(TRUE); \\r
533                 lResult = (LRESULT)func((LPCREATESTRUCT)lParam); \\r
534                 if(IsMsgHandled()) \\r
535                         return TRUE; \\r
536         }\r
537 \r
538 // void OnNcDestroy()\r
539 #define MSG_WM_NCDESTROY(func) \\r
540         if (uMsg == WM_NCDESTROY) \\r
541         { \\r
542                 SetMsgHandled(TRUE); \\r
543                 func(); \\r
544                 lResult = 0; \\r
545                 if(IsMsgHandled()) \\r
546                         return TRUE; \\r
547         }\r
548 \r
549 // LRESULT OnNcCalcSize(BOOL bCalcValidRects, LPARAM lParam)\r
550 #define MSG_WM_NCCALCSIZE(func) \\r
551         if (uMsg == WM_NCCALCSIZE) \\r
552         { \\r
553                 SetMsgHandled(TRUE); \\r
554                 lResult = func((BOOL)wParam, lParam); \\r
555                 if(IsMsgHandled()) \\r
556                         return TRUE; \\r
557         }\r
558 \r
559 // UINT OnNcHitTest(CPoint point)\r
560 #define MSG_WM_NCHITTEST(func) \\r
561         if (uMsg == WM_NCHITTEST) \\r
562         { \\r
563                 SetMsgHandled(TRUE); \\r
564                 lResult = (LRESULT)func(_WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
565                 if(IsMsgHandled()) \\r
566                         return TRUE; \\r
567         }\r
568 \r
569 // void OnNcPaint(CRgn rgn)\r
570 #define MSG_WM_NCPAINT(func) \\r
571         if (uMsg == WM_NCPAINT) \\r
572         { \\r
573                 SetMsgHandled(TRUE); \\r
574                 func((HRGN)wParam); \\r
575                 lResult = 0; \\r
576                 if(IsMsgHandled()) \\r
577                         return TRUE; \\r
578         }\r
579 \r
580 // BOOL OnNcActivate(BOOL bActive)\r
581 #define MSG_WM_NCACTIVATE(func) \\r
582         if (uMsg == WM_NCACTIVATE) \\r
583         { \\r
584                 SetMsgHandled(TRUE); \\r
585                 lResult = (LRESULT)func((BOOL)wParam); \\r
586                 if(IsMsgHandled()) \\r
587                         return TRUE; \\r
588         }\r
589 \r
590 // UINT OnGetDlgCode(LPMSG lpMsg)\r
591 #define MSG_WM_GETDLGCODE(func) \\r
592         if (uMsg == WM_GETDLGCODE) \\r
593         { \\r
594                 SetMsgHandled(TRUE); \\r
595                 lResult = (LRESULT)func((LPMSG)lParam); \\r
596                 if(IsMsgHandled()) \\r
597                         return TRUE; \\r
598         }\r
599 \r
600 // void OnNcMouseMove(UINT nHitTest, CPoint point)\r
601 #define MSG_WM_NCMOUSEMOVE(func) \\r
602         if (uMsg == WM_NCMOUSEMOVE) \\r
603         { \\r
604                 SetMsgHandled(TRUE); \\r
605                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
606                 lResult = 0; \\r
607                 if(IsMsgHandled()) \\r
608                         return TRUE; \\r
609         }\r
610 \r
611 // void OnNcLButtonDown(UINT nHitTest, CPoint point)\r
612 #define MSG_WM_NCLBUTTONDOWN(func) \\r
613         if (uMsg == WM_NCLBUTTONDOWN) \\r
614         { \\r
615                 SetMsgHandled(TRUE); \\r
616                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
617                 lResult = 0; \\r
618                 if(IsMsgHandled()) \\r
619                         return TRUE; \\r
620         }\r
621 \r
622 // void OnNcLButtonUp(UINT nHitTest, CPoint point)\r
623 #define MSG_WM_NCLBUTTONUP(func) \\r
624         if (uMsg == WM_NCLBUTTONUP) \\r
625         { \\r
626                 SetMsgHandled(TRUE); \\r
627                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
628                 lResult = 0; \\r
629                 if(IsMsgHandled()) \\r
630                         return TRUE; \\r
631         }\r
632 \r
633 // void OnNcLButtonDblClk(UINT nHitTest, CPoint point)\r
634 #define MSG_WM_NCLBUTTONDBLCLK(func) \\r
635         if (uMsg == WM_NCLBUTTONDBLCLK) \\r
636         { \\r
637                 SetMsgHandled(TRUE); \\r
638                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
639                 lResult = 0; \\r
640                 if(IsMsgHandled()) \\r
641                         return TRUE; \\r
642         }\r
643 \r
644 // void OnNcRButtonDown(UINT nHitTest, CPoint point)\r
645 #define MSG_WM_NCRBUTTONDOWN(func) \\r
646         if (uMsg == WM_NCRBUTTONDOWN) \\r
647         { \\r
648                 SetMsgHandled(TRUE); \\r
649                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
650                 lResult = 0; \\r
651                 if(IsMsgHandled()) \\r
652                         return TRUE; \\r
653         }\r
654 \r
655 // void OnNcRButtonUp(UINT nHitTest, CPoint point)\r
656 #define MSG_WM_NCRBUTTONUP(func) \\r
657         if (uMsg == WM_NCRBUTTONUP) \\r
658         { \\r
659                 SetMsgHandled(TRUE); \\r
660                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
661                 lResult = 0; \\r
662                 if(IsMsgHandled()) \\r
663                         return TRUE; \\r
664         }\r
665 \r
666 // void OnNcRButtonDblClk(UINT nHitTest, CPoint point)\r
667 #define MSG_WM_NCRBUTTONDBLCLK(func) \\r
668         if (uMsg == WM_NCRBUTTONDBLCLK) \\r
669         { \\r
670                 SetMsgHandled(TRUE); \\r
671                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
672                 lResult = 0; \\r
673                 if(IsMsgHandled()) \\r
674                         return TRUE; \\r
675         }\r
676 \r
677 // void OnNcMButtonDown(UINT nHitTest, CPoint point)\r
678 #define MSG_WM_NCMBUTTONDOWN(func) \\r
679         if (uMsg == WM_NCMBUTTONDOWN) \\r
680         { \\r
681                 SetMsgHandled(TRUE); \\r
682                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
683                 lResult = 0; \\r
684                 if(IsMsgHandled()) \\r
685                         return TRUE; \\r
686         }\r
687 \r
688 // void OnNcMButtonUp(UINT nHitTest, CPoint point)\r
689 #define MSG_WM_NCMBUTTONUP(func) \\r
690         if (uMsg == WM_NCMBUTTONUP) \\r
691         { \\r
692                 SetMsgHandled(TRUE); \\r
693                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
694                 lResult = 0; \\r
695                 if(IsMsgHandled()) \\r
696                         return TRUE; \\r
697         }\r
698 \r
699 // void OnNcMButtonDblClk(UINT nHitTest, CPoint point)\r
700 #define MSG_WM_NCMBUTTONDBLCLK(func) \\r
701         if (uMsg == WM_NCMBUTTONDBLCLK) \\r
702         { \\r
703                 SetMsgHandled(TRUE); \\r
704                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
705                 lResult = 0; \\r
706                 if(IsMsgHandled()) \\r
707                         return TRUE; \\r
708         }\r
709 \r
710 // void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)\r
711 #define MSG_WM_KEYDOWN(func) \\r
712         if (uMsg == WM_KEYDOWN) \\r
713         { \\r
714                 SetMsgHandled(TRUE); \\r
715                 func((TCHAR)wParam, (UINT)lParam & 0xFFFF, (UINT)((lParam & 0xFFFF0000) >> 16)); \\r
716                 lResult = 0; \\r
717                 if(IsMsgHandled()) \\r
718                         return TRUE; \\r
719         }\r
720 \r
721 // void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)\r
722 #define MSG_WM_KEYUP(func) \\r
723         if (uMsg == WM_KEYUP) \\r
724         { \\r
725                 SetMsgHandled(TRUE); \\r
726                 func((TCHAR)wParam, (UINT)lParam & 0xFFFF, (UINT)((lParam & 0xFFFF0000) >> 16)); \\r
727                 lResult = 0; \\r
728                 if(IsMsgHandled()) \\r
729                         return TRUE; \\r
730         }\r
731 \r
732 // void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)\r
733 #define MSG_WM_CHAR(func) \\r
734         if (uMsg == WM_CHAR) \\r
735         { \\r
736                 SetMsgHandled(TRUE); \\r
737                 func((TCHAR)wParam, (UINT)lParam & 0xFFFF, (UINT)((lParam & 0xFFFF0000) >> 16)); \\r
738                 lResult = 0; \\r
739                 if(IsMsgHandled()) \\r
740                         return TRUE; \\r
741         }\r
742 \r
743 // void OnDeadChar(UINT nChar, UINT nRepCnt, UINT nFlags)\r
744 #define MSG_WM_DEADCHAR(func) \\r
745         if (uMsg == WM_DEADCHAR) \\r
746         { \\r
747                 SetMsgHandled(TRUE); \\r
748                 func((TCHAR)wParam, (UINT)lParam & 0xFFFF, (UINT)((lParam & 0xFFFF0000) >> 16)); \\r
749                 lResult = 0; \\r
750                 if(IsMsgHandled()) \\r
751                         return TRUE; \\r
752         }\r
753 \r
754 // void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)\r
755 #define MSG_WM_SYSKEYDOWN(func) \\r
756         if (uMsg == WM_SYSKEYDOWN) \\r
757         { \\r
758                 SetMsgHandled(TRUE); \\r
759                 func((TCHAR)wParam, (UINT)lParam & 0xFFFF, (UINT)((lParam & 0xFFFF0000) >> 16)); \\r
760                 lResult = 0; \\r
761                 if(IsMsgHandled()) \\r
762                         return TRUE; \\r
763         }\r
764 \r
765 // void OnSysKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)\r
766 #define MSG_WM_SYSKEYUP(func) \\r
767         if (uMsg == WM_SYSKEYUP) \\r
768         { \\r
769                 SetMsgHandled(TRUE); \\r
770                 func((TCHAR)wParam, (UINT)lParam & 0xFFFF, (UINT)((lParam & 0xFFFF0000) >> 16)); \\r
771                 lResult = 0; \\r
772                 if(IsMsgHandled()) \\r
773                         return TRUE; \\r
774         }\r
775 \r
776 // void OnSysChar(UINT nChar, UINT nRepCnt, UINT nFlags)\r
777 #define MSG_WM_SYSCHAR(func) \\r
778         if (uMsg == WM_SYSCHAR) \\r
779         { \\r
780                 SetMsgHandled(TRUE); \\r
781                 func((TCHAR)wParam, (UINT)lParam & 0xFFFF, (UINT)((lParam & 0xFFFF0000) >> 16)); \\r
782                 lResult = 0; \\r
783                 if(IsMsgHandled()) \\r
784                         return TRUE; \\r
785         }\r
786 \r
787 // void OnSysDeadChar(UINT nChar, UINT nRepCnt, UINT nFlags)\r
788 #define MSG_WM_SYSDEADCHAR(func) \\r
789         if (uMsg == WM_SYSDEADCHAR) \\r
790         { \\r
791                 SetMsgHandled(TRUE); \\r
792                 func((TCHAR)wParam, (UINT)lParam & 0xFFFF, (UINT)((lParam & 0xFFFF0000) >> 16)); \\r
793                 lResult = 0; \\r
794                 if(IsMsgHandled()) \\r
795                         return TRUE; \\r
796         }\r
797 \r
798 // void OnSysCommand(UINT nID, LPARAM lParam)\r
799 #define MSG_WM_SYSCOMMAND(func) \\r
800         if (uMsg == WM_SYSCOMMAND) \\r
801         { \\r
802                 SetMsgHandled(TRUE); \\r
803                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
804                 lResult = 0; \\r
805                 if(IsMsgHandled()) \\r
806                         return TRUE; \\r
807         }\r
808 \r
809 // void OnTCard(UINT idAction, DWORD dwActionData)\r
810 #define MSG_WM_TCARD(func) \\r
811         if (uMsg == WM_TCARD) \\r
812         { \\r
813                 SetMsgHandled(TRUE); \\r
814                 func((UINT)wParam, (DWORD)lParam); \\r
815                 lResult = 0; \\r
816                 if(IsMsgHandled()) \\r
817                         return TRUE; \\r
818         }\r
819 \r
820 // void OnTimer(UINT_PTR nIDEvent)\r
821 #define MSG_WM_TIMER(func) \\r
822         if (uMsg == WM_TIMER) \\r
823         { \\r
824                 SetMsgHandled(TRUE); \\r
825                 func((UINT_PTR)wParam); \\r
826                 lResult = 0; \\r
827                 if(IsMsgHandled()) \\r
828                         return TRUE; \\r
829         }\r
830 \r
831 // void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar pScrollBar)\r
832 #define MSG_WM_HSCROLL(func) \\r
833         if (uMsg == WM_HSCROLL) \\r
834         { \\r
835                 SetMsgHandled(TRUE); \\r
836                 func((int)LOWORD(wParam), (short)HIWORD(wParam), (HWND)lParam); \\r
837                 lResult = 0; \\r
838                 if(IsMsgHandled()) \\r
839                         return TRUE; \\r
840         }\r
841 \r
842 // void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar pScrollBar)\r
843 #define MSG_WM_VSCROLL(func) \\r
844         if (uMsg == WM_VSCROLL) \\r
845         { \\r
846                 SetMsgHandled(TRUE); \\r
847                 func((int)LOWORD(wParam), (short)HIWORD(wParam), (HWND)lParam); \\r
848                 lResult = 0; \\r
849                 if(IsMsgHandled()) \\r
850                         return TRUE; \\r
851         }\r
852 \r
853 // void OnInitMenu(CMenu menu)\r
854 #define MSG_WM_INITMENU(func) \\r
855         if (uMsg == WM_INITMENU) \\r
856         { \\r
857                 SetMsgHandled(TRUE); \\r
858                 func((HMENU)wParam); \\r
859                 lResult = 0; \\r
860                 if(IsMsgHandled()) \\r
861                         return TRUE; \\r
862         }\r
863 \r
864 // void OnInitMenuPopup(CMenu menuPopup, UINT nIndex, BOOL bSysMenu)\r
865 #define MSG_WM_INITMENUPOPUP(func) \\r
866         if (uMsg == WM_INITMENUPOPUP) \\r
867         { \\r
868                 SetMsgHandled(TRUE); \\r
869                 func((HMENU)wParam, (UINT)LOWORD(lParam), (BOOL)HIWORD(lParam)); \\r
870                 lResult = 0; \\r
871                 if(IsMsgHandled()) \\r
872                         return TRUE; \\r
873         }\r
874 \r
875 // void OnMenuSelect(UINT nItemID, UINT nFlags, CMenu menu)\r
876 #define MSG_WM_MENUSELECT(func) \\r
877         if (uMsg == WM_MENUSELECT) \\r
878         { \\r
879                 SetMsgHandled(TRUE); \\r
880                 func((UINT)LOWORD(wParam), (UINT)HIWORD(wParam), (HMENU)lParam); \\r
881                 lResult = 0; \\r
882                 if(IsMsgHandled()) \\r
883                         return TRUE; \\r
884         }\r
885 \r
886 // LRESULT OnMenuChar(UINT nChar, UINT nFlags, CMenu menu)\r
887 #define MSG_WM_MENUCHAR(func) \\r
888         if (uMsg == WM_MENUCHAR) \\r
889         { \\r
890                 SetMsgHandled(TRUE); \\r
891                 lResult = func((TCHAR)LOWORD(wParam), (UINT)HIWORD(wParam), (HMENU)lParam); \\r
892                 if(IsMsgHandled()) \\r
893                         return TRUE; \\r
894         }\r
895 \r
896 // LRESULT OnNotify(int idCtrl, LPNMHDR pnmh)\r
897 #define MSG_WM_NOTIFY(func) \\r
898         if (uMsg == WM_NOTIFY) \\r
899         { \\r
900                 SetMsgHandled(TRUE); \\r
901                 lResult = func((int)wParam, (LPNMHDR)lParam); \\r
902                 if(IsMsgHandled()) \\r
903                         return TRUE; \\r
904         }\r
905 \r
906 // void OnEnterIdle(UINT nWhy, CWindow wndWho)\r
907 #define MSG_WM_ENTERIDLE(func) \\r
908         if (uMsg == WM_ENTERIDLE) \\r
909         { \\r
910                 SetMsgHandled(TRUE); \\r
911                 func((UINT)wParam, (HWND)lParam); \\r
912                 lResult = 0; \\r
913                 if(IsMsgHandled()) \\r
914                         return TRUE; \\r
915         }\r
916 \r
917 // void OnMouseMove(UINT nFlags, CPoint point)\r
918 #define MSG_WM_MOUSEMOVE(func) \\r
919         if (uMsg == WM_MOUSEMOVE) \\r
920         { \\r
921                 SetMsgHandled(TRUE); \\r
922                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
923                 lResult = 0; \\r
924                 if(IsMsgHandled()) \\r
925                         return TRUE; \\r
926         }\r
927 \r
928 // BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)\r
929 #define MSG_WM_MOUSEWHEEL(func) \\r
930         if (uMsg == WM_MOUSEWHEEL) \\r
931         { \\r
932                 SetMsgHandled(TRUE); \\r
933                 lResult = (LRESULT)func((UINT)LOWORD(wParam), (short)HIWORD(wParam), _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
934                 if(IsMsgHandled()) \\r
935                         return TRUE; \\r
936         }\r
937 \r
938 // void OnLButtonDown(UINT nFlags, CPoint point)\r
939 #define MSG_WM_LBUTTONDOWN(func) \\r
940         if (uMsg == WM_LBUTTONDOWN) \\r
941         { \\r
942                 SetMsgHandled(TRUE); \\r
943                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
944                 lResult = 0; \\r
945                 if(IsMsgHandled()) \\r
946                         return TRUE; \\r
947         }\r
948 \r
949 // void OnLButtonUp(UINT nFlags, CPoint point)\r
950 #define MSG_WM_LBUTTONUP(func) \\r
951         if (uMsg == WM_LBUTTONUP) \\r
952         { \\r
953                 SetMsgHandled(TRUE); \\r
954                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
955                 lResult = 0; \\r
956                 if(IsMsgHandled()) \\r
957                         return TRUE; \\r
958         }\r
959 \r
960 // void OnLButtonDblClk(UINT nFlags, CPoint point)\r
961 #define MSG_WM_LBUTTONDBLCLK(func) \\r
962         if (uMsg == WM_LBUTTONDBLCLK) \\r
963         { \\r
964                 SetMsgHandled(TRUE); \\r
965                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
966                 lResult = 0; \\r
967                 if(IsMsgHandled()) \\r
968                         return TRUE; \\r
969         }\r
970 \r
971 // void OnRButtonDown(UINT nFlags, CPoint point)\r
972 #define MSG_WM_RBUTTONDOWN(func) \\r
973         if (uMsg == WM_RBUTTONDOWN) \\r
974         { \\r
975                 SetMsgHandled(TRUE); \\r
976                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
977                 lResult = 0; \\r
978                 if(IsMsgHandled()) \\r
979                         return TRUE; \\r
980         }\r
981 \r
982 // void OnRButtonUp(UINT nFlags, CPoint point)\r
983 #define MSG_WM_RBUTTONUP(func) \\r
984         if (uMsg == WM_RBUTTONUP) \\r
985         { \\r
986                 SetMsgHandled(TRUE); \\r
987                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
988                 lResult = 0; \\r
989                 if(IsMsgHandled()) \\r
990                         return TRUE; \\r
991         }\r
992 \r
993 // void OnRButtonDblClk(UINT nFlags, CPoint point)\r
994 #define MSG_WM_RBUTTONDBLCLK(func) \\r
995         if (uMsg == WM_RBUTTONDBLCLK) \\r
996         { \\r
997                 SetMsgHandled(TRUE); \\r
998                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
999                 lResult = 0; \\r
1000                 if(IsMsgHandled()) \\r
1001                         return TRUE; \\r
1002         }\r
1003 \r
1004 // void OnMButtonDown(UINT nFlags, CPoint point)\r
1005 #define MSG_WM_MBUTTONDOWN(func) \\r
1006         if (uMsg == WM_MBUTTONDOWN) \\r
1007         { \\r
1008                 SetMsgHandled(TRUE); \\r
1009                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
1010                 lResult = 0; \\r
1011                 if(IsMsgHandled()) \\r
1012                         return TRUE; \\r
1013         }\r
1014 \r
1015 // void OnMButtonUp(UINT nFlags, CPoint point)\r
1016 #define MSG_WM_MBUTTONUP(func) \\r
1017         if (uMsg == WM_MBUTTONUP) \\r
1018         { \\r
1019                 SetMsgHandled(TRUE); \\r
1020                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
1021                 lResult = 0; \\r
1022                 if(IsMsgHandled()) \\r
1023                         return TRUE; \\r
1024         }\r
1025 \r
1026 // void OnMButtonDblClk(UINT nFlags, CPoint point)\r
1027 #define MSG_WM_MBUTTONDBLCLK(func) \\r
1028         if (uMsg == WM_MBUTTONDBLCLK) \\r
1029         { \\r
1030                 SetMsgHandled(TRUE); \\r
1031                 func((UINT)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
1032                 lResult = 0; \\r
1033                 if(IsMsgHandled()) \\r
1034                         return TRUE; \\r
1035         }\r
1036 \r
1037 // void OnParentNotify(UINT message, UINT nChildID, LPARAM lParam)\r
1038 #define MSG_WM_PARENTNOTIFY(func) \\r
1039         if (uMsg == WM_PARENTNOTIFY) \\r
1040         { \\r
1041                 SetMsgHandled(TRUE); \\r
1042                 func((UINT)LOWORD(wParam), (UINT)HIWORD(wParam), lParam); \\r
1043                 lResult = 0; \\r
1044                 if(IsMsgHandled()) \\r
1045                         return TRUE; \\r
1046         }\r
1047 \r
1048 // void OnMDIActivate(CWindow wndActivate, CWindow wndDeactivate)\r
1049 #define MSG_WM_MDIACTIVATE(func) \\r
1050         if (uMsg == WM_MDIACTIVATE) \\r
1051         { \\r
1052                 SetMsgHandled(TRUE); \\r
1053                 func((HWND)wParam, (HWND)lParam); \\r
1054                 lResult = 0; \\r
1055                 if(IsMsgHandled()) \\r
1056                         return TRUE; \\r
1057         }\r
1058 \r
1059 // void OnRenderFormat(UINT nFormat)\r
1060 #define MSG_WM_RENDERFORMAT(func) \\r
1061         if (uMsg == WM_RENDERFORMAT) \\r
1062         { \\r
1063                 SetMsgHandled(TRUE); \\r
1064                 func((UINT)wParam); \\r
1065                 lResult = 0; \\r
1066                 if(IsMsgHandled()) \\r
1067                         return TRUE; \\r
1068         }\r
1069 \r
1070 // void OnRenderAllFormats()\r
1071 #define MSG_WM_RENDERALLFORMATS(func) \\r
1072         if (uMsg == WM_RENDERALLFORMATS) \\r
1073         { \\r
1074                 SetMsgHandled(TRUE); \\r
1075                 func(); \\r
1076                 lResult = 0; \\r
1077                 if(IsMsgHandled()) \\r
1078                         return TRUE; \\r
1079         }\r
1080 \r
1081 // void OnDestroyClipboard()\r
1082 #define MSG_WM_DESTROYCLIPBOARD(func) \\r
1083         if (uMsg == WM_DESTROYCLIPBOARD) \\r
1084         { \\r
1085                 SetMsgHandled(TRUE); \\r
1086                 func(); \\r
1087                 lResult = 0; \\r
1088                 if(IsMsgHandled()) \\r
1089                         return TRUE; \\r
1090         }\r
1091 \r
1092 // void OnDrawClipboard()\r
1093 #define MSG_WM_DRAWCLIPBOARD(func) \\r
1094         if (uMsg == WM_DRAWCLIPBOARD) \\r
1095         { \\r
1096                 SetMsgHandled(TRUE); \\r
1097                 func(); \\r
1098                 lResult = 0; \\r
1099                 if(IsMsgHandled()) \\r
1100                         return TRUE; \\r
1101         }\r
1102 \r
1103 // void OnPaintClipboard(CWindow wndViewer, const LPPAINTSTRUCT lpPaintStruct)\r
1104 #define MSG_WM_PAINTCLIPBOARD(func) \\r
1105         if (uMsg == WM_PAINTCLIPBOARD) \\r
1106         { \\r
1107                 SetMsgHandled(TRUE); \\r
1108                 func((HWND)wParam, (const LPPAINTSTRUCT)::GlobalLock((HGLOBAL)lParam)); \\r
1109                 ::GlobalUnlock((HGLOBAL)lParam); \\r
1110                 lResult = 0; \\r
1111                 if(IsMsgHandled()) \\r
1112                         return TRUE; \\r
1113         }\r
1114 \r
1115 // void OnVScrollClipboard(CWindow wndViewer, UINT nSBCode, UINT nPos)\r
1116 #define MSG_WM_VSCROLLCLIPBOARD(func) \\r
1117         if (uMsg == WM_VSCROLLCLIPBOARD) \\r
1118         { \\r
1119                 SetMsgHandled(TRUE); \\r
1120                 func((HWND)wParam, (UINT)LOWORD(lParam), (UINT)HIWORD(lParam)); \\r
1121                 lResult = 0; \\r
1122                 if(IsMsgHandled()) \\r
1123                         return TRUE; \\r
1124         }\r
1125 \r
1126 // void OnContextMenu(CWindow wnd, CPoint point)\r
1127 #define MSG_WM_CONTEXTMENU(func) \\r
1128         if (uMsg == WM_CONTEXTMENU) \\r
1129         { \\r
1130                 SetMsgHandled(TRUE); \\r
1131                 func((HWND)wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
1132                 lResult = 0; \\r
1133                 if(IsMsgHandled()) \\r
1134                         return TRUE; \\r
1135         }\r
1136 \r
1137 // void OnSizeClipboard(CWindow wndViewer, const LPRECT lpRect)\r
1138 #define MSG_WM_SIZECLIPBOARD(func) \\r
1139         if (uMsg == WM_SIZECLIPBOARD) \\r
1140         { \\r
1141                 SetMsgHandled(TRUE); \\r
1142                 func((HWND)wParam, (const LPRECT)::GlobalLock((HGLOBAL)lParam)); \\r
1143                 ::GlobalUnlock((HGLOBAL)lParam); \\r
1144                 lResult = 0; \\r
1145                 if(IsMsgHandled()) \\r
1146                         return TRUE; \\r
1147         }\r
1148 \r
1149 // void OnAskCbFormatName(UINT nMaxCount, LPTSTR lpszString)\r
1150 #define MSG_WM_ASKCBFORMATNAME(func) \\r
1151         if (uMsg == WM_ASKCBFORMATNAME) \\r
1152         { \\r
1153                 SetMsgHandled(TRUE); \\r
1154                 func((DWORD)wParam, (LPTSTR)lParam); \\r
1155                 lResult = 0; \\r
1156                 if(IsMsgHandled()) \\r
1157                         return TRUE; \\r
1158         }\r
1159 \r
1160 // void OnChangeCbChain(CWindow wndRemove, CWindow wndAfter)\r
1161 #define MSG_WM_CHANGECBCHAIN(func) \\r
1162         if (uMsg == WM_CHANGECBCHAIN) \\r
1163         { \\r
1164                 SetMsgHandled(TRUE); \\r
1165                 func((HWND)wParam, (HWND)lParam); \\r
1166                 lResult = 0; \\r
1167                 if(IsMsgHandled()) \\r
1168                         return TRUE; \\r
1169         }\r
1170 \r
1171 // void OnHScrollClipboard(CWindow wndViewer, UINT nSBCode, UINT nPos)\r
1172 #define MSG_WM_HSCROLLCLIPBOARD(func) \\r
1173         if (uMsg == WM_HSCROLLCLIPBOARD) \\r
1174         { \\r
1175                 SetMsgHandled(TRUE); \\r
1176                 func((HWND)wParam, (UINT)LOWORD(lParam), (UINT)HIWORD(lParam)); \\r
1177                 lResult = 0; \\r
1178                 if(IsMsgHandled()) \\r
1179                         return TRUE; \\r
1180         }\r
1181 \r
1182 // BOOL OnQueryNewPalette()\r
1183 #define MSG_WM_QUERYNEWPALETTE(func) \\r
1184         if (uMsg == WM_QUERYNEWPALETTE) \\r
1185         { \\r
1186                 SetMsgHandled(TRUE); \\r
1187                 lResult = (LRESULT)func(); \\r
1188                 if(IsMsgHandled()) \\r
1189                         return TRUE; \\r
1190         }\r
1191 \r
1192 // void OnPaletteChanged(CWindow wndFocus)\r
1193 #define MSG_WM_PALETTECHANGED(func) \\r
1194         if (uMsg == WM_PALETTECHANGED) \\r
1195         { \\r
1196                 SetMsgHandled(TRUE); \\r
1197                 func((HWND)wParam); \\r
1198                 lResult = 0; \\r
1199                 if(IsMsgHandled()) \\r
1200                         return TRUE; \\r
1201         }\r
1202 \r
1203 // void OnPaletteIsChanging(CWindow wndPalChg)\r
1204 #define MSG_WM_PALETTEISCHANGING(func) \\r
1205         if (uMsg == WM_PALETTEISCHANGING) \\r
1206         { \\r
1207                 SetMsgHandled(TRUE); \\r
1208                 func((HWND)wParam); \\r
1209                 lResult = 0; \\r
1210                 if(IsMsgHandled()) \\r
1211                         return TRUE; \\r
1212         }\r
1213 \r
1214 // void OnDropFiles(HDROP hDropInfo)\r
1215 #define MSG_WM_DROPFILES(func) \\r
1216         if (uMsg == WM_DROPFILES) \\r
1217         { \\r
1218                 SetMsgHandled(TRUE); \\r
1219                 func((HDROP)wParam); \\r
1220                 lResult = 0; \\r
1221                 if(IsMsgHandled()) \\r
1222                         return TRUE; \\r
1223         }\r
1224 \r
1225 // void OnWindowPosChanging(LPWINDOWPOS lpWndPos)\r
1226 #define MSG_WM_WINDOWPOSCHANGING(func) \\r
1227         if (uMsg == WM_WINDOWPOSCHANGING) \\r
1228         { \\r
1229                 SetMsgHandled(TRUE); \\r
1230                 func((LPWINDOWPOS)lParam); \\r
1231                 lResult = 0; \\r
1232                 if(IsMsgHandled()) \\r
1233                         return TRUE; \\r
1234         }\r
1235 \r
1236 // void OnWindowPosChanged(LPWINDOWPOS lpWndPos)\r
1237 #define MSG_WM_WINDOWPOSCHANGED(func) \\r
1238         if (uMsg == WM_WINDOWPOSCHANGED) \\r
1239         { \\r
1240                 SetMsgHandled(TRUE); \\r
1241                 func((LPWINDOWPOS)lParam); \\r
1242                 lResult = 0; \\r
1243                 if(IsMsgHandled()) \\r
1244                         return TRUE; \\r
1245         }\r
1246 \r
1247 // void OnExitMenuLoop(BOOL fIsTrackPopupMenu)\r
1248 #define MSG_WM_EXITMENULOOP(func) \\r
1249         if (uMsg == WM_EXITMENULOOP) \\r
1250         { \\r
1251                 SetMsgHandled(TRUE); \\r
1252                 func((BOOL)wParam); \\r
1253                 lResult = 0; \\r
1254                 if(IsMsgHandled()) \\r
1255                         return TRUE; \\r
1256         }\r
1257 \r
1258 // void OnEnterMenuLoop(BOOL fIsTrackPopupMenu)\r
1259 #define MSG_WM_ENTERMENULOOP(func) \\r
1260         if (uMsg == WM_ENTERMENULOOP) \\r
1261         { \\r
1262                 SetMsgHandled(TRUE); \\r
1263                 func((BOOL)wParam); \\r
1264                 lResult = 0; \\r
1265                 if(IsMsgHandled()) \\r
1266                         return TRUE; \\r
1267         }\r
1268 \r
1269 // void OnStyleChanged(int nStyleType, LPSTYLESTRUCT lpStyleStruct)\r
1270 #define MSG_WM_STYLECHANGED(func) \\r
1271         if (uMsg == WM_STYLECHANGED) \\r
1272         { \\r
1273                 SetMsgHandled(TRUE); \\r
1274                 func((UINT)wParam, (LPSTYLESTRUCT)lParam); \\r
1275                 lResult = 0; \\r
1276                 if(IsMsgHandled()) \\r
1277                         return TRUE; \\r
1278         }\r
1279 \r
1280 // void OnStyleChanging(int nStyleType, LPSTYLESTRUCT lpStyleStruct)\r
1281 #define MSG_WM_STYLECHANGING(func) \\r
1282         if (uMsg == WM_STYLECHANGING) \\r
1283         { \\r
1284                 SetMsgHandled(TRUE); \\r
1285                 func((UINT)wParam, (LPSTYLESTRUCT)lParam); \\r
1286                 lResult = 0; \\r
1287                 if(IsMsgHandled()) \\r
1288                         return TRUE; \\r
1289         }\r
1290 \r
1291 // void OnSizing(UINT fwSide, LPRECT pRect)\r
1292 #define MSG_WM_SIZING(func) \\r
1293         if (uMsg == WM_SIZING) \\r
1294         { \\r
1295                 SetMsgHandled(TRUE); \\r
1296                 func((UINT)wParam, (LPRECT)lParam); \\r
1297                 lResult = TRUE; \\r
1298                 if(IsMsgHandled()) \\r
1299                         return TRUE; \\r
1300         }\r
1301 \r
1302 // void OnMoving(UINT fwSide, LPRECT pRect)\r
1303 #define MSG_WM_MOVING(func) \\r
1304         if (uMsg == WM_MOVING) \\r
1305         { \\r
1306                 SetMsgHandled(TRUE); \\r
1307                 func((UINT)wParam, (LPRECT)lParam); \\r
1308                 lResult = TRUE; \\r
1309                 if(IsMsgHandled()) \\r
1310                         return TRUE; \\r
1311         }\r
1312 \r
1313 // void OnCaptureChanged(CWindow wnd)\r
1314 #define MSG_WM_CAPTURECHANGED(func) \\r
1315         if (uMsg == WM_CAPTURECHANGED) \\r
1316         { \\r
1317                 SetMsgHandled(TRUE); \\r
1318                 func((HWND)lParam); \\r
1319                 lResult = 0; \\r
1320                 if(IsMsgHandled()) \\r
1321                         return TRUE; \\r
1322         }\r
1323 \r
1324 // BOOL OnDeviceChange(UINT nEventType, DWORD dwData)\r
1325 #define MSG_WM_DEVICECHANGE(func) \\r
1326         if (uMsg == WM_DEVICECHANGE) \\r
1327         { \\r
1328                 SetMsgHandled(TRUE); \\r
1329                 lResult = (LRESULT)func((UINT)wParam, (DWORD)lParam); \\r
1330                 if(IsMsgHandled()) \\r
1331                         return TRUE; \\r
1332         }\r
1333 \r
1334 // void OnCommand(UINT uNotifyCode, int nID, CWindow wndCtl)\r
1335 #define MSG_WM_COMMAND(func) \\r
1336         if (uMsg == WM_COMMAND) \\r
1337         { \\r
1338                 SetMsgHandled(TRUE); \\r
1339                 func((UINT)HIWORD(wParam), (int)LOWORD(wParam), (HWND)lParam); \\r
1340                 lResult = 0; \\r
1341                 if(IsMsgHandled()) \\r
1342                         return TRUE; \\r
1343         }\r
1344 \r
1345 // void OnDisplayChange(UINT uBitsPerPixel, CSize sizeScreen)\r
1346 #define MSG_WM_DISPLAYCHANGE(func) \\r
1347         if (uMsg == WM_DISPLAYCHANGE) \\r
1348         { \\r
1349                 SetMsgHandled(TRUE); \\r
1350                 func((UINT)wParam, _WTYPES_NS::CSize(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
1351                 lResult = 0; \\r
1352                 if(IsMsgHandled()) \\r
1353                         return TRUE; \\r
1354         }\r
1355 \r
1356 // void OnEnterSizeMove()\r
1357 #define MSG_WM_ENTERSIZEMOVE(func) \\r
1358         if (uMsg == WM_ENTERSIZEMOVE) \\r
1359         { \\r
1360                 SetMsgHandled(TRUE); \\r
1361                 func(); \\r
1362                 lResult = 0; \\r
1363                 if(IsMsgHandled()) \\r
1364                         return TRUE; \\r
1365         }\r
1366 \r
1367 // void OnExitSizeMove()\r
1368 #define MSG_WM_EXITSIZEMOVE(func) \\r
1369         if (uMsg == WM_EXITSIZEMOVE) \\r
1370         { \\r
1371                 SetMsgHandled(TRUE); \\r
1372                 func(); \\r
1373                 lResult = 0; \\r
1374                 if(IsMsgHandled()) \\r
1375                         return TRUE; \\r
1376         }\r
1377 \r
1378 // HFONT OnGetFont()\r
1379 #define MSG_WM_GETFONT(func) \\r
1380         if (uMsg == WM_GETFONT) \\r
1381         { \\r
1382                 SetMsgHandled(TRUE); \\r
1383                 lResult = (LRESULT)func(); \\r
1384                 if(IsMsgHandled()) \\r
1385                         return TRUE; \\r
1386         }\r
1387 \r
1388 // LRESULT OnGetHotKey()\r
1389 #define MSG_WM_GETHOTKEY(func) \\r
1390         if (uMsg == WM_GETHOTKEY) \\r
1391         { \\r
1392                 SetMsgHandled(TRUE); \\r
1393                 lResult = func(); \\r
1394                 if(IsMsgHandled()) \\r
1395                         return TRUE; \\r
1396         }\r
1397 \r
1398 // HICON OnGetIcon()\r
1399 #define MSG_WM_GETICON(func) \\r
1400         if (uMsg == WM_GETICON) \\r
1401         { \\r
1402                 SetMsgHandled(TRUE); \\r
1403                 lResult = (LRESULT)func((UINT)wParam); \\r
1404                 if(IsMsgHandled()) \\r
1405                         return TRUE; \\r
1406         }\r
1407 \r
1408 // int OnGetText(int cchTextMax, LPTSTR lpszText)\r
1409 #define MSG_WM_GETTEXT(func) \\r
1410         if (uMsg == WM_GETTEXT) \\r
1411         { \\r
1412                 SetMsgHandled(TRUE); \\r
1413                 lResult = (LRESULT)func((int)wParam, (LPTSTR)lParam); \\r
1414                 if(IsMsgHandled()) \\r
1415                         return TRUE; \\r
1416         }\r
1417 \r
1418 // int OnGetTextLength()\r
1419 #define MSG_WM_GETTEXTLENGTH(func) \\r
1420         if (uMsg == WM_GETTEXTLENGTH) \\r
1421         { \\r
1422                 SetMsgHandled(TRUE); \\r
1423                 lResult = (LRESULT)func(); \\r
1424                 if(IsMsgHandled()) \\r
1425                         return TRUE; \\r
1426         }\r
1427 \r
1428 // void OnHelp(LPHELPINFO lpHelpInfo)\r
1429 #define MSG_WM_HELP(func) \\r
1430         if (uMsg == WM_HELP) \\r
1431         { \\r
1432                 SetMsgHandled(TRUE); \\r
1433                 func((LPHELPINFO)lParam); \\r
1434                 lResult = TRUE; \\r
1435                 if(IsMsgHandled()) \\r
1436                         return TRUE; \\r
1437         }\r
1438 \r
1439 // void OnHotKey(int nHotKeyID, UINT uModifiers, UINT uVirtKey)\r
1440 #define MSG_WM_HOTKEY(func) \\r
1441         if (uMsg == WM_HOTKEY) \\r
1442         { \\r
1443                 SetMsgHandled(TRUE); \\r
1444                 func((int)wParam, (UINT)LOWORD(lParam), (UINT)HIWORD(lParam)); \\r
1445                 lResult = 0; \\r
1446                 if(IsMsgHandled()) \\r
1447                         return TRUE; \\r
1448         }\r
1449 \r
1450 // void OnInputLangChange(DWORD dwCharSet, HKL hKbdLayout)\r
1451 #define MSG_WM_INPUTLANGCHANGE(func) \\r
1452         if (uMsg == WM_INPUTLANGCHANGE) \\r
1453         { \\r
1454                 SetMsgHandled(TRUE); \\r
1455                 func((DWORD)wParam, (HKL)lParam); \\r
1456                 lResult = TRUE; \\r
1457                 if(IsMsgHandled()) \\r
1458                         return TRUE; \\r
1459         }\r
1460 \r
1461 // void OnInputLangChangeRequest(BOOL bSysCharSet, HKL hKbdLayout)\r
1462 #define MSG_WM_INPUTLANGCHANGEREQUEST(func) \\r
1463         if (uMsg == WM_INPUTLANGCHANGEREQUEST) \\r
1464         { \\r
1465                 SetMsgHandled(TRUE); \\r
1466                 func((BOOL)wParam, (HKL)lParam); \\r
1467                 lResult = 0; \\r
1468                 if(IsMsgHandled()) \\r
1469                         return TRUE; \\r
1470         }\r
1471 \r
1472 // void OnNextDlgCtl(BOOL bHandle, WPARAM wCtlFocus)\r
1473 #define MSG_WM_NEXTDLGCTL(func) \\r
1474         if (uMsg == WM_NEXTDLGCTL) \\r
1475         { \\r
1476                 SetMsgHandled(TRUE); \\r
1477                 func((BOOL)LOWORD(lParam), wParam); \\r
1478                 lResult = 0; \\r
1479                 if(IsMsgHandled()) \\r
1480                         return TRUE; \\r
1481         }\r
1482 \r
1483 // void OnNextMenu(int nVirtKey, LPMDINEXTMENU lpMdiNextMenu)\r
1484 #define MSG_WM_NEXTMENU(func) \\r
1485         if (uMsg == WM_NEXTMENU) \\r
1486         { \\r
1487                 SetMsgHandled(TRUE); \\r
1488                 func((int)wParam, (LPMDINEXTMENU)lParam); \\r
1489                 lResult = 0; \\r
1490                 if(IsMsgHandled()) \\r
1491                         return TRUE; \\r
1492         }\r
1493 \r
1494 // int OnNotifyFormat(CWindow wndFrom, int nCommand)\r
1495 #define MSG_WM_NOTIFYFORMAT(func) \\r
1496         if (uMsg == WM_NOTIFYFORMAT) \\r
1497         { \\r
1498                 SetMsgHandled(TRUE); \\r
1499                 lResult = (LRESULT)func((HWND)wParam, (int)lParam); \\r
1500                 if(IsMsgHandled()) \\r
1501                         return TRUE; \\r
1502         }\r
1503 \r
1504 // BOOL OnPowerBroadcast(DWORD dwPowerEvent, DWORD dwData)\r
1505 #define MSG_WM_POWERBROADCAST(func) \\r
1506         if (uMsg == WM_POWERBROADCAST) \\r
1507         { \\r
1508                 SetMsgHandled(TRUE); \\r
1509                 lResult = (LRESULT)func((DWORD)wParam, (DWORD)lParam); \\r
1510                 if(IsMsgHandled()) \\r
1511                         return TRUE; \\r
1512         }\r
1513 \r
1514 // void OnPrint(CDCHandle dc, UINT uFlags)\r
1515 #define MSG_WM_PRINT(func) \\r
1516         if (uMsg == WM_PRINT) \\r
1517         { \\r
1518                 SetMsgHandled(TRUE); \\r
1519                 func((HDC)wParam, (UINT)lParam); \\r
1520                 lResult = 0; \\r
1521                 if(IsMsgHandled()) \\r
1522                         return TRUE; \\r
1523         }\r
1524 \r
1525 // void OnPrintClient(CDCHandle dc, UINT uFlags)\r
1526 #define MSG_WM_PRINTCLIENT(func) \\r
1527         if (uMsg == WM_PRINTCLIENT) \\r
1528         { \\r
1529                 SetMsgHandled(TRUE); \\r
1530                 func((HDC)wParam, (UINT)lParam); \\r
1531                 lResult = 0; \\r
1532                 if(IsMsgHandled()) \\r
1533                         return TRUE; \\r
1534         }\r
1535 \r
1536 // void OnRasDialEvent(RASCONNSTATE rasconnstate, DWORD dwError)\r
1537 #define MSG_WM_RASDIALEVENT(func) \\r
1538         if (uMsg == WM_RASDIALEVENT) \\r
1539         { \\r
1540                 SetMsgHandled(TRUE); \\r
1541                 func((RASCONNSTATE)wParam, (DWORD)lParam); \\r
1542                 lResult = TRUE; \\r
1543                 if(IsMsgHandled()) \\r
1544                         return TRUE; \\r
1545         }\r
1546 \r
1547 // void OnSetFont(CFont font, BOOL bRedraw)\r
1548 #define MSG_WM_SETFONT(func) \\r
1549         if (uMsg == WM_SETFONT) \\r
1550         { \\r
1551                 SetMsgHandled(TRUE); \\r
1552                 func((HFONT)wParam, (BOOL)LOWORD(lParam)); \\r
1553                 lResult = 0; \\r
1554                 if(IsMsgHandled()) \\r
1555                         return TRUE; \\r
1556         }\r
1557 \r
1558 // int OnSetHotKey(int nVirtKey, UINT uFlags)\r
1559 #define MSG_WM_SETHOTKEY(func) \\r
1560         if (uMsg == WM_SETHOTKEY) \\r
1561         { \\r
1562                 SetMsgHandled(TRUE); \\r
1563                 lResult = (LRESULT)func((int)LOBYTE(LOWORD(wParam)), (UINT)HIBYTE(LOWORD(wParam))); \\r
1564                 if(IsMsgHandled()) \\r
1565                         return TRUE; \\r
1566         }\r
1567 \r
1568 // HICON OnSetIcon(UINT uType, HICON hIcon)\r
1569 #define MSG_WM_SETICON(func) \\r
1570         if (uMsg == WM_SETICON) \\r
1571         { \\r
1572                 SetMsgHandled(TRUE); \\r
1573                 lResult = (LRESULT)func((UINT)wParam, (HICON)lParam); \\r
1574                 if(IsMsgHandled()) \\r
1575                         return TRUE; \\r
1576         }\r
1577 \r
1578 // void OnSetRedraw(BOOL bRedraw)\r
1579 #define MSG_WM_SETREDRAW(func) \\r
1580         if (uMsg == WM_SETREDRAW) \\r
1581         { \\r
1582                 SetMsgHandled(TRUE); \\r
1583                 func((BOOL)wParam); \\r
1584                 lResult = 0; \\r
1585                 if(IsMsgHandled()) \\r
1586                         return TRUE; \\r
1587         }\r
1588 \r
1589 // int OnSetText(LPCTSTR lpstrText)\r
1590 #define MSG_WM_SETTEXT(func) \\r
1591         if (uMsg == WM_SETTEXT) \\r
1592         { \\r
1593                 SetMsgHandled(TRUE); \\r
1594                 lResult = (LRESULT)func((LPCTSTR)lParam); \\r
1595                 if(IsMsgHandled()) \\r
1596                         return TRUE; \\r
1597         }\r
1598 \r
1599 // void OnUserChanged()\r
1600 #define MSG_WM_USERCHANGED(func) \\r
1601         if (uMsg == WM_USERCHANGED) \\r
1602         { \\r
1603                 SetMsgHandled(TRUE); \\r
1604                 func(); \\r
1605                 lResult = 0; \\r
1606                 if(IsMsgHandled()) \\r
1607                         return TRUE; \\r
1608         }\r
1609 \r
1610 ///////////////////////////////////////////////////////////////////////////////\r
1611 // New NT4 & NT5 messages\r
1612 \r
1613 #if(_WIN32_WINNT >= 0x0400)\r
1614 \r
1615 // void OnMouseHover(WPARAM wParam, CPoint ptPos)\r
1616 #define MSG_WM_MOUSEHOVER(func) \\r
1617         if (uMsg == WM_MOUSEHOVER) \\r
1618         { \\r
1619                 SetMsgHandled(TRUE); \\r
1620                 func(wParam, _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
1621                 lResult = 0; \\r
1622                 if(IsMsgHandled()) \\r
1623                         return TRUE; \\r
1624         }\r
1625 \r
1626 // void OnMouseLeave()\r
1627 #define MSG_WM_MOUSELEAVE(func) \\r
1628         if (uMsg == WM_MOUSELEAVE) \\r
1629         { \\r
1630                 SetMsgHandled(TRUE); \\r
1631                 func(); \\r
1632                 lResult = 0; \\r
1633                 if(IsMsgHandled()) \\r
1634                         return TRUE; \\r
1635         }\r
1636 \r
1637 #endif /* _WIN32_WINNT >= 0x0400 */\r
1638 \r
1639 #if(WINVER >= 0x0500)\r
1640 \r
1641 // void OnMenuRButtonUp(WPARAM wParam, CMenu menu)\r
1642 #define MSG_WM_MENURBUTTONUP(func) \\r
1643         if (uMsg == WM_MENURBUTTONUP) \\r
1644         { \\r
1645                 SetMsgHandled(TRUE); \\r
1646                 func(wParam, (HMENU)lParam); \\r
1647                 lResult = 0; \\r
1648                 if(IsMsgHandled()) \\r
1649                         return TRUE; \\r
1650         }\r
1651 \r
1652 // LRESULT OnMenuDrag(WPARAM wParam, CMenu menu)\r
1653 #define MSG_WM_MENUDRAG(func) \\r
1654         if (uMsg == WM_MENUDRAG) \\r
1655         { \\r
1656                 SetMsgHandled(TRUE); \\r
1657                 lResult = func(wParam, (HMENU)lParam); \\r
1658                 if(IsMsgHandled()) \\r
1659                         return TRUE; \\r
1660         }\r
1661 \r
1662 // LRESULT OnMenuGetObject(PMENUGETOBJECTINFO info)\r
1663 #define MSG_WM_MENUGETOBJECT(func) \\r
1664         if (uMsg == WM_MENUGETOBJECT) \\r
1665         { \\r
1666                 SetMsgHandled(TRUE); \\r
1667                 lResult = func((PMENUGETOBJECTINFO)lParam); \\r
1668                 if(IsMsgHandled()) \\r
1669                         return TRUE; \\r
1670         }\r
1671 \r
1672 // void OnUnInitMenuPopup(UINT nID, CMenu menu)\r
1673 #define MSG_WM_UNINITMENUPOPUP(func) \\r
1674         if (uMsg == WM_UNINITMENUPOPUP) \\r
1675         { \\r
1676                 SetMsgHandled(TRUE); \\r
1677                 func((UINT)HIWORD(lParam), (HMENU)wParam); \\r
1678                 lResult = 0; \\r
1679                 if(IsMsgHandled()) \\r
1680                         return TRUE; \\r
1681         }\r
1682 \r
1683 // void OnMenuCommand(WPARAM nIndex, CMenu menu)\r
1684 #define MSG_WM_MENUCOMMAND(func) \\r
1685         if (uMsg == WM_MENUCOMMAND) \\r
1686         { \\r
1687                 SetMsgHandled(TRUE); \\r
1688                 func(wParam, (HMENU)lParam); \\r
1689                 lResult = 0; \\r
1690                 if(IsMsgHandled()) \\r
1691                         return TRUE; \\r
1692         }\r
1693 \r
1694 #endif /* WINVER >= 0x0500 */\r
1695 \r
1696 #if(_WIN32_WINNT >= 0x0500)\r
1697 \r
1698 // BOOL OnAppCommand(CWindow wndFocus, short cmd, WORD uDevice, int dwKeys)\r
1699 #define MSG_WM_APPCOMMAND(func) \\r
1700         if (uMsg == WM_APPCOMMAND) \\r
1701         { \\r
1702                 SetMsgHandled(TRUE); \\r
1703                 lResult = (LRESULT)func((HWND)wParam, GET_APPCOMMAND_LPARAM(lParam), GET_DEVICE_LPARAM(lParam), GET_KEYSTATE_LPARAM(lParam)); \\r
1704                 if(IsMsgHandled()) \\r
1705                         return TRUE; \\r
1706         }\r
1707 \r
1708 // void OnNCXButtonDown(int fwButton, short nHittest, CPoint ptPos)\r
1709 #define MSG_WM_NCXBUTTONDOWN(func) \\r
1710         if (uMsg == WM_NCXBUTTONDOWN) \\r
1711         { \\r
1712                 SetMsgHandled(TRUE); \\r
1713                 func(GET_XBUTTON_WPARAM(wParam), GET_NCHITTEST_WPARAM(wParam), _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
1714                 lResult = 0; \\r
1715                 if(IsMsgHandled()) \\r
1716                         return TRUE; \\r
1717         }\r
1718 \r
1719 // void OnNCXButtonUp(int fwButton, short nHittest, CPoint ptPos)\r
1720 #define MSG_WM_NCXBUTTONUP(func) \\r
1721         if (uMsg == WM_NCXBUTTONUP) \\r
1722         { \\r
1723                 SetMsgHandled(TRUE); \\r
1724                 func(GET_XBUTTON_WPARAM(wParam), GET_NCHITTEST_WPARAM(wParam), _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
1725                 lResult = 0; \\r
1726                 if(IsMsgHandled()) \\r
1727                         return TRUE; \\r
1728         }\r
1729 \r
1730 // void OnNCXButtonDblClk(int fwButton, short nHittest, CPoint ptPos)\r
1731 #define MSG_WM_NCXBUTTONDBLCLK(func) \\r
1732         if (uMsg == WM_NCXBUTTONDBLCLK) \\r
1733         { \\r
1734                 SetMsgHandled(TRUE); \\r
1735                 func(GET_XBUTTON_WPARAM(wParam), GET_NCHITTEST_WPARAM(wParam), _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
1736                 lResult = 0; \\r
1737                 if(IsMsgHandled()) \\r
1738                         return TRUE; \\r
1739         }\r
1740 \r
1741 // void OnXButtonDown(int fwButton, int dwKeys, CPoint ptPos)\r
1742 #define MSG_WM_XBUTTONDOWN(func) \\r
1743         if (uMsg == WM_XBUTTONDOWN) \\r
1744         { \\r
1745                 SetMsgHandled(TRUE); \\r
1746                 func(GET_XBUTTON_WPARAM(wParam), GET_KEYSTATE_WPARAM(wParam), _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
1747                 lResult = 0; \\r
1748                 if(IsMsgHandled()) \\r
1749                         return TRUE; \\r
1750         }\r
1751 \r
1752 // void OnXButtonUp(int fwButton, int dwKeys, CPoint ptPos)\r
1753 #define MSG_WM_XBUTTONUP(func) \\r
1754         if (uMsg == WM_XBUTTONUP) \\r
1755         { \\r
1756                 SetMsgHandled(TRUE); \\r
1757                 func(GET_XBUTTON_WPARAM(wParam), GET_KEYSTATE_WPARAM(wParam), _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
1758                 lResult = 0; \\r
1759                 if(IsMsgHandled()) \\r
1760                         return TRUE; \\r
1761         }\r
1762 \r
1763 // void OnXButtonDblClk(int fwButton, int dwKeys, CPoint ptPos)\r
1764 #define MSG_WM_XBUTTONDBLCLK(func) \\r
1765         if (uMsg == WM_XBUTTONDBLCLK) \\r
1766         { \\r
1767                 SetMsgHandled(TRUE); \\r
1768                 func(GET_XBUTTON_WPARAM(wParam), GET_KEYSTATE_WPARAM(wParam), _WTYPES_NS::CPoint(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); \\r
1769                 lResult = 0; \\r
1770                 if(IsMsgHandled()) \\r
1771                         return TRUE; \\r
1772         }\r
1773 \r
1774 // void OnChangeUIState(WORD nAction, WORD nState)\r
1775 #define MSG_WM_CHANGEUISTATE(func) \\r
1776         if (uMsg == WM_CHANGEUISTATE) \\r
1777         { \\r
1778                 SetMsgHandled(TRUE); \\r
1779                 func(LOWORD(wParam), HIWORD(wParam)); \\r
1780                 lResult = 0; \\r
1781                 if(IsMsgHandled()) \\r
1782                         return TRUE; \\r
1783         }\r
1784 \r
1785 // void OnUpdateUIState(WORD nAction, WORD nState)\r
1786 #define MSG_WM_UPDATEUISTATE(func) \\r
1787         if (uMsg == WM_UPDATEUISTATE) \\r
1788         { \\r
1789                 SetMsgHandled(TRUE); \\r
1790                 func(LOWORD(wParam), HIWORD(wParam)); \\r
1791                 lResult = 0; \\r
1792                 if(IsMsgHandled()) \\r
1793                         return TRUE; \\r
1794         }\r
1795 \r
1796 // LRESULT OnQueryUIState()\r
1797 #define MSG_WM_QUERYUISTATE(func) \\r
1798         if (uMsg == WM_QUERYUISTATE) \\r
1799         { \\r
1800                 SetMsgHandled(TRUE); \\r
1801                 lResult = func(); \\r
1802                 if(IsMsgHandled()) \\r
1803                         return TRUE; \\r
1804         }\r
1805 \r
1806 #endif // (_WIN32_WINNT >= 0x0500)\r
1807 \r
1808 #if(_WIN32_WINNT >= 0x0501)\r
1809 \r
1810 // void OnInput(WPARAM RawInputCode, HRAWINPUT hRawInput)\r
1811 #define MSG_WM_INPUT(func) \\r
1812         if (uMsg == WM_INPUT) \\r
1813         { \\r
1814                 SetMsgHandled(TRUE); \\r
1815                 func(GET_RAWINPUT_CODE_WPARAM(wParam), (HRAWINPUT)lParam); \\r
1816                 lResult = 0; \\r
1817                 if(IsMsgHandled()) \\r
1818                         return TRUE; \\r
1819         }\r
1820 \r
1821 // void OnUniChar(TCHAR nChar, UINT nRepCnt, UINT nFlags)\r
1822 #define MSG_WM_UNICHAR(func) \\r
1823         if (uMsg == WM_UNICHAR) \\r
1824         { \\r
1825                 SetMsgHandled(TRUE); \\r
1826                 func((TCHAR)wParam, (UINT)lParam & 0xFFFF, (UINT)((lParam & 0xFFFF0000) >> 16)); \\r
1827                 if(IsMsgHandled()) \\r
1828                 { \\r
1829                         lResult = (wParam == UNICODE_NOCHAR) ? TRUE : FALSE; \\r
1830                         return TRUE; \\r
1831                 } \\r
1832         }\r
1833 \r
1834 // void OnWTSSessionChange(WPARAM nStatusCode, PWTSSESSION_NOTIFICATION nSessionID)\r
1835 #define MSG_WM_WTSSESSION_CHANGE(func) \\r
1836         if (uMsg == WM_WTSSESSION_CHANGE) \\r
1837         { \\r
1838                 SetMsgHandled(TRUE); \\r
1839                 func(wParam, (PWTSSESSION_NOTIFICATION)lParam); \\r
1840                 lResult = 0; \\r
1841                 if(IsMsgHandled()) \\r
1842                         return TRUE; \\r
1843         }\r
1844 \r
1845 // OnThemeChanged()\r
1846 #define MSG_WM_THEMECHANGED(func) \\r
1847         if (uMsg == WM_THEMECHANGED) \\r
1848         { \\r
1849                 SetMsgHandled(TRUE); \\r
1850                 func(); \\r
1851                 lResult = 0; \\r
1852                 if(IsMsgHandled()) \\r
1853                         return TRUE; \\r
1854         }\r
1855 \r
1856 #endif /* _WIN32_WINNT >= 0x0501 */\r
1857 \r
1858 ///////////////////////////////////////////////////////////////////////////////\r
1859 // ATL defined messages\r
1860 \r
1861 // BOOL OnForwardMsg(LPMSG Msg, DWORD nUserData)\r
1862 #define MSG_WM_FORWARDMSG(func) \\r
1863         if (uMsg == WM_FORWARDMSG) \\r
1864         { \\r
1865                 SetMsgHandled(TRUE); \\r
1866                 lResult = (LRESULT)func((LPMSG)lParam, (DWORD)wParam); \\r
1867                 if(IsMsgHandled()) \\r
1868                         return TRUE; \\r
1869         }\r
1870 \r
1871 ///////////////////////////////////////////////////////////////////////////////\r
1872 // Dialog specific messages\r
1873 \r
1874 // LRESULT OnDMGetDefID()\r
1875 #define MSG_DM_GETDEFID(func) \\r
1876         if (uMsg == DM_GETDEFID) \\r
1877         { \\r
1878                 SetMsgHandled(TRUE); \\r
1879                 lResult = func(); \\r
1880                 if(IsMsgHandled()) \\r
1881                         return TRUE; \\r
1882         }\r
1883 \r
1884 // void OnDMSetDefID(UINT DefID)\r
1885 #define MSG_DM_SETDEFID(func) \\r
1886         if (uMsg == DM_SETDEFID) \\r
1887         { \\r
1888                 SetMsgHandled(TRUE); \\r
1889                 func((UINT)wParam); \\r
1890                 lResult = TRUE; \\r
1891                 if(IsMsgHandled()) \\r
1892                         return TRUE; \\r
1893         }\r
1894 \r
1895 // void OnDMReposition()\r
1896 #define MSG_DM_REPOSITION(func) \\r
1897         if (uMsg == DM_REPOSITION) \\r
1898         { \\r
1899                 SetMsgHandled(TRUE); \\r
1900                 func(); \\r
1901                 lResult = 0; \\r
1902                 if(IsMsgHandled()) \\r
1903                         return TRUE; \\r
1904         }\r
1905 \r
1906 ///////////////////////////////////////////////////////////////////////////////\r
1907 // Reflected messages\r
1908 \r
1909 // void OnReflectedCommand(UINT uNotifyCode, int nID, CWindow wndCtl)\r
1910 #define MSG_OCM_COMMAND(func) \\r
1911         if (uMsg == OCM_COMMAND) \\r
1912         { \\r
1913                 SetMsgHandled(TRUE); \\r
1914                 func((UINT)HIWORD(wParam), (int)LOWORD(wParam), (HWND)lParam); \\r
1915                 lResult = 0; \\r
1916                 if(IsMsgHandled()) \\r
1917                         return TRUE; \\r
1918         }\r
1919 \r
1920 // LRESULT OnReflectedNotify(int idCtrl, LPNMHDR pnmh)\r
1921 #define MSG_OCM_NOTIFY(func) \\r
1922         if (uMsg == OCM_NOTIFY) \\r
1923         { \\r
1924                 SetMsgHandled(TRUE); \\r
1925                 lResult = func((int)wParam, (LPNMHDR)lParam); \\r
1926                 if(IsMsgHandled()) \\r
1927                         return TRUE; \\r
1928         }\r
1929 \r
1930 // void OnReflectedParentNotify(UINT message, UINT nChildID, LPARAM lParam)\r
1931 #define MSG_OCM_PARENTNOTIFY(func) \\r
1932         if (uMsg == OCM_PARENTNOTIFY) \\r
1933         { \\r
1934                 SetMsgHandled(TRUE); \\r
1935                 func((UINT)LOWORD(wParam), (UINT)HIWORD(wParam), lParam); \\r
1936                 lResult = 0; \\r
1937                 if(IsMsgHandled()) \\r
1938                         return TRUE; \\r
1939         }\r
1940 \r
1941 // void OnReflectedDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)\r
1942 #define MSG_OCM_DRAWITEM(func) \\r
1943         if (uMsg == OCM_DRAWITEM) \\r
1944         { \\r
1945                 SetMsgHandled(TRUE); \\r
1946                 func((UINT)wParam, (LPDRAWITEMSTRUCT)lParam); \\r
1947                 lResult = TRUE; \\r
1948                 if(IsMsgHandled()) \\r
1949                         return TRUE; \\r
1950         }\r
1951 \r
1952 // void OnReflectedMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)\r
1953 #define MSG_OCM_MEASUREITEM(func) \\r
1954         if (uMsg == OCM_MEASUREITEM) \\r
1955         { \\r
1956                 SetMsgHandled(TRUE); \\r
1957                 func((UINT)wParam, (LPMEASUREITEMSTRUCT)lParam); \\r
1958                 lResult = TRUE; \\r
1959                 if(IsMsgHandled()) \\r
1960                         return TRUE; \\r
1961         }\r
1962 \r
1963 // int OnReflectedCompareItem(int nIDCtl, LPCOMPAREITEMSTRUCT lpCompareItemStruct)\r
1964 #define MSG_OCM_COMPAREITEM(func) \\r
1965         if (uMsg == OCM_COMPAREITEM) \\r
1966         { \\r
1967                 SetMsgHandled(TRUE); \\r
1968                 lResult = (LRESULT)func((UINT)wParam, (LPCOMPAREITEMSTRUCT)lParam); \\r
1969                 if(IsMsgHandled()) \\r
1970                         return TRUE; \\r
1971         }\r
1972 \r
1973 // void OnReflectedDeleteItem(int nIDCtl, LPDELETEITEMSTRUCT lpDeleteItemStruct)\r
1974 #define MSG_OCM_DELETEITEM(func) \\r
1975         if (uMsg == OCM_DELETEITEM) \\r
1976         { \\r
1977                 SetMsgHandled(TRUE); \\r
1978                 func((UINT)wParam, (LPDELETEITEMSTRUCT)lParam); \\r
1979                 lResult = TRUE; \\r
1980                 if(IsMsgHandled()) \\r
1981                         return TRUE; \\r
1982         }\r
1983 \r
1984 // int OnReflectedVKeyToItem(UINT nKey, UINT nIndex, CListBox listBox)\r
1985 #define MSG_OCM_VKEYTOITEM(func) \\r
1986         if (uMsg == OCM_VKEYTOITEM) \\r
1987         { \\r
1988                 SetMsgHandled(TRUE); \\r
1989                 lResult = (LRESULT)func((UINT)LOWORD(wParam), (UINT)HIWORD(wParam), (HWND)lParam); \\r
1990                 if(IsMsgHandled()) \\r
1991                         return TRUE; \\r
1992         }\r
1993 \r
1994 //int OnReflectedCharToItem(UINT nChar, UINT nIndex, CListBox listBox)\r
1995 #define MSG_OCM_CHARTOITEM(func) \\r
1996         if (uMsg == OCM_CHARTOITEM) \\r
1997         { \\r
1998                 SetMsgHandled(TRUE); \\r
1999                 lResult = (LRESULT)func((UINT)LOWORD(wParam), (UINT)HIWORD(wParam), (HWND)lParam); \\r
2000                 if(IsMsgHandled()) \\r
2001                         return TRUE; \\r
2002         }\r
2003 \r
2004 // void OnReflectedHScroll(UINT nSBCode, UINT nPos, CScrollBar pScrollBar)\r
2005 #define MSG_OCM_HSCROLL(func) \\r
2006         if (uMsg == OCM_HSCROLL) \\r
2007         { \\r
2008                 SetMsgHandled(TRUE); \\r
2009                 func((int)LOWORD(wParam), (short)HIWORD(wParam), (HWND)lParam); \\r
2010                 lResult = 0; \\r
2011                 if(IsMsgHandled()) \\r
2012                         return TRUE; \\r
2013         }\r
2014 \r
2015 // void OnReflectedVScroll(UINT nSBCode, UINT nPos, CScrollBar pScrollBar)\r
2016 #define MSG_OCM_VSCROLL(func) \\r
2017         if (uMsg == OCM_VSCROLL) \\r
2018         { \\r
2019                 SetMsgHandled(TRUE); \\r
2020                 func((int)LOWORD(wParam), (short)HIWORD(wParam), (HWND)lParam); \\r
2021                 lResult = 0; \\r
2022                 if(IsMsgHandled()) \\r
2023                         return TRUE; \\r
2024         }\r
2025 \r
2026 // HBRUSH OnReflectedCtlColorEdit(CDCHandle dc, CEdit edit)\r
2027 #define MSG_OCM_CTLCOLOREDIT(func) \\r
2028         if (uMsg == OCM_CTLCOLOREDIT) \\r
2029         { \\r
2030                 SetMsgHandled(TRUE); \\r
2031                 lResult = (LRESULT)func((HDC)wParam, (HWND)lParam); \\r
2032                 if(IsMsgHandled()) \\r
2033                         return TRUE; \\r
2034         }\r
2035 \r
2036 // HBRUSH OnReflectedCtlColorListBox(CDCHandle dc, CListBox listBox)\r
2037 #define MSG_OCM_CTLCOLORLISTBOX(func) \\r
2038         if (uMsg == OCM_CTLCOLORLISTBOX) \\r
2039         { \\r
2040                 SetMsgHandled(TRUE); \\r
2041                 lResult = (LRESULT)func((HDC)wParam, (HWND)lParam); \\r
2042                 if(IsMsgHandled()) \\r
2043                         return TRUE; \\r
2044         }\r
2045 \r
2046 // HBRUSH OnReflectedCtlColorBtn(CDCHandle dc, CButton button)\r
2047 #define MSG_OCM_CTLCOLORBTN(func) \\r
2048         if (uMsg == OCM_CTLCOLORBTN) \\r
2049         { \\r
2050                 SetMsgHandled(TRUE); \\r
2051                 lResult = (LRESULT)func((HDC)wParam, (HWND)lParam); \\r
2052                 if(IsMsgHandled()) \\r
2053                         return TRUE; \\r
2054         }\r
2055 \r
2056 // HBRUSH OnReflectedCtlColorDlg(CDCHandle dc, CWindow wnd)\r
2057 #define MSG_OCM_CTLCOLORDLG(func) \\r
2058         if (uMsg == OCM_CTLCOLORDLG) \\r
2059         { \\r
2060                 SetMsgHandled(TRUE); \\r
2061                 lResult = (LRESULT)func((HDC)wParam, (HWND)lParam); \\r
2062                 if(IsMsgHandled()) \\r
2063                         return TRUE; \\r
2064         }\r
2065 \r
2066 // HBRUSH OnReflectedCtlColorScrollBar(CDCHandle dc, CScrollBar scrollBar)\r
2067 #define MSG_OCM_CTLCOLORSCROLLBAR(func) \\r
2068         if (uMsg == OCM_CTLCOLORSCROLLBAR) \\r
2069         { \\r
2070                 SetMsgHandled(TRUE); \\r
2071                 lResult = (LRESULT)func((HDC)wParam, (HWND)lParam); \\r
2072                 if(IsMsgHandled()) \\r
2073                         return TRUE; \\r
2074         }\r
2075 \r
2076 // HBRUSH OnReflectedCtlColorStatic(CDCHandle dc, CStatic wndStatic)\r
2077 #define MSG_OCM_CTLCOLORSTATIC(func) \\r
2078         if (uMsg == OCM_CTLCOLORSTATIC) \\r
2079         { \\r
2080                 SetMsgHandled(TRUE); \\r
2081                 lResult = (LRESULT)func((HDC)wParam, (HWND)lParam); \\r
2082                 if(IsMsgHandled()) \\r
2083                         return TRUE; \\r
2084         }\r
2085 \r
2086 ///////////////////////////////////////////////////////////////////////////////\r
2087 // Edit specific messages\r
2088 \r
2089 // void OnClear()\r
2090 #define MSG_WM_CLEAR(func) \\r
2091         if (uMsg == WM_CLEAR) \\r
2092         { \\r
2093                 SetMsgHandled(TRUE); \\r
2094                 func(); \\r
2095                 lResult = 0; \\r
2096                 if(IsMsgHandled()) \\r
2097                         return TRUE; \\r
2098         }\r
2099 \r
2100 // void OnCopy()\r
2101 #define MSG_WM_COPY(func) \\r
2102         if (uMsg == WM_COPY) \\r
2103         { \\r
2104                 SetMsgHandled(TRUE); \\r
2105                 func(); \\r
2106                 lResult = 0; \\r
2107                 if(IsMsgHandled()) \\r
2108                         return TRUE; \\r
2109         }\r
2110 \r
2111 // void OnCut()\r
2112 #define MSG_WM_CUT(func) \\r
2113         if (uMsg == WM_CUT) \\r
2114         { \\r
2115                 SetMsgHandled(TRUE); \\r
2116                 func(); \\r
2117                 lResult = 0; \\r
2118                 if(IsMsgHandled()) \\r
2119                         return TRUE; \\r
2120         }\r
2121 \r
2122 // void OnPaste()\r
2123 #define MSG_WM_PASTE(func) \\r
2124         if (uMsg == WM_PASTE) \\r
2125         { \\r
2126                 SetMsgHandled(TRUE); \\r
2127                 func(); \\r
2128                 lResult = 0; \\r
2129                 if(IsMsgHandled()) \\r
2130                         return TRUE; \\r
2131         }\r
2132 \r
2133 // void OnUndo()\r
2134 #define MSG_WM_UNDO(func) \\r
2135         if (uMsg == WM_UNDO) \\r
2136         { \\r
2137                 SetMsgHandled(TRUE); \\r
2138                 func(); \\r
2139                 lResult = 0; \\r
2140                 if(IsMsgHandled()) \\r
2141                         return TRUE; \\r
2142         }\r
2143 \r
2144 ///////////////////////////////////////////////////////////////////////////////\r
2145 // Generic message handlers\r
2146 \r
2147 // LRESULT OnMessageHandlerEX(UINT uMsg, WPARAM wParam, LPARAM lParam)\r
2148 #define MESSAGE_HANDLER_EX(msg, func) \\r
2149         if(uMsg == msg) \\r
2150         { \\r
2151                 SetMsgHandled(TRUE); \\r
2152                 lResult = func(uMsg, wParam, lParam); \\r
2153                 if(IsMsgHandled()) \\r
2154                         return TRUE; \\r
2155         }\r
2156 \r
2157 // LRESULT OnMessageRangeHandlerEX(UINT uMsg, WPARAM wParam, LPARAM lParam)\r
2158 #define MESSAGE_RANGE_HANDLER_EX(msgFirst, msgLast, func) \\r
2159         if(uMsg >= msgFirst && uMsg <= msgLast) \\r
2160         { \\r
2161                 SetMsgHandled(TRUE); \\r
2162                 lResult = func(uMsg, wParam, lParam); \\r
2163                 if(IsMsgHandled()) \\r
2164                         return TRUE; \\r
2165         }\r
2166 \r
2167 ///////////////////////////////////////////////////////////////////////////////\r
2168 // Commands and notifications\r
2169 \r
2170 // void OnCommandHandlerEX(UINT uNotifyCode, int nID, CWindow wndCtl)\r
2171 #define COMMAND_HANDLER_EX(id, code, func) \\r
2172         if (uMsg == WM_COMMAND && code == HIWORD(wParam) && id == LOWORD(wParam)) \\r
2173         { \\r
2174                 SetMsgHandled(TRUE); \\r
2175                 func((UINT)HIWORD(wParam), (int)LOWORD(wParam), (HWND)lParam); \\r
2176                 lResult = 0; \\r
2177                 if(IsMsgHandled()) \\r
2178                         return TRUE; \\r
2179         }\r
2180 \r
2181 // void OnCommandIDHandlerEX(UINT uNotifyCode, int nID, CWindow wndCtl)\r
2182 #define COMMAND_ID_HANDLER_EX(id, func) \\r
2183         if (uMsg == WM_COMMAND && id == LOWORD(wParam)) \\r
2184         { \\r
2185                 SetMsgHandled(TRUE); \\r
2186                 func((UINT)HIWORD(wParam), (int)LOWORD(wParam), (HWND)lParam); \\r
2187                 lResult = 0; \\r
2188                 if(IsMsgHandled()) \\r
2189                         return TRUE; \\r
2190         }\r
2191 \r
2192 // void OnCommandCodeHandlerEX(UINT uNotifyCode, int nID, CWindow wndCtl)\r
2193 #define COMMAND_CODE_HANDLER_EX(code, func) \\r
2194         if (uMsg == WM_COMMAND && code == HIWORD(wParam)) \\r
2195         { \\r
2196                 SetMsgHandled(TRUE); \\r
2197                 func((UINT)HIWORD(wParam), (int)LOWORD(wParam), (HWND)lParam); \\r
2198                 lResult = 0; \\r
2199                 if(IsMsgHandled()) \\r
2200                         return TRUE; \\r
2201         }\r
2202 \r
2203 // LRESULT OnNotifyHandlerEX(LPNMHDR pnmh)\r
2204 #define NOTIFY_HANDLER_EX(id, cd, func) \\r
2205         if (uMsg == WM_NOTIFY && cd == ((LPNMHDR)lParam)->code && id == ((LPNMHDR)lParam)->idFrom) \\r
2206         { \\r
2207                 SetMsgHandled(TRUE); \\r
2208                 lResult = func((LPNMHDR)lParam); \\r
2209                 if(IsMsgHandled()) \\r
2210                         return TRUE; \\r
2211         }\r
2212 \r
2213 // LRESULT OnNotifyIDHandlerEX(LPNMHDR pnmh)\r
2214 #define NOTIFY_ID_HANDLER_EX(id, func) \\r
2215         if (uMsg == WM_NOTIFY && id == ((LPNMHDR)lParam)->idFrom) \\r
2216         { \\r
2217                 SetMsgHandled(TRUE); \\r
2218                 lResult = func((LPNMHDR)lParam); \\r
2219                 if(IsMsgHandled()) \\r
2220                         return TRUE; \\r
2221         }\r
2222 \r
2223 // LRESULT OnNotifyCodeHandlerEX(LPNMHDR pnmh)\r
2224 #define NOTIFY_CODE_HANDLER_EX(cd, func) \\r
2225         if (uMsg == WM_NOTIFY && cd == ((LPNMHDR)lParam)->code) \\r
2226         { \\r
2227                 SetMsgHandled(TRUE); \\r
2228                 lResult = func((LPNMHDR)lParam); \\r
2229                 if(IsMsgHandled()) \\r
2230                         return TRUE; \\r
2231         }\r
2232 \r
2233 // void OnCommandRangeHandlerEX(UINT uNotifyCode, int nID, CWindow wndCtl)\r
2234 #define COMMAND_RANGE_HANDLER_EX(idFirst, idLast, func) \\r
2235         if(uMsg == WM_COMMAND && LOWORD(wParam) >= idFirst && LOWORD(wParam) <= idLast) \\r
2236         { \\r
2237                 SetMsgHandled(TRUE); \\r
2238                 func((UINT)HIWORD(wParam), (int)LOWORD(wParam), (HWND)lParam); \\r
2239                 lResult = 0; \\r
2240                 if(IsMsgHandled()) \\r
2241                         return TRUE; \\r
2242         }\r
2243 \r
2244 // void OnCommandRangeCodeHandlerEX(UINT uNotifyCode, int nID, CWindow wndCtl)\r
2245 #define COMMAND_RANGE_CODE_HANDLER_EX(idFirst, idLast, code, func) \\r
2246         if(uMsg == WM_COMMAND && code == HIWORD(wParam) && LOWORD(wParam) >= idFirst && LOWORD(wParam) <= idLast) \\r
2247         { \\r
2248                 SetMsgHandled(TRUE); \\r
2249                 func((UINT)HIWORD(wParam), (int)LOWORD(wParam), (HWND)lParam); \\r
2250                 lResult = 0; \\r
2251                 if(IsMsgHandled()) \\r
2252                         return TRUE; \\r
2253         }\r
2254 \r
2255 // LRESULT OnNotifyRangeHandlerEX(LPNMHDR pnmh)\r
2256 #define NOTIFY_RANGE_HANDLER_EX(idFirst, idLast, func) \\r
2257         if(uMsg == WM_NOTIFY && ((LPNMHDR)lParam)->idFrom >= idFirst && ((LPNMHDR)lParam)->idFrom <= idLast) \\r
2258         { \\r
2259                 SetMsgHandled(TRUE); \\r
2260                 lResult = func((LPNMHDR)lParam); \\r
2261                 if(IsMsgHandled()) \\r
2262                         return TRUE; \\r
2263         }\r
2264 \r
2265 // LRESULT OnNotifyRangeCodeHandlerEX(LPNMHDR pnmh)\r
2266 #define NOTIFY_RANGE_CODE_HANDLER_EX(idFirst, idLast, cd, func) \\r
2267         if(uMsg == WM_NOTIFY && cd == ((LPNMHDR)lParam)->code && ((LPNMHDR)lParam)->idFrom >= idFirst && ((LPNMHDR)lParam)->idFrom <= idLast) \\r
2268         { \\r
2269                 SetMsgHandled(TRUE); \\r
2270                 lResult = func((LPNMHDR)lParam); \\r
2271                 if(IsMsgHandled()) \\r
2272                         return TRUE; \\r
2273         }\r
2274 \r
2275 // LRESULT OnReflectedCommandHandlerEX(UINT uNotifyCode, int nID, CWindow wndCtl)\r
2276 #define REFLECTED_COMMAND_HANDLER_EX(id, code, func) \\r
2277         if (uMsg == OCM_COMMAND && code == HIWORD(wParam) && id == LOWORD(wParam)) \\r
2278         { \\r
2279                 SetMsgHandled(TRUE); \\r
2280                 func((UINT)HIWORD(wParam), (int)LOWORD(wParam), (HWND)lParam); \\r
2281                 lResult = 0; \\r
2282                 if(IsMsgHandled()) \\r
2283                         return TRUE; \\r
2284         }\r
2285 \r
2286 // LRESULT OnReflectedCommandIDHandlerEX(UINT uNotifyCode, int nID, CWindow wndCtl)\r
2287 #define REFLECTED_COMMAND_ID_HANDLER_EX(id, func) \\r
2288         if (uMsg == OCM_COMMAND && id == LOWORD(wParam)) \\r
2289         { \\r
2290                 SetMsgHandled(TRUE); \\r
2291                 func((UINT)HIWORD(wParam), (int)LOWORD(wParam), (HWND)lParam); \\r
2292                 lResult = 0; \\r
2293                 if(IsMsgHandled()) \\r
2294                         return TRUE; \\r
2295         }\r
2296 \r
2297 // LRESULT OnReflectedCommandCodeHandlerEX(UINT uNotifyCode, int nID, CWindow wndCtl)\r
2298 #define REFLECTED_COMMAND_CODE_HANDLER_EX(code, func) \\r
2299         if (uMsg == OCM_COMMAND && code == HIWORD(wParam)) \\r
2300         { \\r
2301                 SetMsgHandled(TRUE); \\r
2302                 func((UINT)HIWORD(wParam), (int)LOWORD(wParam), (HWND)lParam); \\r
2303                 lResult = 0; \\r
2304                 if(IsMsgHandled()) \\r
2305                         return TRUE; \\r
2306         }\r
2307 \r
2308 // LRESULT OnReflectedNotifyHandlerEX(LPNMHDR pnmh)\r
2309 #define REFLECTED_NOTIFY_HANDLER_EX(id, cd, func) \\r
2310         if (uMsg == OCM_NOTIFY && cd == ((LPNMHDR)lParam)->code && id == ((LPNMHDR)lParam)->idFrom) \\r
2311         { \\r
2312                 SetMsgHandled(TRUE); \\r
2313                 lResult = func((LPNMHDR)lParam); \\r
2314                 if(IsMsgHandled()) \\r
2315                         return TRUE; \\r
2316         }\r
2317 \r
2318 // LRESULT OnReflectedNotifyIDHandlerEX(LPNMHDR pnmh)\r
2319 #define REFLECTED_NOTIFY_ID_HANDLER_EX(id, func) \\r
2320         if (uMsg == OCM_NOTIFY && id == ((LPNMHDR)lParam)->idFrom) \\r
2321         { \\r
2322                 SetMsgHandled(TRUE); \\r
2323                 lResult = func((LPNMHDR)lParam); \\r
2324                 if(IsMsgHandled()) \\r
2325                         return TRUE; \\r
2326         }\r
2327 \r
2328 // LRESULT OnReflectedNotifyCodeHandlerEX(LPNMHDR pnmh)\r
2329 #define REFLECTED_NOTIFY_CODE_HANDLER_EX(cd, func) \\r
2330         if (uMsg == OCM_NOTIFY && cd == ((LPNMHDR)lParam)->code) \\r
2331         { \\r
2332                 SetMsgHandled(TRUE); \\r
2333                 lResult = func((LPNMHDR)lParam); \\r
2334                 if(IsMsgHandled()) \\r
2335                         return TRUE; \\r
2336         }\r
2337 \r
2338 // void OnReflectedCommandRangeHandlerEX(UINT uNotifyCode, int nID, CWindow wndCtl)\r
2339 #define REFLECTED_COMMAND_RANGE_HANDLER_EX(idFirst, idLast, func) \\r
2340         if(uMsg == OCM_COMMAND && LOWORD(wParam) >= idFirst && LOWORD(wParam) <= idLast) \\r
2341         { \\r
2342                 SetMsgHandled(TRUE); \\r
2343                 func((UINT)HIWORD(wParam), (int)LOWORD(wParam), (HWND)lParam); \\r
2344                 lResult = 0; \\r
2345                 if(IsMsgHandled()) \\r
2346                         return TRUE; \\r
2347         }\r
2348 \r
2349 // void OnReflectedCommandRangeCodeHandlerEX(UINT uNotifyCode, int nID, CWindow wndCtl)\r
2350 #define REFLECTED_COMMAND_RANGE_CODE_HANDLER_EX(idFirst, idLast, code, func) \\r
2351         if(uMsg == OCM_COMMAND && code == HIWORD(wParam) && LOWORD(wParam) >= idFirst && LOWORD(wParam) <= idLast) \\r
2352         { \\r
2353                 SetMsgHandled(TRUE); \\r
2354                 func((UINT)HIWORD(wParam), (int)LOWORD(wParam), (HWND)lParam); \\r
2355                 lResult = 0; \\r
2356                 if(IsMsgHandled()) \\r
2357                         return TRUE; \\r
2358         }\r
2359 \r
2360 // LRESULT OnReflectedNotifyRangeHandlerEX(LPNMHDR pnmh)\r
2361 #define REFLECTED_NOTIFY_RANGE_HANDLER_EX(idFirst, idLast, func) \\r
2362         if(uMsg == OCM_NOTIFY && ((LPNMHDR)lParam)->idFrom >= idFirst && ((LPNMHDR)lParam)->idFrom <= idLast) \\r
2363         { \\r
2364                 SetMsgHandled(TRUE); \\r
2365                 lResult = func((LPNMHDR)lParam); \\r
2366                 if(IsMsgHandled()) \\r
2367                         return TRUE; \\r
2368         }\r
2369 \r
2370 // LRESULT OnReflectedNotifyRangeCodeHandlerEX(LPNMHDR pnmh)\r
2371 #define REFLECTED_NOTIFY_RANGE_CODE_HANDLER_EX(idFirst, idLast, cd, func) \\r
2372         if(uMsg == OCM_NOTIFY && cd == ((LPNMHDR)lParam)->code && ((LPNMHDR)lParam)->idFrom >= idFirst && ((LPNMHDR)lParam)->idFrom <= idLast) \\r
2373         { \\r
2374                 SetMsgHandled(TRUE); \\r
2375                 lResult = func((LPNMHDR)lParam); \\r
2376                 if(IsMsgHandled()) \\r
2377                         return TRUE; \\r
2378         }\r
2379 \r
2380 #endif // __ATLCRACK_H__\r