annotate foosdk/wtl/Include/atldwm.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 // Windows Template Library - WTL version 10.0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 // Copyright (C) Microsoft Corporation, WTL Team. All rights reserved.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 // This file is a part of the Windows Template Library.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 // The use and distribution terms for this software are covered by the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 // Microsoft Public License (http://opensource.org/licenses/MS-PL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 // which can be found in the file MS-PL.txt at the root folder.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 #ifndef __ATLDWM_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 #define __ATLDWM_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 #ifndef __ATLAPP_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 #error atldwm.h requires atlapp.h to be included first
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 #ifndef __ATLWIN_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 #error atldwm.h requires atlwin.h to be included first
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 #if (_WIN32_WINNT < 0x0600)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 #error atldwm.h requires _WIN32_WINNT >= 0x0600
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 #ifndef _DWMAPI_H_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 #include <dwmapi.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 #pragma comment(lib, "dwmapi.lib")
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 // Note: To create an application that also runs on older versions of Windows,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 // use delay load of dwmapi.dll and ensure that no calls to the DWM API are
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 // Delay load is NOT AUTOMATIC for VC++ 7, you have to link to delayimp.lib,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 // and add dwmapi.dll in the Linker.Input.Delay Loaded DLLs section of the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 // project properties.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 // Classes in this file:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 // CDwm
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 // CDwmImpl<T, TBase>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 // CDwmWindowT<TBase> - CDwmWindow
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 // CDwmThumbnailT<t_bManaged, TBase>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 // CDwmThumbnail
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 // CDwmThumbnailHandle
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 // CAeroControlImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 namespace WTL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 // CDwm - wrapper for DWM handle
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 class CDwm
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 static int m_nIsDwmSupported;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 // Constructor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 CDwm()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 IsDwmSupported();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 // Dwm support helper
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 static bool IsDwmSupported()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 if(m_nIsDwmSupported == -1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 CStaticDataInitCriticalSectionLock lock;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 if(FAILED(lock.Lock()))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 ATLTRACE2(atlTraceUI, 0, _T("ERROR : Unable to lock critical section in CDwm::IsDwmSupported.\n"));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 ATLASSERT(FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 if(m_nIsDwmSupported == -1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 HMODULE hDwmDLL = ::LoadLibrary(_T("dwmapi.dll"));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 m_nIsDwmSupported = (hDwmDLL != NULL) ? 1 : 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 if(hDwmDLL != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 ::FreeLibrary(hDwmDLL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 lock.Unlock();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 ATLASSERT(m_nIsDwmSupported != -1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 return (m_nIsDwmSupported == 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 BOOL DwmIsCompositionEnabled() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 if(!IsDwmSupported())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 BOOL bRes = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 return (SUCCEEDED(::DwmIsCompositionEnabled(&bRes)) && bRes) ? TRUE : FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 BOOL DwmEnableComposition(UINT fEnable)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 if(!IsDwmSupported())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 return SUCCEEDED(::DwmEnableComposition(fEnable)) ? TRUE : FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 BOOL DwmEnableMMCSS(BOOL fEnableMMCSS)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 if(!IsDwmSupported())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 return SUCCEEDED(::DwmEnableMMCSS(fEnableMMCSS)) ? TRUE : FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 HRESULT DwmGetColorizationColor(DWORD* pcrColorization, BOOL* pfOpaqueBlend)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 if(!IsDwmSupported())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 return E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 return ::DwmGetColorizationColor(pcrColorization, pfOpaqueBlend);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 HRESULT DwmFlush()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 if(!IsDwmSupported())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 return E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 return ::DwmFlush();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 __declspec(selectany) int CDwm::m_nIsDwmSupported = -1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143 // CDwmImpl - DWM window support
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 template <class T, class TBase = CDwm>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 class CDwmImpl : public TBase
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 HRESULT DwmEnableBlurBehindWindow(const DWM_BLURBEHIND* pBB)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 if(!this->IsDwmSupported())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 return E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 ATLASSERT(::IsWindow(pT->m_hWnd));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 return ::DwmEnableBlurBehindWindow(pT->m_hWnd, pBB);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 HRESULT DwmExtendFrameIntoClientArea(const MARGINS* pMargins)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 if(!this->IsDwmSupported())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 return E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 ATLASSERT(::IsWindow(pT->m_hWnd));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 return ::DwmExtendFrameIntoClientArea(pT->m_hWnd, pMargins);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 HRESULT DwmExtendFrameIntoEntireClientArea()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 MARGINS margins = { -1 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 return DwmExtendFrameIntoClientArea(&margins);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 HRESULT DwmGetCompositionTimingInfo(DWM_TIMING_INFO* pTimingInfo)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 if(!this->IsDwmSupported())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 return E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 ATLASSERT(::IsWindow(pT->m_hWnd));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 return ::DwmGetCompositionTimingInfo(pT->m_hWnd, pTimingInfo);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 HRESULT DwmGetWindowAttribute(DWORD dwAttribute, PVOID pvAttribute, DWORD cbAttribute)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 if(!this->IsDwmSupported())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 return E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 ATLASSERT(::IsWindow(pT->m_hWnd));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 return ::DwmGetWindowAttribute(pT->m_hWnd, dwAttribute, pvAttribute, cbAttribute);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 HRESULT DwmModifyPreviousDxFrameDuration(INT cRefreshes, BOOL fRelative)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197 if(!this->IsDwmSupported())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198 return E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201 ATLASSERT(::IsWindow(pT->m_hWnd));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 return ::DwmModifyPreviousDxFrameDuration(pT->m_hWnd, cRefreshes, fRelative);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 HRESULT DwmSetDxFrameDuration(INT cRefreshes)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207 if(!this->IsDwmSupported())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208 return E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211 ATLASSERT(::IsWindow(pT->m_hWnd));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 return ::DwmSetDxFrameDuration(pT->m_hWnd, cRefreshes);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
214
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
215 HRESULT DwmSetPresentParameters(DWM_PRESENT_PARAMETERS* pPresentParams)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
216 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
217 if(!this->IsDwmSupported())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218 return E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
220 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
221 ATLASSERT(::IsWindow(pT->m_hWnd));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
222 return ::DwmSetPresentParameters(pT->m_hWnd, pPresentParams);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
223 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
224
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
225 HRESULT DwmSetWindowAttribute(DWORD dwAttribute, LPCVOID pvAttribute, DWORD cbAttribute)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
226 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
227 if(!this->IsDwmSupported())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
228 return E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
229
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
230 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
231 ATLASSERT(::IsWindow(pT->m_hWnd));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
232 return ::DwmSetWindowAttribute(pT->m_hWnd, dwAttribute, pvAttribute, cbAttribute);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
233 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
234
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
235 HRESULT DwmAttachMilContent()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
236 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
237 if(!this->IsDwmSupported())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
238 return E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
239
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
240 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
241 ATLASSERT(::IsWindow(pT->m_hWnd));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
242 return ::DwmAttachMilContent(pT->m_hWnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
243 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
244
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
245 HRESULT DwmDetachMilContent()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
246 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
247 if(!this->IsDwmSupported())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
248 return E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
249
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
250 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
251 ATLASSERT(::IsWindow(pT->m_hWnd));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
252 return ::DwmDetachMilContent(pT->m_hWnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
253 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
254 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
255
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
256 template <class TBase>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
257 class CDwmWindowT : public TBase, public CDwmImpl<CDwmWindowT< TBase > >
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
258 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
259 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
260 CDwmWindowT(HWND hWnd = NULL) : TBase(hWnd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
261 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
262
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
263 CDwmWindowT< TBase >& operator =(HWND hWnd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
264 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
265 this->m_hWnd = hWnd;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
266 return *this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
267 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
268 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
269
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
270 typedef CDwmWindowT<ATL::CWindow> CDwmWindow;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
271
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
272
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
273 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
274 // CDwmThumbnail - provides DWM thumbnail support
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
275
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
276 template <bool t_bManaged, class TBase = CDwm>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
277 class CDwmThumbnailT : public TBase
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
278 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
279 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
280 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
281 HTHUMBNAIL m_hThumbnail;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
282
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
283 // Constructor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
284 CDwmThumbnailT(HTHUMBNAIL hThumbnail = NULL) : m_hThumbnail(hThumbnail)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
285 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
286
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
287 ~CDwmThumbnailT()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
288 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
289 if(t_bManaged && (m_hThumbnail != NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
290 Unregister();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
291 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
292
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
293 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
294 CDwmThumbnailT<t_bManaged, TBase>& operator =(HTHUMBNAIL hThumbnail)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
295 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
296 Attach(hThumbnail);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
297 return *this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
298 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
299
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
300 void Attach(HTHUMBNAIL hThumbnailNew)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
301 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
302 if(t_bManaged && (m_hThumbnail != NULL) && (m_hThumbnail != hThumbnailNew))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
303 Unregister();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
304 m_hThumbnail = hThumbnailNew;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
305 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
306
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
307 HTHUMBNAIL Detach()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
308 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
309 HTHUMBNAIL hThumbnail = m_hThumbnail;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
310 m_hThumbnail = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
311 return hThumbnail;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
312 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
313
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
314 HRESULT Register(HWND hwndDestination, HWND hwndSource)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
315 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
316 ATLASSERT(::IsWindow(hwndDestination));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
317 ATLASSERT(::IsWindow(hwndSource));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
318 ATLASSERT(m_hThumbnail==NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
319
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
320 if(!this->IsDwmSupported())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
321 return E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
322
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
323 return ::DwmRegisterThumbnail(hwndDestination, hwndSource, &m_hThumbnail);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
324 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
325
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
326 HRESULT Unregister()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
327 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
328 if(!this->IsDwmSupported())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
329 return E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
330 if(m_hThumbnail == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
331 return S_FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
332
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
333 HRESULT Hr = ::DwmUnregisterThumbnail(m_hThumbnail);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
334 if(SUCCEEDED(Hr))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
335 m_hThumbnail = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
336
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
337 return Hr;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
338 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
339
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
340 operator HTHUMBNAIL() const { return m_hThumbnail; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
341
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
342 bool IsNull() const { return (m_hThumbnail == NULL); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
343
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
344 HRESULT UpdateProperties(const DWM_THUMBNAIL_PROPERTIES* ptnProperties)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
345 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
346 if(!this->IsDwmSupported())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
347 return E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
348
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
349 ATLASSERT(m_hThumbnail != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
350 return ::DwmUpdateThumbnailProperties(m_hThumbnail, ptnProperties);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
351 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
352
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
353 // Attributes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
354 HRESULT QuerySourceSize(PSIZE pSize)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
355 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
356 if(!this->IsDwmSupported())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
357 return E_NOTIMPL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
358
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
359 ATLASSERT(m_hThumbnail != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
360 return ::DwmQueryThumbnailSourceSize(m_hThumbnail, pSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
361 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
362 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
363
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
364 typedef CDwmThumbnailT<true, CDwm> CDwmThumbnail;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
365 typedef CDwmThumbnailT<false, CDwm> CDwmThumbnailHandle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
366
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
367
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
368 #ifdef __ATLTHEME_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
369
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
370 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
371 // CAeroControlImpl - Base class for controls on Glass
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
372
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
373 template <class T, class TBase = ATL::CWindow, class TWinTraits = ATL::CControlWinTraits>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
374 class CAeroControlImpl : public CThemeImpl<T>,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
375 public CBufferedPaintImpl<T>,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
376 public ATL::CWindowImpl<T, TBase, TWinTraits>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
377 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
378 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
379 typedef CThemeImpl<T> _themeClass;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
380 typedef CBufferedPaintImpl<T> _baseClass;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
381 typedef ATL::CWindowImpl<T, TBase, TWinTraits> _windowClass;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
382
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
383 CAeroControlImpl()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
384 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
385 this->m_PaintParams.dwFlags = BPPF_ERASE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
386 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
387
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
388 static LPCWSTR GetThemeName()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
389 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
390 #ifdef _UNICODE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
391 return TBase::GetWndClassName();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
392 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
393 ATLASSERT(!_T("Return UNICODE string of window classname / theme class"));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
394 return NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
395 #endif // _UNICODE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
396 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
397
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
398 // Message map and handlers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
399 BEGIN_MSG_MAP(CAeroControlImpl)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
400 MESSAGE_HANDLER(WM_CREATE, OnCreate)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
401 MESSAGE_HANDLER(WM_ACTIVATE, OnActivate)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
402 CHAIN_MSG_MAP(_themeClass)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
403 CHAIN_MSG_MAP(_baseClass)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
404 END_MSG_MAP()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
405
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
406 LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
407 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
408 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
409 pT->Init();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
410
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
411 bHandled = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
412 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
413 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
414
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
415 LRESULT OnActivate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
416 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
417 if(this->IsThemingSupported())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
418 this->Invalidate(FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
419
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
420 bHandled = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
421 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
422 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
423
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
424 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
425 BOOL SubclassWindow(HWND hWnd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
426 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
427 ATLASSERT(this->m_hWnd == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
428 ATLASSERT(::IsWindow(hWnd));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
429 BOOL bRet = _windowClass::SubclassWindow(hWnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
430 if(bRet)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
431 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
432 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
433 pT->Init();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
434 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
435
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
436 return bRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
437 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
438
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
439 // Implementation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
440 LRESULT DefWindowProc()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
441 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
442 const ATL::_ATL_MSG* pMsg = this->m_pCurrentMsg;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
443 LRESULT lRes = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
444 if(pMsg != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
445 lRes = DefWindowProc(pMsg->message, pMsg->wParam, pMsg->lParam);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
446
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
447 return lRes;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
448 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
449
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
450 LRESULT DefWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
451 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
452 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
453 LRESULT lRes = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
454 if(::DwmDefWindowProc(pT->m_hWnd, uMsg, wParam, lParam, &lRes) != FALSE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
455 return lRes;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
456
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
457 return _windowClass::DefWindowProc(uMsg, wParam, lParam);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
458 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
459
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
460 void DoBufferedPaint(HDC hDC, RECT& rcPaint)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
461 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
462 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
463 HDC hDCPaint = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
464 RECT rcClient = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
465 this->GetClientRect(&rcClient);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
466 this->m_BufferedPaint.Begin(hDC, &rcClient, this->m_dwFormat, &this->m_PaintParams, &hDCPaint);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
467 ATLASSERT(hDCPaint != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
468 pT->DoAeroPaint(hDCPaint, rcClient, rcPaint);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
469 this->m_BufferedPaint.End();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
470 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
471
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
472 void DoPaint(HDC /*hdc*/, RECT& /*rcClient*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
473 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
474 DefWindowProc();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
475 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
476
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
477 // Overridables
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
478 void Init()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
479 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
480 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
481 (void)pT; // avoid level 4 warning
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
482 this->SetThemeClassList(pT->GetThemeName());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
483 if(this->m_lpstrThemeClassList != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
484 this->OpenThemeData();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
485 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
486
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
487 void DoAeroPaint(HDC hDC, RECT& /*rcClient*/, RECT& rcPaint)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
488 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
489 DefWindowProc(WM_PAINT, (WPARAM) hDC, 0L);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
490 this->m_BufferedPaint.MakeOpaque(&rcPaint);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
491 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
492 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
493
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
494 #endif // __ATLTHEME_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
495
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
496 } // namespace WTL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
497
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
498 #endif // __ATLDWM_H__