ReactOS  0.4.13-dev-73-gcfe54aa
atlwin.h
Go to the documentation of this file.
1 /*
2  * ReactOS ATL
3  *
4  * Copyright 2009 Andrew Hill <ash77@reactos.org>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #pragma once
22 
23 #if defined(__GNUC__) || defined(__clang__)
24 #define GCCU(x) x __attribute__((unused))
25 #define Unused(x)
26 #else
27 #define GCCU(x) (x)
28 #define Unused(x) (x);
29 #endif // __GNUC__
30 
31 #if !defined(_WIN64)
32 #ifdef SetWindowLongPtr
33 #undef SetWindowLongPtr
34 inline LONG_PTR SetWindowLongPtr(HWND hWnd, int nIndex, LONG_PTR dwNewLong)
35 {
36  return SetWindowLong(hWnd, nIndex, (LONG)dwNewLong);
37 }
38 #endif
39 
40 #ifdef GetWindowLongPtr
41 #undef GetWindowLongPtr
42 inline LONG_PTR GetWindowLongPtr(HWND hWnd, int nIndex)
43 {
44  return (LONG_PTR)GetWindowLong(hWnd, nIndex);
45 }
46 #endif
47 #endif // !_WIN64
48 
49 #pragma push_macro("SubclassWindow")
50 #undef SubclassWindow
51 
52 namespace ATL
53 {
54 
55 #ifndef GET_X_LPARAM
56 #define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp))
57 #endif
58 #ifndef GET_Y_LPARAM
59 #define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp))
60 #endif
61 
62 
63 
66 
67 template <DWORD t_dwStyle = 0, DWORD t_dwExStyle = 0>
69 {
70 public:
71  static DWORD GetWndStyle(DWORD dwStyle)
72  {
73  if (dwStyle == 0)
74  return t_dwStyle;
75  return dwStyle;
76  }
77 
78  static DWORD GetWndExStyle(DWORD dwExStyle)
79  {
80  if (dwExStyle == 0)
81  return t_dwExStyle;
82  return dwExStyle;
83  }
84 };
85 
89 
90 template <DWORD t_dwStyle = 0, DWORD t_dwExStyle = 0, class TWinTraits = CControlWinTraits>
92 {
93 public:
94  static DWORD GetWndStyle(DWORD dwStyle)
95  {
96  return dwStyle | t_dwStyle | TWinTraits::GetWndStyle(dwStyle);
97  }
98 
99  static DWORD GetWndExStyle(DWORD dwExStyle)
100  {
101  return dwExStyle | t_dwExStyle | TWinTraits::GetWndExStyle(dwExStyle);
102  }
103 };
104 
106 {
107 public:
109 public:
111  {
112  m_hMenu = hMenu;
113  }
114 
116  {
117  m_hMenu = (HMENU)(UINT_PTR)nID;
118  }
119 };
120 
121 class _U_RECT
122 {
123 public:
125 public:
126  _U_RECT(LPRECT lpRect)
127  {
128  m_lpRect = lpRect;
129  }
130 
132  {
133  m_lpRect = &rc;
134  }
135 };
136 
137 struct _ATL_MSG : public MSG
138 {
139 public:
141 public:
142  _ATL_MSG(HWND hWnd, UINT uMsg, WPARAM wParamIn, LPARAM lParamIn, BOOL bHandledIn = TRUE)
143  {
144  hwnd = hWnd;
145  message = uMsg;
146  wParam = wParamIn;
147  lParam = lParamIn;
148  time = 0;
149  pt.x = 0;
150  pt.y = 0;
151  bHandled = bHandledIn;
152  }
153 };
154 
155 #if defined(_M_IX86)
156 
157 #pragma pack(push,1)
158 struct thunkCode
159 {
160  DWORD m_mov; /* mov dword ptr [esp+4], m_this */
161  DWORD m_this;
162  BYTE m_jmp; /* jmp relproc */
163  DWORD m_relproc;
164 
165  void
166  Init(WNDPROC proc, void *pThis)
167  {
168  m_mov = 0x042444C7;
169  m_this = PtrToUlong(pThis);
170  m_jmp = 0xe9;
171  m_relproc = DWORD(reinterpret_cast<char *>(proc) - (reinterpret_cast<char *>(this) + sizeof(thunkCode)));
172  FlushInstructionCache(GetCurrentProcess(), this, sizeof(thunkCode));
173  }
174 };
175 #pragma pack(pop)
176 
177 #elif defined(_AMD64_)
178 
179 #pragma pack(push,1)
180 struct thunkCode
181 {
182  USHORT m_mov_rcx; /* mov rcx, m_this */
183  ULONG64 m_this;
184  USHORT m_mov_rax; /* mov rax, m_proc */
185  ULONG64 m_proc;
186  USHORT m_jmp; /* jmp rax */
187 
188  void
189  Init(WNDPROC proc, void *pThis)
190  {
191  m_mov_rcx = 0xb948;
192  m_this = (ULONG64)pThis;
193  m_mov_rax = 0xb848;
194  m_proc = (ULONG64)proc;
195  m_jmp = 0xe0ff;
196  FlushInstructionCache(GetCurrentProcess(), this, sizeof(thunkCode));
197  }
198 };
199 #pragma pack(pop)
200 
201 #elif defined(_M_ARM)
202 
203 #pragma pack(push,4)
204 struct thunkCode
205 {
206  DWORD m_mov_r0; /* mov r0, m_this */
207  DWORD m_mov_pc; /* mov pc, m_proc */
208  DWORD m_this;
209  DWORD m_proc;
210 
211  void
212  Init(WNDPROC proc, void *pThis)
213  {
214  m_mov_r0 = 0xE59F0000;
215  m_mov_pc = 0xE59FF000;
216  m_this = (DWORD)pThis;
217  m_proc = (DWORD)proc;
218  FlushInstructionCache(GetCurrentProcess(), this, sizeof(thunkCode));
219  }
220 };
221 #pragma pack(pop)
222 
223 #else
224 #error ARCH not supported
225 #endif
226 
228 {
229 public:
230  thunkCode *m_pthunk;
232 public:
233 
235  {
236  m_pthunk = (thunkCode*)VirtualAlloc(NULL, sizeof(thunkCode), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
237  }
238 
240  {
241  if (m_pthunk != NULL)
243  }
244 
245  BOOL Init(WNDPROC proc, void *pThis)
246  {
247  if (m_pthunk == NULL)
248  return FALSE;
249  m_pthunk->Init(proc, pThis);
250  return TRUE;
251  }
252 
254  {
255  return reinterpret_cast<WNDPROC>(m_pthunk);
256  }
257 };
258 
260 {
261 public:
262  virtual BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult, DWORD dwMsgMapID) = 0;
263 };
264 
265 class CWindow
266 {
267 public:
269  static RECT rcDefault;
270 public:
272  {
273  m_hWnd = hWnd;
274  }
275 
276  operator HWND() const
277  {
278  return m_hWnd;
279  }
280 
282  {
283  return NULL;
284  }
285 
287  {
290  }
291 
292  void Attach(HWND hWndNew)
293  {
294  m_hWnd = hWndNew;
295  }
296 
298  {
300  return ::BeginPaint(m_hWnd, lpPaint);
301  }
302 
304  {
307  }
308 
309  BOOL CenterWindow(HWND hWndCenter = NULL)
310  {
312  if (hWndCenter == NULL)
313  hWndCenter = ::GetParent(m_hWnd);
314  if (hWndCenter == NULL)
315  return FALSE;
316  RECT wndCenterRect, wndRect;
317  if (!::GetWindowRect(hWndCenter, &wndCenterRect) || !::GetWindowRect(m_hWnd, &wndRect))
318  return FALSE;
319  int wndCenterWidth = wndCenterRect.right - wndCenterRect.left;
320  int wndCenterHeight = wndCenterRect.bottom - wndCenterRect.top;
321  int wndWidth = wndRect.right - wndRect.left;
322  int wndHeight = wndRect.bottom - wndRect.top;
324  wndCenterRect.left + ((wndCenterWidth - wndWidth + 1) >> 1),
325  wndCenterRect.top + ((wndCenterHeight - wndHeight + 1) >> 1),
326  wndWidth, wndHeight, TRUE);
327  }
328 
330  {
333  }
334 
335  BOOL CheckDlgButton(int nIDButton, UINT nCheck)
336  {
338  return ::CheckDlgButton(m_hWnd, nIDButton, nCheck);
339  }
340 
341  BOOL CheckRadioButton(int nIDFirstButton, int nIDLastButton, int nIDCheckButton)
342  {
344  return ::CheckRadioButton(m_hWnd, nIDFirstButton, nIDLastButton, nIDCheckButton);
345  }
346 
348  {
351  }
352 
354  {
357  }
358 
359  BOOL ClientToScreen(LPPOINT lpPoint) const
360  {
363  }
364 
365  BOOL ClientToScreen(LPRECT lpRect) const
366  {
367  if (lpRect == NULL)
368  return FALSE;
370  POINT leftTop = {lpRect->left, lpRect->top};
371  POINT rightBottom = {lpRect->right, lpRect->bottom};
372  BOOL success = ::ClientToScreen(m_hWnd, &leftTop) && ::ClientToScreen(m_hWnd, &rightBottom);
373  if (success)
374  {
375  lpRect->left = leftTop.x;
376  lpRect->top = leftTop.y;
377  lpRect->right = rightBottom.x;
378  lpRect->bottom = rightBottom.y;
379  }
380  return success;
381  }
382 
383  HWND Create(LPCTSTR lpstrWndClass, HWND hWndParent, _U_RECT rect = NULL, LPCTSTR szWindowName = NULL, DWORD dwStyle = 0, DWORD dwExStyle = 0, _U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
384  {
385  HWND hWnd;
386  ATLASSERT(m_hWnd == NULL);
387  hWnd = ::CreateWindowEx(dwExStyle,
388  lpstrWndClass,
389  szWindowName,
390  dwStyle,
391  rect.m_lpRect->left,
392  rect.m_lpRect->top,
393  rect.m_lpRect->right - rect.m_lpRect->left,
394  rect.m_lpRect->bottom - rect.m_lpRect->top,
395  hWndParent,
396  MenuOrID.m_hMenu,
397  _AtlBaseModule.GetModuleInstance(),
398  lpCreateParam);
399  if (hWnd != NULL)
400  m_hWnd = hWnd;
401  return hWnd;
402  }
403 
405  {
407  return ::CreateCaret(m_hWnd, pBitmap, 0, 0);
408  }
409 
410  BOOL CreateGrayCaret(int nWidth, int nHeight)
411  {
413  return ::CreateCaret(m_hWnd, (HBITMAP)1, nWidth, nHeight);
414  }
415 
416  BOOL CreateSolidCaret(int nWidth, int nHeight)
417  {
419  return ::CreateCaret(m_hWnd, (HBITMAP)0, nWidth, nHeight);
420  }
421 
422  HDWP DeferWindowPos(HDWP hWinPosInfo, HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT uFlags)
423  {
425  return ::DeferWindowPos(hWinPosInfo, m_hWnd, hWndInsertAfter, x, y, cx, cy, uFlags);
426  }
427 
429  {
431 
432  if (!::DestroyWindow(m_hWnd))
433  return FALSE;
434 
435  m_hWnd = NULL;
436  return TRUE;
437  }
438 
440  {
441  HWND hWnd = m_hWnd;
442  m_hWnd = NULL;
443  return hWnd;
444  }
445 
446  int DlgDirList(LPTSTR lpPathSpec, int nIDListBox, int nIDStaticPath, UINT nFileType)
447  {
449  return ::DlgDirList(m_hWnd, lpPathSpec, nIDListBox, nIDStaticPath, nFileType);
450  }
451 
452  int DlgDirListComboBox(LPTSTR lpPathSpec, int nIDComboBox, int nIDStaticPath, UINT nFileType)
453  {
455  return ::DlgDirListComboBox(m_hWnd, lpPathSpec, nIDComboBox, nIDStaticPath, nFileType);
456  }
457 
458  BOOL DlgDirSelect(LPTSTR lpString, int nCount, int nIDListBox)
459  {
461  return ::DlgDirSelectEx(m_hWnd, lpString, nCount, nIDListBox);
462  }
463 
464  BOOL DlgDirSelectComboBox(LPTSTR lpString, int nCount, int nIDComboBox)
465  {
467  return ::DlgDirSelectComboBoxEx(m_hWnd, lpString, nCount, nIDComboBox);
468  }
469 
470  void DragAcceptFiles(BOOL bAccept = TRUE)
471  {
473 // FIXME following line requires shellapi.h
474 // ::DragAcceptFiles(m_hWnd, bAccept);
475  }
476 
478  {
481  }
482 
483  BOOL EnableScrollBar(UINT uSBFlags, UINT uArrowFlags = ESB_ENABLE_BOTH)
484  {
486  return ::EnableScrollBar(m_hWnd, uSBFlags, uArrowFlags);
487  }
488 
490  {
493  }
494 
495  void EndPaint(LPPAINTSTRUCT lpPaint)
496  {
498  ::EndPaint(m_hWnd, lpPaint);
499  }
500 
502  {
505  }
506 
507  BOOL GetClientRect(LPRECT lpRect) const
508  {
511  }
512 
514  {
517  }
518 
519  HDC GetDCEx(HRGN hRgnClip, DWORD flags)
520  {
522  return ::GetDCEx(m_hWnd, hRgnClip, flags);
523  }
524 
525 private:
526  typedef struct _IDHWNDPAIR {
527  int nID;
530 
532  {
533  if (::GetWindowLong(hWnd, GWL_ID) == ((PIDHWNDPAIR)lParam)->nID)
534  {
535  ((PIDHWNDPAIR)lParam)->hWnd = hWnd;
536  return FALSE;
537  }
539  return (((PIDHWNDPAIR)lParam)->hWnd == NULL);
540  }
541 
542 public:
543  HWND GetDescendantWindow(int nID) const
544  {
546  IDHWNDPAIR idHWndPair;
547  idHWndPair.nID = nID;
548  idHWndPair.hWnd = NULL;
550  return idHWndPair.hWnd;
551  }
552 
553  HRESULT GetDlgControl(int nID, REFIID iid, void** ppCtrl)
554  {
556  return E_FAIL;//FIXME stub
557  }
558 
559  int GetDlgCtrlID() const
560  {
563  }
564 
565  HRESULT GetDlgHost(int nID, REFIID iid, void** ppHost)
566  {
568  return E_FAIL;//FIXME stub
569  }
570 
571  HWND GetDlgItem(int nID)
572  {
575  }
576 
577  UINT GetDlgItemInt(int nID, BOOL* lpTrans = NULL, BOOL bSigned = TRUE) const
578  {
580  return ::GetDlgItemInt(m_hWnd, nID, lpTrans, bSigned);
581  }
582 
583  UINT GetDlgItemText(int nID, LPTSTR lpStr, int nMaxCount) const
584  {
587  }
588 
589 #ifdef __ATLSTR_H__
590  UINT GetDlgItemText(int nID, CSimpleString& string)
591  {
592  HWND item = GetDlgItem(nID);
594  len = GetDlgItemText(nID, string.GetBuffer(len+1), len+1);
595  string.ReleaseBuffer(len);
596  return len;
597  }
598 #endif
599 
600  BOOL GetDlgItemText(int nID, BSTR& bstrText) const
601  {
603  return FALSE;//FIXME stub
604  }
605 
607  {
610  }
611 
612  HFONT GetFont() const
613  {
615  return (HFONT)::SendMessage(m_hWnd, WM_GETFONT, 0, 0);
616  }
617 
618  DWORD GetHotKey() const
619  {
621  return (DWORD)::SendMessage(m_hWnd, WM_GETHOTKEY, 0, 0);
622  }
623 
624  HICON GetIcon(BOOL bBigIcon = TRUE) const
625  {
627  return (HICON)::SendMessage(m_hWnd, WM_GETICON, (WPARAM)bBigIcon, 0);
628  }
629 
631  {
634  }
635 
636  HMENU GetMenu() const
637  {
640  }
641 
642  HWND GetNextDlgGroupItem(HWND hWndCtl, BOOL bPrevious = FALSE) const
643  {
645  return ::GetNextDlgGroupItem(m_hWnd, hWndCtl, bPrevious);
646  }
647 
648  HWND GetNextDlgTabItem(HWND hWndCtl, BOOL bPrevious = FALSE) const
649  {
651  return ::GetNextDlgTabItem(m_hWnd, hWndCtl, bPrevious);
652  }
653 
655  {
657  return CWindow(::GetParent(m_hWnd));
658  }
659 
660  BOOL GetScrollInfo(int nBar, LPSCROLLINFO lpScrollInfo)
661  {
663  return ::GetScrollInfo(m_hWnd, nBar, lpScrollInfo);
664  }
665 
666  BOOL GetScrollPos(int nBar)
667  {
670  }
671 
672  BOOL GetScrollRange(int nBar, LPINT lpMinPos, LPINT lpMaxPos) const
673  {
675  return ::GetScrollRange(m_hWnd, nBar, lpMinPos, lpMaxPos);
676  }
677 
678  DWORD GetStyle() const
679  {
682  }
683 
685  {
687  return ::GetSystemMenu(m_hWnd, bRevert);
688  }
689 
691  {
693  return NULL;//FIXME stub
694  }
695 
697  {
699  return NULL;//FIXME stub
700  }
701 
703  {
706  }
707 
708  BOOL GetUpdateRect(LPRECT lpRect, BOOL bErase = FALSE)
709  {
711  return ::GetUpdateRect(m_hWnd, lpRect, bErase);
712  }
713 
714  int GetUpdateRgn(HRGN hRgn, BOOL bErase = FALSE)
715  {
718  }
719 
720  HWND GetWindow(UINT nCmd) const
721  {
723  return ::GetWindow(m_hWnd, nCmd);
724  }
725 
727  {
730  }
731 
733  {
736  }
737 
738  LONG GetWindowLong(int nIndex) const
739  {
742  }
743 
744  LONG_PTR GetWindowLongPtr(int nIndex) const
745  {
748  }
749 
751  {
754  }
755 
757  {
759  DWORD processID;
760  ::GetWindowThreadProcessId(m_hWnd, &processID);
761  return processID;
762  }
763 
764  BOOL GetWindowRect(LPRECT lpRect) const
765  {
768  }
769 
770  int GetWindowRgn(HRGN hRgn)
771  {
774  }
775 
776  int GetWindowText(LPTSTR lpszStringBuf, int nMaxCount) const
777  {
779  return ::GetWindowText(m_hWnd, lpszStringBuf, nMaxCount);
780  }
781 
783  {
786  if (!SysReAllocStringLen(&bstrText, NULL, length))
787  return FALSE;
788  ::GetWindowText(m_hWnd, (LPTSTR)&bstrText[2], length);
789  return TRUE;
790  }
791 
793  {
796  }
797 
799  {
802  }
803 
804  WORD GetWindowWord(int nIndex) const
805  {
807  return (WORD)::GetWindowLong(m_hWnd, nIndex);
808  }
809 
810  void GotoDlgCtrl(HWND hWndCtrl) const
811  {
814  }
815 
817  {
820  }
821 
822  BOOL HiliteMenuItem(HMENU hMenu, UINT uHiliteItem, UINT uHilite)
823  {
825  return ::HiliteMenuItem(m_hWnd, hMenu, uHiliteItem, uHilite);
826  }
827 
829  {
832  }
833 
834  BOOL InvalidateRect(LPCRECT lpRect, BOOL bErase = TRUE)
835  {
837  return ::InvalidateRect(m_hWnd, lpRect, bErase);
838  }
839 
840  void InvalidateRgn(HRGN hRgn, BOOL bErase = TRUE)
841  {
843  ::InvalidateRgn(m_hWnd, hRgn, bErase);
844  }
845 
846  BOOL IsChild(const HWND hWnd) const
847  {
850  }
851 
853  {
856  }
857 
858  UINT IsDlgButtonChecked(int nIDButton) const
859  {
862  }
863 
864  BOOL IsIconic() const
865  {
868  }
869 
871  {
873  TCHAR pszType[10];
874  if (!RealGetWindowClass(::GetParent(m_hWnd), pszType, sizeof(pszType) / sizeof(pszType[0])))
875  return FALSE;
876  return !_tcscmp(pszType, _T("#32770"));
877  }
878 
879  BOOL IsWindow() const
880  {
882  }
883 
885  {
888  }
889 
891  {
894  }
895 
897  {
900  }
901 
902  BOOL IsZoomed() const
903  {
906  }
907 
909  {
911  return ::KillTimer(m_hWnd, nIDEvent);
912  }
913 
915  {
917  if (bLock)
920  }
921 
922  int MapWindowPoints(HWND hWndTo, LPPOINT lpPoint, UINT nCount) const
923  {
925  return ::MapWindowPoints(m_hWnd, hWndTo, lpPoint, nCount);
926  }
927 
928  int MapWindowPoints(HWND hWndTo, LPRECT lpRect) const
929  {
931  return ::MapWindowPoints(m_hWnd, hWndTo, (LPPOINT)lpRect, sizeof(RECT) / sizeof(POINT));
932  }
933 
934  int MessageBox(LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK)
935  {
937  return ::MessageBox(m_hWnd, lpszText, lpszCaption, nType);
938  }
939 
940  BOOL ModifyStyle(DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0)
941  {
943  ::SetWindowLong(m_hWnd, GWL_STYLE, (::GetWindowLong(m_hWnd, GWL_STYLE) & ~dwRemove) | dwAdd);
944  if (nFlags != 0)
946  return TRUE;
947  }
948 
949  BOOL ModifyStyleEx(DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0)
950  {
952  ::SetWindowLong(m_hWnd, GWL_EXSTYLE, (::GetWindowLong(m_hWnd, GWL_EXSTYLE) & ~dwRemove) | dwAdd);
953  if (nFlags != 0)
955  return TRUE;
956  }
957 
958  BOOL MoveWindow(int x, int y, int nWidth, int nHeight, BOOL bRepaint = TRUE)
959  {
961  return ::MoveWindow(m_hWnd, x, y, nWidth, nHeight, bRepaint);
962  }
963 
964  void NextDlgCtrl() const
965  {
968  }
969 
971  {
974  }
975 
977  {
980  }
981 
982  void PrevDlgCtrl() const
983  {
986  }
987 
988  void Print(HDC hDC, DWORD dwFlags) const
989  {
992  }
993 
995  {
998  }
999 
1000  BOOL RedrawWindow(LPCRECT lpRectUpdate = NULL, HRGN hRgnUpdate = NULL, UINT flags = RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE)
1001  {
1003  return ::RedrawWindow(m_hWnd, lpRectUpdate, hRgnUpdate, flags);
1004  }
1005 
1007  {
1010  }
1011 
1012  BOOL ResizeClient(int nWidth, int nHeight, BOOL bRedraw = FALSE)
1013  {
1015  RECT clientRect, wndRect;
1016  ::GetClientRect(m_hWnd, &clientRect);
1017  ::GetWindowRect(m_hWnd, &wndRect);
1018  return ::MoveWindow(m_hWnd, wndRect.left, wndRect.top,
1019  nWidth + (wndRect.right - wndRect.left) - (clientRect.right - clientRect.left),
1020  nHeight + (wndRect.bottom - wndRect.top) - (clientRect.bottom - clientRect.top),
1021  bRedraw);
1022  }
1023 
1024  BOOL ScreenToClient(LPPOINT lpPoint) const
1025  {
1027  return ::ScreenToClient(m_hWnd, lpPoint);
1028  }
1029 
1030  BOOL ScrollWindow(int xAmount, int yAmount, LPCRECT lpRect = NULL, LPCRECT lpClipRect = NULL)
1031  {
1033  return ::ScrollWindow(m_hWnd, xAmount, yAmount, lpRect, lpClipRect);
1034  }
1035 
1036  int ScrollWindowEx(int dx, int dy, LPCRECT lpRectScroll, LPCRECT lpRectClip, HRGN hRgnUpdate, LPRECT lpRectUpdate, UINT flags)
1037  {
1039  return ::ScrollWindowEx(m_hWnd, dx, dy, lpRectScroll, lpRectClip, hRgnUpdate, lpRectUpdate, flags);
1040  }
1041 
1043  {
1046  }
1047 
1049  {
1052  }
1053 
1055  {
1056  ATLASSERT(::IsWindow(hWnd));
1058  }
1059 
1060 private:
1062  {
1064  return TRUE;
1065  }
1066 
1068  {
1071  return TRUE;
1072  }
1073 
1074 public:
1076  {
1078  MSG msg;
1079  msg.message = message;
1080  msg.wParam = wParam;
1081  msg.lParam = lParam;
1082  if (bDeep)
1084  else
1086  }
1087 
1089  {
1092  }
1093 
1095  {
1098  }
1099 
1101  {
1104  }
1105 
1107  {
1110  }
1111 
1112  int SetDlgCtrlID(int nID)
1113  {
1116  }
1117 
1118  BOOL SetDlgItemInt(int nID, UINT nValue, BOOL bSigned = TRUE)
1119  {
1121  return ::SetDlgItemInt(m_hWnd, nID, nValue, bSigned);
1122  }
1123 
1124  BOOL SetDlgItemText(int nID, LPCTSTR lpszString)
1125  {
1127  return ::SetDlgItemText(m_hWnd, nID, lpszString);
1128  }
1129 
1131  {
1134  }
1135 
1136  void SetFont(HFONT hFont, BOOL bRedraw = TRUE)
1137  {
1140  }
1141 
1142  int SetHotKey(WORD wVirtualKeyCode, WORD wModifiers)
1143  {
1145  return ::SendMessage(m_hWnd, WM_SETHOTKEY, MAKEWPARAM(wVirtualKeyCode, wModifiers), 0);
1146  }
1147 
1149  {
1151  return (HICON)::SendMessage(m_hWnd, WM_SETICON, (WPARAM)bBigIcon, (LPARAM)hIcon);
1152  }
1153 
1155  {
1157  return ::SetMenu(m_hWnd, hMenu);
1158  }
1159 
1160  HWND SetParent(HWND hWndNewParent)
1161  {
1163  return ::SetParent(m_hWnd, hWndNewParent);
1164  }
1165 
1166  void SetRedraw(BOOL bRedraw = TRUE)
1167  {
1169  ::SendMessage(m_hWnd, WM_SETREDRAW, (WPARAM)bRedraw, 0);
1170  }
1171 
1172  int SetScrollInfo(int nBar, LPSCROLLINFO lpScrollInfo, BOOL bRedraw = TRUE)
1173  {
1175  return ::SetScrollInfo(m_hWnd, nBar, lpScrollInfo, bRedraw);
1176  }
1177 
1178  int SetScrollPos(int nBar, int nPos, BOOL bRedraw = TRUE)
1179  {
1181  return ::SetScrollPos(m_hWnd, nBar, nPos, bRedraw);
1182  }
1183 
1184  BOOL SetScrollRange(int nBar, int nMinPos, int nMaxPos, BOOL bRedraw = TRUE)
1185  {
1187  return ::SetScrollRange(m_hWnd, nBar, nMinPos, nMaxPos, bRedraw);
1188  }
1189 
1190  UINT_PTR SetTimer(UINT_PTR nIDEvent, UINT nElapse, void (CALLBACK *lpfnTimer)(HWND, UINT, UINT_PTR, DWORD) = NULL)
1191  {
1193  return ::SetTimer(m_hWnd, nIDEvent, nElapse, reinterpret_cast<TIMERPROC>(lpfnTimer));
1194  }
1195 
1197  {
1199  return ::SetWindowContextHelpId(m_hWnd, dwContextHelpId);
1200  }
1201 
1202  LONG SetWindowLong(int nIndex, LONG dwNewLong)
1203  {
1205  return ::SetWindowLong(m_hWnd, nIndex, dwNewLong);
1206  }
1207 
1208  LONG_PTR SetWindowLongPtr(int nIndex, LONG_PTR dwNewLong)
1209  {
1211  return ::SetWindowLongPtr(m_hWnd, nIndex, dwNewLong);
1212  }
1213 
1215  {
1218  }
1219 
1220  BOOL SetWindowPos(HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags)
1221  {
1223  return ::SetWindowPos(m_hWnd, hWndInsertAfter, x, y, cx, cy, nFlags);
1224  }
1225 
1226  int SetWindowRgn(HRGN hRgn, BOOL bRedraw = FALSE)
1227  {
1229  return ::SetWindowRgn(m_hWnd, hRgn, bRedraw);
1230  }
1231 
1233  {
1235  return ::SetWindowText(m_hWnd, lpszString);
1236  }
1237 
1238  WORD SetWindowWord(int nIndex, WORD wNewWord)
1239  {
1241  if (nIndex >= -4)
1242  return ::SetWindowLong(m_hWnd, nIndex - 2, MAKELONG(LOWORD(::GetWindowLong(m_hWnd, nIndex - 2)), wNewWord));
1243  else
1244  return ::SetWindowLong(m_hWnd, nIndex, MAKELONG(wNewWord, HIWORD(::GetWindowLong(m_hWnd, nIndex))));
1245  }
1246 
1248  {
1251  }
1252 
1254  {
1257  }
1258 
1260  {
1262  return ::ShowScrollBar(m_hWnd, nBar, bShow);
1263  }
1264 
1265  BOOL ShowWindow(int nCmdShow)
1266  {
1268  return ::ShowWindow(m_hWnd, nCmdShow);
1269  }
1270 
1271  BOOL ShowWindowAsync(int nCmdShow)
1272  {
1274  return ::ShowWindowAsync(m_hWnd, nCmdShow);
1275  }
1276 
1278  {
1281  }
1282 
1284  {
1286  return ::ValidateRect(m_hWnd, lpRect);
1287  }
1288 
1290  {
1293  }
1294 
1296  {
1298  return ::WinHelp(m_hWnd, lpszHelp, nCmd, dwData);
1299  }
1300 };
1301 
1303 
1304 template <class TBase = CWindow>
1305 class CWindowImplRoot : public TBase, public CMessageMap
1306 {
1307 public:
1308  enum { WINSTATE_DESTROYED = 0x00000001 };
1309 
1310 public:
1314 
1316  : m_pCurrentMsg(NULL)
1317  , m_dwState(0)
1318  {
1319  }
1320 
1322  {
1323  }
1324 };
1325 
1326 
1327 template <class TBase = CWindow>
1328 class CDialogImplBaseT : public CWindowImplRoot<TBase>
1329 {
1330 public:
1331  // + Hacks for gcc
1333  // - Hacks for gcc
1334 
1336  {
1337  }
1339  {
1340  return DialogProc;
1341  }
1342 
1344  {
1345  CDialogImplBaseT<TBase> *pThis;
1346  DLGPROC newDlgProc;
1347  DLGPROC GCCU(pOldProc);
1348 
1349  pThis = reinterpret_cast<CDialogImplBaseT<TBase>*>(_AtlWinModule.ExtractCreateWndData());
1350  ATLASSERT(pThis != NULL);
1351  if (pThis == NULL)
1352  return 0;
1353  pThis->m_thunk.Init((WNDPROC)pThis->GetDialogProc(), pThis);
1354  newDlgProc = reinterpret_cast<DLGPROC>(pThis->m_thunk.GetWNDPROC());
1355  pOldProc = reinterpret_cast<DLGPROC>(::SetWindowLongPtr(hWnd, DWLP_DLGPROC, reinterpret_cast<LONG_PTR>(newDlgProc)));
1356  Unused(pOldProc); // TODO: should generate trace message if overwriting another subclass
1357  pThis->m_hWnd = hWnd;
1358  return newDlgProc(hWnd, uMsg, wParam, lParam);
1359  }
1360 
1362  {
1363  CDialogImplBaseT<TBase> *pThis = reinterpret_cast<CDialogImplBaseT<TBase>*>(hWnd);
1364  _ATL_MSG msg(pThis->m_hWnd, uMsg, wParam, lParam);
1365  LRESULT lResult = 0;
1366  const _ATL_MSG *previousMessage;
1367  BOOL handled;
1368 
1369  hWnd = pThis->m_hWnd;
1370  previousMessage = pThis->m_pCurrentMsg;
1371  pThis->m_pCurrentMsg = &msg;
1372 
1373  handled = pThis->ProcessWindowMessage(hWnd, uMsg, wParam, lParam, lResult, 0);
1374  ATLASSERT(pThis->m_pCurrentMsg == &msg);
1375 
1376  if (handled)
1377  {
1378  if ((pThis->m_dwState & WINSTATE_DESTROYED) == 0)
1379  {
1380  ::SetWindowLongPtr(pThis->m_hWnd, DWLP_MSGRESULT, lResult);
1381  }
1382  }
1383  else
1384  {
1385  if (uMsg == WM_NCDESTROY)
1386  {
1387  pThis->m_dwState |= WINSTATE_DESTROYED;
1388  }
1389  }
1390 
1391  ATLASSERT(pThis->m_pCurrentMsg == &msg);
1392  pThis->m_pCurrentMsg = previousMessage;
1393 
1394  if (previousMessage == NULL && (pThis->m_dwState & WINSTATE_DESTROYED) != 0)
1395  {
1396  pThis->m_dwState &= ~WINSTATE_DESTROYED;
1397  pThis->m_hWnd = NULL;
1398  pThis->OnFinalMessage(hWnd);
1399  }
1400  return lResult;
1401  }
1402 
1403  virtual void OnFinalMessage(HWND)
1404  {
1405  }
1406 };
1407 
1408 
1409 template <class T, class TBase = CWindow>
1410 class CDialogImpl : public CDialogImplBaseT< TBase >
1411 {
1412 public:
1413  // + Hacks for gcc
1416  // - Hacks for gcc
1417 
1419  {
1420  BOOL result;
1421  HWND hWnd;
1422  T* pImpl;
1423 
1424  result = m_thunk.Init(NULL, NULL);
1425  if (result == FALSE)
1426  return NULL;
1427 
1428  _AtlWinModule.AddCreateWndData(&m_thunk.cd, this);
1429 
1430  pImpl = static_cast<T*>(this);
1431  hWnd = ::CreateDialogParam(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(pImpl->IDD), hWndParent, T::StartDialogProc, dwInitParam);
1432  return hWnd;
1433  }
1434 
1436  {
1437  BOOL result;
1438  T* pImpl;
1439 
1440  result = m_thunk.Init(NULL, NULL);
1441  if (result == FALSE)
1442  return -1;
1443 
1444  _AtlWinModule.AddCreateWndData(&m_thunk.cd, this);
1445 
1446  pImpl = static_cast<T*>(this);
1447  return ::DialogBoxParam(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(pImpl->IDD), hWndParent, T::StartDialogProc, dwInitParam);
1448  }
1449 
1450  BOOL EndDialog(_In_ int nRetCode)
1451  {
1452  return ::EndDialog(m_hWnd, nRetCode);
1453  }
1454 
1456  {
1457  return ::DestroyWindow(m_hWnd);
1458  }
1459 };
1460 
1461 template <class TBase = CWindow, class TWinTraits = CControlWinTraits>
1462 class CWindowImplBaseT : public CWindowImplRoot<TBase>
1463 {
1464 public:
1465  // + Hacks for gcc
1468  // - Hacks for gcc
1469 
1471 
1472 public:
1474  {
1476  }
1477 
1478  virtual void OnFinalMessage(HWND /* hWnd */)
1479  {
1480  }
1481 
1483  {
1485  WNDPROC newWindowProc;
1486  WNDPROC oldWindowProc;
1487  BOOL result;
1488 
1489  ATLASSERT(m_hWnd == NULL);
1490  ATLASSERT(::IsWindow(hWnd));
1491 
1492  pThis = reinterpret_cast<CWindowImplBaseT<TBase, TWinTraits>*>(this);
1493 
1494  result = m_thunk.Init(GetWindowProc(), this);
1495  if (result == FALSE)
1496  return FALSE;
1497  newWindowProc = m_thunk.GetWNDPROC();
1498  oldWindowProc = reinterpret_cast<WNDPROC>(::SetWindowLongPtr(hWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(newWindowProc)));
1499  if (oldWindowProc == NULL)
1500  return FALSE;
1501  m_pfnSuperWindowProc = oldWindowProc;
1502  pThis->m_hWnd = hWnd;
1503  return TRUE;
1504  }
1505 
1507  {
1508  return WindowProc;
1509  }
1510 
1511  static DWORD GetWndStyle(DWORD dwStyle)
1512  {
1513  return TWinTraits::GetWndStyle(dwStyle);
1514  }
1515 
1516  static DWORD GetWndExStyle(DWORD dwExStyle)
1517  {
1518  return TWinTraits::GetWndExStyle(dwExStyle);
1519  }
1520 
1522  {
1524 
1525  pThis = reinterpret_cast<CWindowImplBaseT<TBase, TWinTraits> *>(this);
1527  }
1528 
1530  {
1532  WNDPROC newWindowProc;
1533  WNDPROC GCCU(pOldProc);
1534 
1535  pThis = reinterpret_cast<CWindowImplBaseT<TBase, TWinTraits> *>(_AtlWinModule.ExtractCreateWndData());
1536  ATLASSERT(pThis != NULL);
1537  if (pThis == NULL)
1538  return 0;
1539  pThis->m_thunk.Init(pThis->GetWindowProc(), pThis);
1540  newWindowProc = pThis->m_thunk.GetWNDPROC();
1541  pOldProc = reinterpret_cast<WNDPROC>(::SetWindowLongPtr(hWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(newWindowProc)));
1542  Unused(pOldProc); // TODO: should generate trace message if overwriting another subclass
1543  pThis->m_hWnd = hWnd;
1544  return newWindowProc(hWnd, uMsg, wParam, lParam);
1545  }
1546 
1548  {
1550  _ATL_MSG msg(pThis->m_hWnd, uMsg, wParam, lParam);
1551  LRESULT lResult;
1552  const _ATL_MSG *previousMessage;
1553  BOOL handled;
1554  LONG_PTR saveWindowProc;
1555 
1556  ATLASSERT(pThis != NULL && (pThis->m_dwState & WINSTATE_DESTROYED) == 0 && pThis->m_hWnd != NULL);
1557  if (pThis == NULL || (pThis->m_dwState & WINSTATE_DESTROYED) != 0 || pThis->m_hWnd == NULL)
1558  return 0;
1559 
1560  hWnd = pThis->m_hWnd;
1561  previousMessage = pThis->m_pCurrentMsg;
1562  pThis->m_pCurrentMsg = &msg;
1563 
1564  handled = pThis->ProcessWindowMessage(hWnd, uMsg, wParam, lParam, lResult, 0);
1565  ATLASSERT(pThis->m_pCurrentMsg == &msg);
1566 
1567  if (handled == FALSE)
1568  {
1569  if (uMsg == WM_NCDESTROY)
1570  {
1571  saveWindowProc = ::GetWindowLongPtr(hWnd, GWLP_WNDPROC);
1572  lResult = pThis->DefWindowProc(uMsg, wParam, lParam);
1573  if (pThis->m_pfnSuperWindowProc != ::DefWindowProc && saveWindowProc == ::GetWindowLongPtr(hWnd, GWLP_WNDPROC))
1574  ::SetWindowLongPtr(hWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(pThis->m_pfnSuperWindowProc));
1575  pThis->m_dwState |= WINSTATE_DESTROYED;
1576  }
1577  else
1578  lResult = pThis->DefWindowProc(uMsg, wParam, lParam);
1579  }
1580  ATLASSERT(pThis->m_pCurrentMsg == &msg);
1581  pThis->m_pCurrentMsg = previousMessage;
1582  if (previousMessage == NULL && (pThis->m_dwState & WINSTATE_DESTROYED) != 0)
1583  {
1584  pThis->m_dwState &= ~WINSTATE_DESTROYED;
1585  pThis->m_hWnd = NULL;
1586  pThis->OnFinalMessage(hWnd);
1587  }
1588  return lResult;
1589  }
1590 
1591  HWND Create(HWND hWndParent, _U_RECT rect, LPCTSTR szWindowName, DWORD dwStyle, DWORD dwExStyle,
1592  _U_MENUorID MenuOrID, ATOM atom, LPVOID lpCreateParam)
1593  {
1594  HWND hWnd;
1595 
1596  ATLASSERT(m_hWnd == NULL);
1597  ATLASSERT(atom != 0);
1598  if (atom == 0)
1599  return NULL;
1600  if (m_thunk.Init(NULL, NULL) == FALSE)
1601  {
1603  return NULL;
1604  }
1605 
1606  _AtlWinModule.AddCreateWndData(&m_thunk.cd, this);
1607  if (MenuOrID.m_hMenu == NULL && (dwStyle & WS_CHILD) != 0)
1608  MenuOrID.m_hMenu = (HMENU)(UINT_PTR)this;
1609  if (rect.m_lpRect == NULL)
1610  rect.m_lpRect = &TBase::rcDefault;
1611  hWnd = ::CreateWindowEx(dwExStyle, reinterpret_cast<LPCWSTR>(MAKEINTATOM(atom)), szWindowName, dwStyle, rect.m_lpRect->left,
1612  rect.m_lpRect->top, rect.m_lpRect->right - rect.m_lpRect->left, rect.m_lpRect->bottom - rect.m_lpRect->top,
1613  hWndParent, MenuOrID.m_hMenu, _AtlBaseModule.GetModuleInstance(), lpCreateParam);
1614 
1615  ATLASSERT(m_hWnd == hWnd);
1616 
1617  return hWnd;
1618  }
1619 };
1620 
1621 
1622 template <class T, class TBase = CWindow, class TWinTraits = CControlWinTraits>
1623 class CWindowImpl : public CWindowImplBaseT<TBase, TWinTraits>
1624 {
1625 public:
1627  {
1628  return NULL;
1629  }
1630 
1631  HWND Create(HWND hWndParent, _U_RECT rect = NULL, LPCTSTR szWindowName = NULL, DWORD dwStyle = 0,
1632  DWORD dwExStyle = 0, _U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
1633  {
1635  ATOM atom;
1636 
1637  ATLASSERT(m_hWnd == NULL);
1638  pThis = reinterpret_cast<CWindowImplBaseT<TBase, TWinTraits>*>(this);
1639 
1640  if (T::GetWndClassInfo().m_lpszOrigName == NULL)
1641  T::GetWndClassInfo().m_lpszOrigName = pThis->GetWndClassName();
1642  atom = T::GetWndClassInfo().Register(&pThis->m_pfnSuperWindowProc);
1643 
1644  if (szWindowName == NULL)
1645  szWindowName = T::GetWndCaption();
1646  dwStyle = T::GetWndStyle(dwStyle);
1647  dwExStyle = T::GetWndExStyle(dwExStyle);
1648 
1649  return CWindowImplBaseT<TBase, TWinTraits>::Create(hWndParent, rect, szWindowName, dwStyle,
1650  dwExStyle, MenuOrID, atom, lpCreateParam);
1651  }
1652 };
1653 
1654 template <class TBase = CWindow, class TWinTraits = CControlWinTraits>
1655 class CContainedWindowT : public TBase
1656 {
1657 public:
1664 public:
1665  CContainedWindowT(CMessageMap *pObject, DWORD dwMsgMapID = 0)
1666  {
1667  m_lpszClassName = TBase::GetWndClassName();
1669  m_pObject = pObject;
1670  m_dwMsgMapID = dwMsgMapID;
1671  m_pCurrentMsg = NULL;
1672  }
1673 
1674  CContainedWindowT(LPTSTR lpszClassName, CMessageMap *pObject, DWORD dwMsgMapID = 0)
1675  {
1676  m_lpszClassName = lpszClassName;
1678  m_pObject = pObject;
1679  m_dwMsgMapID = dwMsgMapID;
1680  m_pCurrentMsg = NULL;
1681  }
1682 
1684  {
1686  }
1687 
1689  {
1690  CContainedWindowT<TBase> *pThis;
1691  WNDPROC newWindowProc;
1692  WNDPROC oldWindowProc;
1693  BOOL result;
1694 
1695  ATLASSERT(m_hWnd == NULL);
1696  ATLASSERT(::IsWindow(hWnd));
1697 
1698  pThis = reinterpret_cast<CContainedWindowT<TBase> *>(this);
1699 
1700  result = m_thunk.Init(WindowProc, pThis);
1701  if (result == FALSE)
1702  return FALSE;
1703  newWindowProc = m_thunk.GetWNDPROC();
1704  oldWindowProc = reinterpret_cast<WNDPROC>(::SetWindowLongPtr(hWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(newWindowProc)));
1705  if (oldWindowProc == NULL)
1706  return FALSE;
1707  m_pfnSuperWindowProc = oldWindowProc;
1708  pThis->m_hWnd = hWnd;
1709  return TRUE;
1710  }
1711 
1713  {
1714  CContainedWindowT<TBase> *pThis;
1715  WNDPROC newWindowProc;
1716  WNDPROC GCCU(pOldProc);
1717 
1718  pThis = reinterpret_cast<CContainedWindowT<TBase> *>(_AtlWinModule.ExtractCreateWndData());
1719  ATLASSERT(pThis != NULL);
1720  if (pThis == NULL)
1721  return 0;
1722  pThis->m_thunk.Init(WindowProc, pThis);
1723  newWindowProc = pThis->m_thunk.GetWNDPROC();
1724  pOldProc = reinterpret_cast<WNDPROC>(::SetWindowLongPtr(hWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(newWindowProc)));
1725  Unused(pOldProc); // TODO: should generate trace message if overwriting another subclass
1726  pThis->m_hWnd = hWnd;
1727  return newWindowProc(hWnd, uMsg, wParam, lParam);
1728  }
1729 
1731  {
1732  CContainedWindowT<TBase> *pThis = reinterpret_cast<CContainedWindowT<TBase> *>(hWnd);
1733  _ATL_MSG msg(pThis->m_hWnd, uMsg, wParam, lParam);
1734  LRESULT lResult;
1735  const _ATL_MSG *previousMessage;
1736  BOOL handled;
1737  LONG_PTR saveWindowProc;
1738 
1739  ATLASSERT(pThis != NULL && pThis->m_hWnd != NULL && pThis->m_pObject != NULL);
1740  if (pThis == NULL || pThis->m_hWnd == NULL || pThis->m_pObject == NULL)
1741  return 0;
1742 
1743  hWnd = pThis->m_hWnd;
1744  previousMessage = pThis->m_pCurrentMsg;
1745  pThis->m_pCurrentMsg = &msg;
1746 
1747  handled = pThis->m_pObject->ProcessWindowMessage(hWnd, uMsg, wParam, lParam, lResult, pThis->m_dwMsgMapID);
1748  ATLASSERT(pThis->m_pCurrentMsg == &msg);
1749 
1750  pThis->m_pCurrentMsg = previousMessage;
1751  if (handled == FALSE)
1752  {
1753  if (uMsg == WM_NCDESTROY)
1754  {
1755  saveWindowProc = ::GetWindowLongPtr(hWnd, GWLP_WNDPROC);
1756  lResult = pThis->DefWindowProc(uMsg, wParam, lParam);
1757  if (pThis->m_pfnSuperWindowProc != ::DefWindowProc && saveWindowProc == ::GetWindowLongPtr(hWnd, GWLP_WNDPROC))
1758  ::SetWindowLongPtr(hWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(pThis->m_pfnSuperWindowProc));
1759  pThis->m_hWnd = NULL;
1760  }
1761  else
1762  lResult = pThis->DefWindowProc(uMsg, wParam, lParam);
1763  }
1764  return lResult;
1765  }
1766 
1767 };
1769 
1770 #define BEGIN_MSG_MAP(theClass) \
1771 public: \
1772  BOOL ProcessWindowMessage(HWND GCCU(hWnd), UINT GCCU(uMsg), WPARAM GCCU(wParam), LPARAM GCCU(lParam), LRESULT &GCCU(lResult), DWORD dwMsgMapID = 0) \
1773  { \
1774  BOOL GCCU(bHandled) = TRUE; \
1775  Unused(hWnd); \
1776  Unused(uMsg); \
1777  Unused(wParam); \
1778  Unused(lParam); \
1779  Unused(lResult); \
1780  Unused(bHandled); \
1781  switch(dwMsgMapID) \
1782  { \
1783  case 0:
1784 
1785 #define ALT_MSG_MAP(map) \
1786  break; \
1787  case map:
1788 
1789 #define END_MSG_MAP() \
1790  break; \
1791  default: \
1792  ATLASSERT(FALSE); \
1793  break; \
1794  } \
1795  return FALSE; \
1796  }
1797 
1798 #define MESSAGE_HANDLER(msg, func) \
1799  if (uMsg == msg) \
1800  { \
1801  bHandled = TRUE; \
1802  lResult = func(uMsg, wParam, lParam, bHandled); \
1803  if (bHandled) \
1804  return TRUE; \
1805  }
1806 
1807 #define MESSAGE_RANGE_HANDLER(msgFirst, msgLast, func) \
1808  if (uMsg >= msgFirst && uMsg <= msgLast) \
1809  { \
1810  bHandled = TRUE; \
1811  lResult = func(uMsg, wParam, lParam, bHandled); \
1812  if (bHandled) \
1813  return TRUE; \
1814  }
1815 
1816 #define COMMAND_HANDLER(id, code, func) \
1817  if (uMsg == WM_COMMAND && id == LOWORD(wParam) && code == HIWORD(wParam)) \
1818  { \
1819  bHandled = TRUE; \
1820  lResult = func(HIWORD(wParam), LOWORD(wParam), (HWND)lParam, bHandled); \
1821  if (bHandled) \
1822  return TRUE; \
1823  }
1824 
1825 #define COMMAND_ID_HANDLER(id, func) \
1826  if (uMsg == WM_COMMAND && id == LOWORD(wParam)) \
1827  { \
1828  bHandled = TRUE; \
1829  lResult = func(HIWORD(wParam), LOWORD(wParam), (HWND)lParam, bHandled); \
1830  if (bHandled) \
1831  return TRUE; \
1832  }
1833 
1834 #define COMMAND_CODE_HANDLER(code, func) \
1835  if (uMsg == WM_COMMAND && code == HIWORD(wParam)) \
1836  { \
1837  bHandled = TRUE; \
1838  lResult = func(HIWORD(wParam), LOWORD(wParam), (HWND)lParam, bHandled); \
1839  if (bHandled) \
1840  return TRUE; \
1841  }
1842 
1843 #define COMMAND_RANGE_HANDLER(idFirst, idLast, func) \
1844  if (uMsg == WM_COMMAND && LOWORD(wParam) >= idFirst && LOWORD(wParam) <= idLast) \
1845  { \
1846  bHandled = TRUE; \
1847  lResult = func(HIWORD(wParam), LOWORD(wParam), (HWND)lParam, bHandled); \
1848  if (bHandled) \
1849  return TRUE; \
1850  }
1851 
1852 #define NOTIFY_CODE_HANDLER(cd, func) \
1853  if(uMsg == WM_NOTIFY && cd == ((LPNMHDR)lParam)->code) \
1854  { \
1855  bHandled = TRUE; \
1856  lResult = func((int)wParam, (LPNMHDR)lParam, bHandled); \
1857  if (bHandled) \
1858  return TRUE; \
1859  }
1860 
1861 #define NOTIFY_HANDLER(id, cd, func) \
1862  if(uMsg == WM_NOTIFY && id == ((LPNMHDR)lParam)->idFrom && cd == ((LPNMHDR)lParam)->code) \
1863  { \
1864  bHandled = TRUE; \
1865  lResult = func((int)wParam, (LPNMHDR)lParam, bHandled); \
1866  if (bHandled) \
1867  return TRUE; \
1868  }
1869 
1870 #define CHAIN_MSG_MAP(theChainClass) \
1871  { \
1872  if (theChainClass::ProcessWindowMessage(hWnd, uMsg, wParam, lParam, lResult)) \
1873  return TRUE; \
1874  }
1875 
1876 #define DECLARE_WND_CLASS_EX(WndClassName, style, bkgnd) \
1877 static ATL::CWndClassInfo& GetWndClassInfo() \
1878 { \
1879  static ATL::CWndClassInfo wc = \
1880  { \
1881  { sizeof(WNDCLASSEX), style, StartWindowProc, \
1882  0, 0, NULL, NULL, NULL, (HBRUSH)(bkgnd + 1), NULL, WndClassName, NULL }, \
1883  NULL, NULL, IDC_ARROW, TRUE, 0, _T("") \
1884  }; \
1885  return wc; \
1886 }
1887 
1889 {
1896  WCHAR m_szAutoName[5 + sizeof(void *)];
1897 
1899  {
1900  if (m_wc.hInstance == NULL)
1901  m_wc.hInstance = _AtlBaseModule.GetModuleInstance();
1902  if (m_atom == 0)
1903  {
1904  if (m_bSystemCursor)
1906  else
1907  m_wc.hCursor = ::LoadCursor(_AtlBaseModule.GetResourceInstance(), m_lpszCursorID);
1908 
1910  }
1911 
1912  return m_atom;
1913  }
1914 };
1915 
1916 }; // namespace ATL
1917 
1918 #pragma pop_macro("SubclassWindow")
1919 
BOOL ChangeClipboardChain(HWND hWndNewNext)
Definition: atlwin.h:329
BOOL IsDialogMessage(LPMSG lpMsg)
Definition: atlwin.h:852
BOOL WINAPI EnumChildWindows(_In_opt_ HWND, _In_ WNDENUMPROC, _In_ LPARAM)
CWinTraits< WS_OVERLAPPEDWINDOW|WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS, WS_EX_MDICHILD > CMDIChildWinTraits
Definition: atlwin.h:88
BOOL GetScrollInfo(int nBar, LPSCROLLINFO lpScrollInfo)
Definition: atlwin.h:660
#define CallWindowProc
Definition: winuser.h:5601
BOOL ModifyStyleEx(DWORD dwRemove, DWORD dwAdd, UINT nFlags=0)
Definition: atlwin.h:949
HWND Create(HWND hWndParent, LPARAM dwInitParam=NULL)
Definition: atlwin.h:1418
BOOL WINAPI GetScrollRange(_In_ HWND, _In_ int, _Out_ LPINT, _Out_ LPINT)
BOOL IsWindowEnabled() const
Definition: atlwin.h:884
BOOL WINAPI ValidateRgn(_In_ HWND, _In_opt_ HRGN)
#define WM_SETHOTKEY
Definition: winuser.h:1634
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define MAKEINTRESOURCE
Definition: winuser.h:591
BOOL WINAPI CheckDlgButton(_In_ HWND, _In_ int, _In_ UINT)
int MapWindowPoints(HWND hWndTo, LPPOINT lpPoint, UINT nCount) const
Definition: atlwin.h:922
BOOL WINAPI RedrawWindow(_In_opt_ HWND, _In_opt_ LPCRECT, _In_opt_ HRGN, _In_ UINT)
HDC WINAPI GetDCEx(_In_opt_ HWND, _In_opt_ HRGN, _In_ DWORD)
BOOL GetScrollPos(int nBar)
Definition: atlwin.h:666
UINT ArrangeIconicWindows()
Definition: atlwin.h:286
Definition: tftpd.h:59
static HICON
Definition: imagelist.c:84
struct ATL::CWindow::_IDHWNDPAIR IDHWNDPAIR
#define REFIID
Definition: guiddef.h:113
#define TRUE
Definition: types.h:120
#define MAKEWPARAM(l, h)
Definition: winuser.h:3916
HWND SetFocus()
Definition: atlwin.h:1130
static LPCTSTR GetWndClassName()
Definition: atlwin.h:281
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
DWORD GetExStyle() const
Definition: atlwin.h:606
BOOL MoveWindow(int x, int y, int nWidth, int nHeight, BOOL bRepaint=TRUE)
Definition: atlwin.h:958
HWND GetWindow(UINT nCmd) const
Definition: atlwin.h:720
HWND WINAPI SetClipboardViewer(_In_ HWND)
BOOL WINAPI DrawMenuBar(_In_ HWND)
#define DWLP_DLGPROC
Definition: winuser.h:865
#define RegisterClassEx
Definition: winuser.h:5703
static DWORD GetWndStyle(DWORD dwStyle)
Definition: atlwin.h:94
DWORD GetWindowThreadID()
Definition: atlwin.h:798
UINT IsDlgButtonChecked(int nIDButton) const
Definition: atlwin.h:858
BOOL EndDialog(_In_ int nRetCode)
Definition: atlwin.h:1450
long y
Definition: polytest.cpp:48
DWORD GetStyle() const
Definition: atlwin.h:678
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
BOOL HiliteMenuItem(HMENU hMenu, UINT uHiliteItem, UINT uHilite)
Definition: atlwin.h:822
#define WM_NEXTDLGCTL
Definition: winuser.h:1625
int SetScrollInfo(int nBar, LPSCROLLINFO lpScrollInfo, BOOL bRedraw=TRUE)
Definition: atlwin.h:1172
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
BOOL WINAPI IsWindow(_In_opt_ HWND)
long x
Definition: polytest.cpp:48
#define ATLASSERT(x)
Definition: CComVariant.cpp:9
HMENU m_hMenu
Definition: atlwin.h:108
HDC WINAPI GetDC(_In_opt_ HWND)
WORD ATOM
Definition: dimm.idl:113
int _tcscmp(const _TCHAR *s1, const _TCHAR *s2)
Definition: tcscmp.h:8
void SetFont(HFONT hFont, BOOL bRedraw=TRUE)
Definition: atlwin.h:1136
#define pt(x, y)
Definition: drawing.c:79
#define WM_GETHOTKEY
Definition: winuser.h:1635
BOOL WINAPI LockWindowUpdate(_In_opt_ HWND)
int GetWindowTextLength() const
Definition: atlwin.h:792
BOOL DlgDirSelect(LPTSTR lpString, int nCount, int nIDListBox)
Definition: atlwin.h:458
HWND WINAPI SetParent(_In_ HWND, _In_opt_ HWND)
BOOL ShowWindowAsync(int nCmdShow)
Definition: atlwin.h:1271
HWND GetNextDlgGroupItem(HWND hWndCtl, BOOL bPrevious=FALSE) const
Definition: atlwin.h:642
#define DlgDirList
Definition: winuser.h:5632
static DWORD GetWndStyle(DWORD dwStyle)
Definition: atlwin.h:71
HWND Create(HWND hWndParent, _U_RECT rect=NULL, LPCTSTR szWindowName=NULL, DWORD dwStyle=0, DWORD dwExStyle=0, _U_MENUorID MenuOrID=0U, LPVOID lpCreateParam=NULL)
Definition: atlwin.h:1631
#define GWL_ID
Definition: winuser.h:853
BOOL GetUpdateRect(LPRECT lpRect, BOOL bErase=FALSE)
Definition: atlwin.h:708
HWND GetLastActivePopup() const
Definition: atlwin.h:630
GLint dy
Definition: linetemp.h:97
static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: atlwin.h:1547
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
virtual ~CDialogImplBaseT()
Definition: atlwin.h:1335
BOOL EnableWindow(BOOL bEnable=TRUE)
Definition: atlwin.h:489
#define U(x)
Definition: wordpad.c:44
HWND GetDescendantWindow(int nID) const
Definition: atlwin.h:543
_U_RECT(LPRECT lpRect)
Definition: atlwin.h:126
GLenum GLuint GLenum GLsizei const GLchar * message
Definition: glext.h:5579
static HDC
Definition: imagelist.c:92
#define CALLBACK
Definition: compat.h:27
UINT WINAPI ArrangeIconicWindows(_In_ HWND)
#define WM_SETREDRAW
Definition: winuser.h:1598
CContainedWindowT< CWindow > CContainedWindow
Definition: atlwin.h:1768
BOOL IsWindow() const
Definition: atlwin.h:879
BOOL WINAPI ShowScrollBar(_In_ HWND, _In_ int, _In_ BOOL)
int GetWindowRgn(HRGN hRgn)
Definition: atlwin.h:770
BOOL WINAPI UpdateWindow(_In_ HWND)
HWND hWnd
Definition: settings.c:17
LONG SetWindowLong(int nIndex, LONG dwNewLong)
Definition: atlwin.h:1202
BOOL ScrollWindow(int xAmount, int yAmount, LPCRECT lpRect=NULL, LPCRECT lpClipRect=NULL)
Definition: atlwin.h:1030
BOOL SetWindowPos(HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags)
Definition: atlwin.h:1220
LONG top
Definition: windef.h:292
HANDLE HWND
Definition: compat.h:13
static HRGN hRgn
Definition: mapping.c:33
HFONT GetFont() const
Definition: atlwin.h:612
static HANDLE ULONG_PTR dwData
Definition: file.c:35
HRESULT GetDlgHost(int nID, REFIID iid, void **ppHost)
Definition: atlwin.h:565
#define GWL_EXSTYLE
Definition: winuser.h:845
int SetScrollPos(int nBar, int nPos, BOOL bRedraw=TRUE)
Definition: atlwin.h:1178
BOOL WinHelp(LPCTSTR lpszHelp, UINT nCmd=HELP_CONTEXT, DWORD dwData=0)
Definition: atlwin.h:1295
virtual void OnFinalMessage(HWND)
Definition: atlwin.h:1403
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
HWND WINAPI SetFocus(_In_opt_ HWND)
virtual BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult, DWORD dwMsgMapID)=0
BOOL WINAPI ChangeClipboardChain(_In_ HWND, _In_ HWND)
UINT_PTR WPARAM
Definition: windef.h:207
#define SetWindowLong
Definition: winuser.h:5719
void EndPaint(LPPAINTSTRUCT lpPaint)
Definition: atlwin.h:495
static HANDLE proc()
Definition: pdb.c:32
#define WS_CHILD
Definition: pedump.c:617
OLECHAR * BSTR
Definition: compat.h:1934
#define SendDlgItemMessage
Definition: winuser.h:5708
#define DlgDirSelectComboBoxEx
Definition: winuser.h:5634
BOOL Init(PUSERCONNECT UserCon)
Definition: dllmain.c:367
HRESULT GetDlgControl(int nID, REFIID iid, void **ppCtrl)
Definition: atlwin.h:553
__u16 time
Definition: mkdosfs.c:366
LONG left
Definition: windef.h:291
#define SWP_NOZORDER
Definition: winuser.h:1232
UINT uFlags
Definition: api.c:60
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI FlushInstructionCache(IN HANDLE hProcess, IN LPCVOID lpBaseAddress, IN SIZE_T nSize)
Definition: proc.c:1493
int32_t INT_PTR
Definition: typedefs.h:62
CWindow(HWND hWnd=NULL)
Definition: atlwin.h:271
#define IsDialogMessage
Definition: winuser.h:5675
WNDPROC GetWNDPROC()
Definition: atlwin.h:253
BOOL SetWindowText(LPCTSTR lpszString)
Definition: atlwin.h:1232
#define DlgDirListComboBox
Definition: winuser.h:5633
void DragAcceptFiles(BOOL bAccept=TRUE)
Definition: atlwin.h:470
LONG right
Definition: windef.h:293
HWND WINAPI GetNextDlgTabItem(_In_ HWND, _In_opt_ HWND, _In_ BOOL)
BOOL WINAPI IsIconic(_In_ HWND)
BOOL WINAPI FlashWindow(_In_ HWND, _In_ BOOL)
static LRESULT CALLBACK StartWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: atlwin.h:1712
#define E_FAIL
Definition: ddrawi.h:102
#define MEM_COMMIT
Definition: nt_native.h:1313
BOOL WINAPI DestroyWindow(_In_ HWND)
_AtlCreateWndData cd
Definition: atlwin.h:231
BOOL WINAPI SetWindowPlacement(_In_ HWND hWnd, _In_ const WINDOWPLACEMENT *)
#define DWORD
Definition: nt_native.h:44
BOOL ValidateRect(LPCRECT lpRect)
Definition: atlwin.h:1283
#define SetWindowLongPtr
Definition: treelist.c:70
POINTL point
Definition: edittest.c:50
HWND GetNextDlgTabItem(HWND hWndCtl, BOOL bPrevious=FALSE) const
Definition: atlwin.h:648
#define T
Definition: mbstring.h:31
& rect
Definition: startmenu.cpp:1413
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
WPARAM wParam
Definition: combotst.c:138
void PrintClient(HDC hDC, DWORD dwFlags) const
Definition: atlwin.h:994
BOOL Init(WNDPROC proc, void *pThis)
Definition: atlwin.h:245
HWND WINAPI GetTopWindow(_In_opt_ HWND)
LRESULT DefWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: atlwin.h:1521
HFONT hFont
Definition: main.c:53
CHAR * LPTSTR
Definition: xmlstorage.h:192
#define DWLP_MSGRESULT
Definition: winuser.h:864
_ATL_WNDCLASSINFOW CWndClassInfo
Definition: atlwin.h:64
struct ATL::CWindow::_IDHWNDPAIR * PIDHWNDPAIR
#define WM_PRINTCLIENT
Definition: richedit.h:70
const _ATL_MSG * m_pCurrentMsg
Definition: atlwin.h:1663
BOOL ResizeClient(int nWidth, int nHeight, BOOL bRedraw=FALSE)
Definition: atlwin.h:1012
HWND WINAPI GetLastActivePopup(_In_ HWND)
#define GetWindowText
Definition: winuser.h:5664
DWORD GetWindowContextHelpId() const
Definition: atlwin.h:726
WCHAR m_szAutoName[5+sizeof(void *)]
Definition: atlwin.h:1896
BOOL WINAPI ScrollWindow(_In_ HWND, _In_ int, _In_ int, _In_opt_ LPCRECT, _In_opt_ LPCRECT)
CWndProcThunk m_thunk
Definition: atlwin.h:1658
BOOL InvalidateRect(LPCRECT lpRect, BOOL bErase=TRUE)
Definition: atlwin.h:834
BOOL SetDlgItemText(int nID, LPCTSTR lpszString)
Definition: atlwin.h:1124
HWND WINAPI GetNextDlgGroupItem(_In_ HWND, _In_opt_ HWND, _In_ BOOL)
static BOOL CALLBACK GetDescendantWindowCallback(HWND hWnd, LPARAM lParam)
Definition: atlwin.h:531
int GetUpdateRgn(HRGN hRgn, BOOL bErase=FALSE)
Definition: atlwin.h:714
int WINAPI SetWindowRgn(_In_ HWND, _In_opt_ HRGN, _In_ BOOL)
int WINAPI GetDlgCtrlID(_In_ HWND)
void PrevDlgCtrl() const
Definition: atlwin.h:982
BOOL IsChild(const HWND hWnd) const
Definition: atlwin.h:846
BOOL SubclassWindow(HWND hWnd)
Definition: atlwin.h:1482
BOOL WINAPI ShowWindowAsync(_In_ HWND, _In_ int)
LPVOID NTAPI VirtualAlloc(IN LPVOID lpAddress, IN SIZE_T dwSize, IN DWORD flAllocationType, IN DWORD flProtect)
Definition: virtmem.c:74
HWND WINAPI SetActiveWindow(_In_ HWND)
static DWORD GetWndStyle(DWORD dwStyle)
Definition: atlwin.h:1511
BOOL WINAPI HideCaret(_In_opt_ HWND)
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
void GotoDlgCtrl(HWND hWndCtrl) const
Definition: atlwin.h:810
BOOL WINAPI CreateCaret(_In_ HWND, _In_opt_ HBITMAP, _In_ int, _In_ int)
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
int WINAPI GetUpdateRgn(_In_ HWND, _In_ HRGN, _In_ BOOL)
UINT_PTR SetTimer(UINT_PTR nIDEvent, UINT nElapse, void(CALLBACK *lpfnTimer)(HWND, UINT, UINT_PTR, DWORD)=NULL)
Definition: atlwin.h:1190
BOOL CheckDlgButton(int nIDButton, UINT nCheck)
Definition: atlwin.h:335
BOOL GetClientRect(LPRECT lpRect) const
Definition: atlwin.h:507
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
LONG_PTR SetWindowLongPtr(int nIndex, LONG_PTR dwNewLong)
Definition: atlwin.h:1208
BOOL WINAPI SetWindowContextHelpId(_In_ HWND, _In_ DWORD)
BOOL CheckRadioButton(int nIDFirstButton, int nIDLastButton, int nIDCheckButton)
Definition: atlwin.h:341
BOOL WINAPI HiliteMenuItem(_In_ HWND, _In_ HMENU, _In_ UINT, _In_ UINT)
CWinTraits< WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS, 0 > CControlWinTraits
Definition: atlwin.h:86
#define CreateWindowEx
Definition: winuser.h:5621
#define CW_USEDEFAULT
Definition: winuser.h:225
BOOL KillTimer(UINT_PTR nIDEvent)
Definition: atlwin.h:908
BOOL GetWindowRect(LPRECT lpRect) const
Definition: atlwin.h:764
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:570
DWORD WINAPI GetWindowThreadProcessId(HWND, PDWORD)
BOOL WINAPI BringWindowToTop(_In_ HWND)
#define MAKELONG(a, b)
Definition: typedefs.h:248
HMENU WINAPI GetSystemMenu(_In_ HWND, _In_ BOOL)
smooth NULL
Definition: ftsmooth.c:416
BOOL SetMenu(HMENU hMenu)
Definition: atlwin.h:1154
UINT WINAPI GetDlgItemInt(_In_ HWND, _In_ int, _Out_opt_ PBOOL, _In_ BOOL)
#define WM_GETFONT
Definition: winuser.h:1633
thunkCode * m_pthunk
Definition: atlwin.h:230
LONG_PTR LPARAM
Definition: windef.h:208
int WINAPI ScrollWindowEx(_In_ HWND, _In_ int, _In_ int, _In_opt_ LPCRECT, _In_opt_ LPCRECT, _In_opt_ HRGN, _Out_opt_ LPRECT, _In_ UINT)
BOOL WINAPI IsWindowEnabled(_In_ HWND)
BOOL WINAPI IsWindowUnicode(_In_ HWND)
UINT WINAPI IsDlgButtonChecked(_In_ HWND, _In_ int)
virtual DLGPROC GetDialogProc()
Definition: atlwin.h:1338
BOOL WINAPI GetWindowPlacement(_In_ HWND, _Inout_ WINDOWPLACEMENT *)
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
BOOL HideCaret()
Definition: atlwin.h:816
HWND GetDlgItem(int nID)
Definition: atlwin.h:571
#define PtrToUlong(u)
Definition: config.h:107
CContainedWindowT(CMessageMap *pObject, DWORD dwMsgMapID=0)
Definition: atlwin.h:1665
BOOL ClientToScreen(LPRECT lpRect) const
Definition: atlwin.h:365
CWinTraits< WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN|WS_CLIPSIBLINGS, WS_EX_APPWINDOW|WS_EX_WINDOWEDGE > CFrameWinTraits
Definition: atlwin.h:87
BOOL SetWindowPlacement(const WINDOWPLACEMENT *lpwndpl)
Definition: atlwin.h:1214
#define PostMessage
Definition: winuser.h:5698
void SendMessageToDescendants(UINT message, WPARAM wParam=0, LPARAM lParam=0, BOOL bDeep=TRUE)
Definition: atlwin.h:1075
#define DlgDirSelectEx
Definition: winuser.h:5635
int SetDlgCtrlID(int nID)
Definition: atlwin.h:1112
BOOL ValidateRgn(HRGN hRgn)
Definition: atlwin.h:1289
int ScrollWindowEx(int dx, int dy, LPCRECT lpRectScroll, LPCRECT lpRectClip, HRGN hRgnUpdate, LPRECT lpRectUpdate, UINT flags)
Definition: atlwin.h:1036
HMENU GetMenu() const
Definition: atlwin.h:636
BOOL ClientToScreen(LPPOINT lpPoint) const
Definition: atlwin.h:359
char TCHAR
Definition: xmlstorage.h:189
int DlgDirListComboBox(LPTSTR lpPathSpec, int nIDComboBox, int nIDStaticPath, UINT nFileType)
Definition: atlwin.h:452
Definition: rosdlgs.h:5
DWORD GetHotKey() const
Definition: atlwin.h:618
int SetWindowRgn(HRGN hRgn, BOOL bRedraw=FALSE)
Definition: atlwin.h:1226
#define _T(x)
Definition: vfdio.h:22
virtual void OnFinalMessage(HWND)
Definition: atlwin.h:1478
CContainedWindowT(LPTSTR lpszClassName, CMessageMap *pObject, DWORD dwMsgMapID=0)
Definition: atlwin.h:1674
HDWP WINAPI DeferWindowPos(_In_ HDWP, _In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define HELP_CONTEXT
Definition: winuser.h:2360
#define GetDlgItemText
Definition: winuser.h:5651
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
HDC BeginPaint(LPPAINTSTRUCT lpPaint)
Definition: atlwin.h:297
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
_U_MENUorID(UINT nID)
Definition: atlwin.h:115
GLenum GLuint GLenum GLsizei length
Definition: glext.h:5579
BOOL WINAPI SetMenu(_In_ HWND, _In_opt_ HMENU)
HWND Create(LPCTSTR lpstrWndClass, HWND hWndParent, _U_RECT rect=NULL, LPCTSTR szWindowName=NULL, DWORD dwStyle=0, DWORD dwExStyle=0, _U_MENUorID MenuOrID=0U, LPVOID lpCreateParam=NULL)
Definition: atlwin.h:383
#define SWP_NOACTIVATE
Definition: winuser.h:1227
BOOL EnableScrollBar(UINT uSBFlags, UINT uArrowFlags=ESB_ENABLE_BOTH)
Definition: atlwin.h:483
virtual ~CWindowImplRoot()
Definition: atlwin.h:1321
_ATL_MSG(HWND hWnd, UINT uMsg, WPARAM wParamIn, LPARAM lParamIn, BOOL bHandledIn=TRUE)
Definition: atlwin.h:142
#define RDW_ERASE
Definition: winuser.h:1197
BOOL GetWindowPlacement(WINDOWPLACEMENT *lpwndpl) const
Definition: atlwin.h:750
HANDLE WINAPI GetCurrentProcess(VOID)
Definition: proc.c:1168
BOOL OpenClipboard()
Definition: atlwin.h:970
HDC GetWindowDC()
Definition: atlwin.h:732
int WINAPI GetScrollPos(_In_ HWND, _In_ int)
virtual WNDPROC GetWindowProc()
Definition: atlwin.h:1506
#define WM_NCDESTROY
Definition: winuser.h:1666
BOOL UpdateWindow()
Definition: atlwin.h:1277
BOOL WINAPI ValidateRect(_In_opt_ HWND, _In_opt_ LPCRECT)
HWND SetClipboardViewer()
Definition: atlwin.h:1106
DWORD WINAPI GetWindowContextHelpId(_In_ HWND)
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
BOOL CenterWindow(HWND hWndCenter=NULL)
Definition: atlwin.h:309
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
UINT GetDlgItemInt(int nID, BOOL *lpTrans=NULL, BOOL bSigned=TRUE) const
Definition: atlwin.h:577
#define success(from, fromstr, to, tostr)
#define SetLastError(x)
Definition: compat.h:409
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
#define SetDlgItemText
Definition: winuser.h:5715
BOOL IsParentDialog()
Definition: atlwin.h:870
ATOM Register(WNDPROC *p)
Definition: atlwin.h:1898
#define WM_PRINT
Definition: winuser.h:1841
GLbitfield flags
Definition: glext.h:7161
HINSTANCE hInstance
Definition: winuser.h:3174
LRESULT DefWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: atlwin.h:1683
HWND WINAPI ChildWindowFromPointEx(_In_ HWND, _In_ POINT, _In_ UINT)
BOOL DrawMenuBar()
Definition: atlwin.h:477
BOOL IsWindowUnicode()
Definition: atlwin.h:896
unsigned __int64 ULONG64
Definition: imports.h:198
BOOL WINAPI GetScrollInfo(_In_ HWND, _In_ int, _Inout_ LPSCROLLINFO)
#define DialogBoxParam
Definition: winuser.h:5630
LPRECT m_lpRect
Definition: atlwin.h:124
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
void SetRedraw(BOOL bRedraw=TRUE)
Definition: atlwin.h:1166
BOOL ScreenToClient(LPPOINT lpPoint) const
Definition: atlwin.h:1024
BOOL WINAPI SetDlgItemInt(_In_ HWND, _In_ int, _In_ UINT, _In_ BOOL)
HWND WINAPI GetWindow(_In_ HWND, _In_ UINT)
int GetWindowText(LPTSTR lpszStringBuf, int nMaxCount) const
Definition: atlwin.h:776
#define GetWindowLong
Definition: winuser.h:5662
BOOL SendNotifyMessage(UINT message, WPARAM wParam=0, LPARAM lParam=0)
Definition: atlwin.h:1088
static BOOL bInvert
Definition: win.c:51
static DWORD GetWndExStyle(DWORD dwExStyle)
Definition: atlwin.h:99
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
BOOL ShowScrollBar(UINT nBar, BOOL bShow=TRUE)
Definition: atlwin.h:1259
BOOL CreateGrayCaret(int nWidth, int nHeight)
Definition: atlwin.h:410
static INT_PTR CALLBACK DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: atlwin.h:1361
BOOL WINAPI GetUpdateRect(_In_ HWND, _Out_opt_ LPRECT, _In_ BOOL)
LONG GetWindowLong(int nIndex) const
Definition: atlwin.h:738
GLenum GLsizei len
Definition: glext.h:6722
unsigned char BYTE
Definition: mem.h:68
BOOL LockWindowUpdate(BOOL bLock=TRUE)
Definition: atlwin.h:914
static LRESULT CALLBACK StartWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: atlwin.h:1529
BOOL CreateSolidCaret(int nWidth, int nHeight)
Definition: atlwin.h:416
HWND m_hWnd
Definition: atlwin.h:268
HCURSOR hCursor
Definition: winuser.h:3176
#define MessageBox
Definition: winuser.h:5688
BOOL ShowCaret()
Definition: atlwin.h:1247
BOOL DestroyWindow()
Definition: atlwin.h:428
UINT GetDlgItemText(int nID, LPTSTR lpStr, int nMaxCount) const
Definition: atlwin.h:583
BOOL SetWindowContextHelpId(DWORD dwContextHelpId)
Definition: atlwin.h:1196
void NextDlgCtrl() const
Definition: atlwin.h:964
CMessageMap * m_pObject
Definition: atlwin.h:1661
static LRESULT SendMessage(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: atlwin.h:1054
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
void Attach(HWND hWndNew)
Definition: atlwin.h:292
int MapWindowPoints(HWND hWndTo, LPRECT lpRect) const
Definition: atlwin.h:928
WORD SetWindowWord(int nIndex, WORD wNewWord)
Definition: atlwin.h:1238
#define LoadCursor
Definition: winuser.h:5678
HWND Detach()
Definition: atlwin.h:439
#define GWLP_WNDPROC
Definition: treelist.c:66
BOOL IsIconic() const
Definition: atlwin.h:864
BOOL SubclassWindow(HWND hWnd)
Definition: atlwin.h:1688
static RECT rcDefault
Definition: atlwin.h:269
BOOL ShowOwnedPopups(BOOL bShow=TRUE)
Definition: atlwin.h:1253
int ReleaseDC(HDC hDC)
Definition: atlwin.h:1006
INT_PTR(CALLBACK * DLGPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2849
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
#define SWP_NOSIZE
Definition: winuser.h:1230
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2859
#define _In_
Definition: no_sal2.h:204
WORD GetWindowWord(int nIndex) const
Definition: atlwin.h:804
#define GWL_STYLE
Definition: winuser.h:846
CWndProcThunk m_thunk
Definition: atlwin.h:1311
_U_RECT(RECT &rc)
Definition: atlwin.h:131
static HDC hDC
Definition: 3dtext.c:33
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
WNDPROC m_pfnSuperWindowProc
Definition: atlwin.h:1660
int WINAPI SysReAllocStringLen(BSTR *old, const OLECHAR *str, unsigned int len)
Definition: oleaut.c:386
LONG_PTR GetWindowLongPtr(int nIndex) const
Definition: atlwin.h:744
HICON GetIcon(BOOL bBigIcon=TRUE) const
Definition: atlwin.h:624
HWND ChildWindowFromPoint(POINT point) const
Definition: atlwin.h:347
HWND WINAPI SetCapture(_In_ HWND hWnd)
BOOL WINAPI ShowOwnedPopups(_In_ HWND, _In_ BOOL)
HMENU GetSystemMenu(BOOL bRevert)
Definition: atlwin.h:684
HICON SetIcon(HICON hIcon, BOOL bBigIcon=TRUE)
Definition: atlwin.h:1148
_In_ BOOL bEnable
Definition: winddi.h:3426
WNDPROC m_pfnSuperWindowProc
Definition: atlwin.h:1470
BOOL IsZoomed() const
Definition: atlwin.h:902
static ATOM item
Definition: dde.c:856
HWND Create(HWND hWndParent, _U_RECT rect, LPCTSTR szWindowName, DWORD dwStyle, DWORD dwExStyle, _U_MENUorID MenuOrID, ATOM atom, LPVOID lpCreateParam)
Definition: atlwin.h:1591
int DlgDirList(LPTSTR lpPathSpec, int nIDListBox, int nIDStaticPath, UINT nFileType)
Definition: atlwin.h:446
BOOL ShowWindow(int nCmdShow)
Definition: atlwin.h:1265
BOOL PostMessage(UINT message, WPARAM wParam=0, LPARAM lParam=0)
Definition: atlwin.h:976
static BOOL CALLBACK SendMessageToDescendantsCallback(HWND hWnd, LPARAM lParam)
Definition: atlwin.h:1061
unsigned short USHORT
Definition: pedump.c:61
BOOL ModifyStyle(DWORD dwRemove, DWORD dwAdd, UINT nFlags=0)
Definition: atlwin.h:940
int GetDlgCtrlID() const
Definition: atlwin.h:559
HICON hIcon
Definition: msconfig.c:44
void Print(HDC hDC, DWORD dwFlags) const
Definition: atlwin.h:988
int SetHotKey(WORD wVirtualKeyCode, WORD wModifiers)
Definition: atlwin.h:1142
#define GCCU(x)
Definition: atlwin.h:27
BOOL GetDlgItemText(int nID, BSTR &bstrText) const
Definition: atlwin.h:600
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define SetWindowText
Definition: winuser.h:5723
HDC WINAPI GetWindowDC(_In_opt_ HWND)
unsigned int UINT
Definition: ndis.h:50
BOOL WINAPI IsZoomed(_In_ HWND)
#define MB_OK
Definition: winuser.h:784
HWND SetParent(HWND hWndNewParent)
Definition: atlwin.h:1160
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLint dx
Definition: linetemp.h:97
#define RealGetWindowClass
Definition: winuser.h:5701
#define WM_SETFONT
Definition: winuser.h:1632
BOOL WINAPI SetScrollRange(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ BOOL)
BOOL FlashWindow(BOOL bInvert)
Definition: atlwin.h:501
HDC GetDCEx(HRGN hRgnClip, DWORD flags)
Definition: atlwin.h:519
BOOL WINAPI IsChild(_In_ HWND, _In_ HWND)
LRESULT SendDlgItemMessage(int nID, UINT message, WPARAM wParam=0, LPARAM lParam=0)
Definition: atlwin.h:1042
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
BOOL Invalidate(BOOL bErase=TRUE)
Definition: atlwin.h:828
HWND GetTopLevelParent() const
Definition: atlwin.h:690
#define msg(x)
Definition: auth_time.c:54
#define RDW_UPDATENOW
Definition: winuser.h:1206
static DWORD GetWndExStyle(DWORD dwExStyle)
Definition: atlwin.h:1516
_Out_opt_ int * cx
Definition: commctrl.h:570
#define MEM_RELEASE
Definition: nt_native.h:1316
__declspec(selectany) CAtlModule *_pAtlModule
Definition: atlbase.h:525
#define SendMessage
Definition: winuser.h:5709
BOOL SetDlgItemInt(int nID, UINT nValue, BOOL bSigned=TRUE)
Definition: atlwin.h:1118
HWND WINAPI ChildWindowFromPoint(_In_ HWND, _In_ POINT)
BOOL GetWindowText(BSTR &bstrText)
Definition: atlwin.h:782
static LPCTSTR GetWndCaption()
Definition: atlwin.h:1626
#define HIWORD(l)
Definition: typedefs.h:246
LRESULT SendMessage(UINT message, WPARAM wParam=0, LPARAM lParam=0)
Definition: atlwin.h:1048
#define GetWindowTextLength
Definition: winuser.h:5665
BOOL WINAPI IsWindowVisible(_In_ HWND)
BOOL DlgDirSelectComboBox(LPTSTR lpString, int nCount, int nIDComboBox)
Definition: atlwin.h:464
HWND ChildWindowFromPointEx(POINT point, UINT uFlags) const
Definition: atlwin.h:353
static INT_PTR CALLBACK StartDialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: atlwin.h:1343
LONG bottom
Definition: windef.h:294
BOOL WINAPI ShowCaret(_In_opt_ HWND)
void InvalidateRgn(HRGN hRgn, BOOL bErase=TRUE)
Definition: atlwin.h:840
#define SWP_NOMOVE
Definition: winuser.h:1229
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
BOOL WINAPI CheckRadioButton(_In_ HWND, _In_ int, _In_ int, _In_ int)
BOOL NTAPI VirtualFree(IN LPVOID lpAddress, IN SIZE_T dwSize, IN DWORD dwFreeType)
Definition: virtmem.c:128
static HBITMAP
Definition: button.c:44
_U_MENUorID(HMENU hMenu)
Definition: atlwin.h:110
BOOL WINAPI OpenClipboard(_In_opt_ HWND)
static BOOL CALLBACK SendMessageToDescendantsCallbackDeep(HWND hWnd, LPARAM lParam)
Definition: atlwin.h:1067
#define PAGE_EXECUTE_READWRITE
Definition: nt_native.h:1308
int WINAPI GetWindowRgn(_In_ HWND, _In_ HRGN)
CWindow GetParent() const
Definition: atlwin.h:654
#define GetWindowLongPtr
Definition: treelist.c:73
BOOL WINAPI EnableScrollBar(_In_ HWND, _In_ UINT, _In_ UINT)
HDWP DeferWindowPos(HDWP hWinPosInfo, HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT uFlags)
Definition: atlwin.h:422
GLfloat GLfloat p
Definition: glext.h:8902
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
BOOL RedrawWindow(LPCRECT lpRectUpdate=NULL, HRGN hRgnUpdate=NULL, UINT flags=RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE)
Definition: atlwin.h:1000
LONG_PTR LRESULT
Definition: windef.h:209
WNDCLASSEXW m_wc
Definition: atlwin.h:1890
int MessageBox(LPCTSTR lpszText, LPCTSTR lpszCaption=NULL, UINT nType=MB_OK)
Definition: atlwin.h:934
GLuint64EXT * result
Definition: glext.h:11304
BOOL bHandled
Definition: atlwin.h:140
HMENU WINAPI GetMenu(_In_ HWND)
BOOL CreateCaret(HBITMAP pBitmap)
Definition: atlwin.h:404
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
BOOL SetScrollRange(int nBar, int nMinPos, int nMaxPos, BOOL bRedraw=TRUE)
Definition: atlwin.h:1184
LPCTSTR m_lpszClassName
Definition: atlwin.h:1659
int WINAPI SetScrollPos(_In_ HWND, _In_ int, _In_ int, _In_ BOOL)
LPARAM lParam
Definition: combotst.c:139
_In_ int nMaxCount
Definition: winuser.h:4746
HWND WINAPI GetActiveWindow(void)
Definition: winpos.c:138
#define LOWORD(l)
Definition: pedump.c:82
int WINAPI SetScrollInfo(_In_ HWND, _In_ int, _In_ LPCSCROLLINFO, _In_ BOOL)
HDC GetDC()
Definition: atlwin.h:513
#define ESB_ENABLE_BOTH
Definition: winuser.h:563
BOOL GetScrollRange(int nBar, LPINT lpMinPos, LPINT lpMaxPos) const
Definition: atlwin.h:672
INT_PTR DoModal(HWND hWndParent=::GetActiveWindow(), LPARAM dwInitParam=NULL)
Definition: atlwin.h:1435
static DWORD GetWndExStyle(DWORD dwExStyle)
Definition: atlwin.h:78
#define SendNotifyMessage
Definition: winuser.h:5712
#define MAKEINTATOM(i)
Definition: winbase.h:1416
BOOL DestroyWindow()
Definition: atlwin.h:1455
HWND GetTopWindow() const
Definition: atlwin.h:702
HWND GetTopLevelWindow() const
Definition: atlwin.h:696
HWND SetCapture()
Definition: atlwin.h:1100
HWND SetActiveWindow()
Definition: atlwin.h:1094
const _ATL_MSG * m_pCurrentMsg
Definition: atlwin.h:1312
DWORD GetWindowProcessID()
Definition: atlwin.h:756
BOOL IsWindowVisible() const
Definition: atlwin.h:890
#define RDW_INVALIDATE
Definition: winuser.h:1200
#define ERROR_OUTOFMEMORY
Definition: deptool.c:13
BOOL BringWindowToTop()
Definition: atlwin.h:303
static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: atlwin.h:1730
#define Unused(x)
Definition: atlwin.h:28
int * LPINT
Definition: windef.h:178
#define CreateDialogParam
Definition: winuser.h:5618
#define WinHelp
Definition: winuser.h:5730