annotate foosdk/wtl/Include/atluser.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 __ATLUSER_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 #define __ATLUSER_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 atluser.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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 // Classes in this file:
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 // CMenuItemInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 // CMenuT<t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 // CAcceleratorT<t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 // CIconT<t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 // CCursorT<t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 // CResource
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 // Global functions:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 // AtlMessageBox()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 // AtlLoadAccelerators()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 // AtlLoadMenu()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 // AtlLoadBitmap()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 // AtlLoadSysBitmap()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 // AtlLoadCursor()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 // AtlLoadSysCursor()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 // AtlLoadIcon()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 // AtlLoadSysIcon()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 // AtlLoadBitmapImage()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 // AtlLoadCursorImage()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 // AtlLoadIconImage()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 // AtlLoadSysBitmapImage()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 // AtlLoadSysCursorImage()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 // AtlLoadSysIconImage()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 // AtlLoadString()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47
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 namespace WTL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 {
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 // AtlMessageBox - accepts both memory and resource based strings
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 inline int AtlMessageBox(HWND hWndOwner, ATL::_U_STRINGorID message, ATL::_U_STRINGorID title = (LPCTSTR)NULL, UINT uType = MB_OK | MB_ICONINFORMATION)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 ATLASSERT((hWndOwner == NULL) || ::IsWindow(hWndOwner));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 LPTSTR lpstrMessage = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 if(IS_INTRESOURCE(message.m_lpstr))
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 for(int nLen = 256; ; nLen *= 2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 ATLTRY(lpstrMessage = new TCHAR[nLen]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 if(lpstrMessage == NULL)
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 ATLASSERT(FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 int nRes = ::LoadString(ModuleHelper::GetResourceInstance(), LOWORD(message.m_lpstr), lpstrMessage, nLen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 if(nRes < nLen - 1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 delete [] lpstrMessage;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 lpstrMessage = NULL;
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 message.m_lpstr = lpstrMessage;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 }
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 LPTSTR lpstrTitle = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 if(IS_INTRESOURCE(title.m_lpstr) && (LOWORD(title.m_lpstr) != 0))
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 for(int nLen = 256; ; nLen *= 2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 ATLTRY(lpstrTitle = new TCHAR[nLen]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 if(lpstrTitle == NULL)
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 ATLASSERT(FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 return 0;
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 int nRes = ::LoadString(ModuleHelper::GetResourceInstance(), LOWORD(title.m_lpstr), lpstrTitle, nLen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 if(nRes < nLen - 1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 delete [] lpstrTitle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 lpstrTitle = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 title.m_lpstr = lpstrTitle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 int nRet = ::MessageBox(hWndOwner, message.m_lpstr, title.m_lpstr, uType);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 delete [] lpstrMessage;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 delete [] lpstrTitle;
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 return nRet;
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109
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 // CMenu
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 class CMenuItemInfo : public MENUITEMINFO
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 CMenuItemInfo()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 memset(this, 0, sizeof(MENUITEMINFO));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 cbSize = sizeof(MENUITEMINFO);
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
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 // forward declarations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 template <bool t_bManaged> class CMenuT;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126 typedef CMenuT<false> CMenuHandle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 typedef CMenuT<true> CMenu;
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 template <bool t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 class CMenuT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 HMENU m_hMenu;
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 // Constructor/destructor/operators
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 CMenuT(HMENU hMenu = NULL) : m_hMenu(hMenu)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 { }
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 ~CMenuT()
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 if(t_bManaged && (m_hMenu != NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 DestroyMenu();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 CMenuT<t_bManaged>& operator =(HMENU hMenu)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 Attach(hMenu);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150 return *this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 void Attach(HMENU hMenuNew)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 ATLASSERT(::IsMenu(hMenuNew));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 if(t_bManaged && (m_hMenu != NULL) && (m_hMenu != hMenuNew))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 ::DestroyMenu(m_hMenu);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 m_hMenu = hMenuNew;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 }
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 HMENU Detach()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 HMENU hMenu = m_hMenu;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 m_hMenu = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 return hMenu;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 }
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 operator HMENU() const { return m_hMenu; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 bool IsNull() const { return (m_hMenu == NULL); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 BOOL IsMenu() const
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 return ::IsMenu(m_hMenu);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 }
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 // Create/destroy methods
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 BOOL CreateMenu()
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 ATLASSERT(m_hMenu == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 m_hMenu = ::CreateMenu();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 return (m_hMenu != NULL) ? TRUE : FALSE;
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 BOOL CreatePopupMenu()
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 ATLASSERT(m_hMenu == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 m_hMenu = ::CreatePopupMenu();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189 return (m_hMenu != NULL) ? TRUE : FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 BOOL LoadMenu(ATL::_U_STRINGorID menu)
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 ATLASSERT(m_hMenu == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 m_hMenu = ::LoadMenu(ModuleHelper::GetResourceInstance(), menu.m_lpstr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 return (m_hMenu != NULL) ? TRUE : FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199 BOOL LoadMenuIndirect(const void* lpMenuTemplate)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201 ATLASSERT(m_hMenu == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 m_hMenu = ::LoadMenuIndirect(lpMenuTemplate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 return (m_hMenu != NULL) ? TRUE : FALSE;
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 BOOL DestroyMenu()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208 if (m_hMenu == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 BOOL bRet = ::DestroyMenu(m_hMenu);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211 if(bRet)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 m_hMenu = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213 return bRet;
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
216 // Menu Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
217 BOOL DeleteMenu(UINT nPosition, UINT nFlags)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
220 return ::DeleteMenu(m_hMenu, nPosition, nFlags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
221 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
222
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
223 BOOL TrackPopupMenu(UINT nFlags, int x, int y, HWND hWnd, LPCRECT lpRect = NULL)
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 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
226 x = _FixTrackMenuPopupX(x, y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
227 return ::TrackPopupMenu(m_hMenu, nFlags, x, y, 0, hWnd, lpRect);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
228 }
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 BOOL TrackPopupMenuEx(UINT uFlags, int x, int y, HWND hWnd, LPTPMPARAMS lptpm = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
231 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
232 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
233 x = _FixTrackMenuPopupX(x, y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
234 return ::TrackPopupMenuEx(m_hMenu, uFlags, x, y, hWnd, lptpm);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
235 }
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 // helper that fixes popup menu X position when it's off-screen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
238 static int _FixTrackMenuPopupX(int x, int y)
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 POINT pt = { x, y };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
241 HMONITOR hMonitor = ::MonitorFromPoint(pt, MONITOR_DEFAULTTONULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
242 if(hMonitor == NULL)
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 HMONITOR hMonitorNear = ::MonitorFromPoint(pt, MONITOR_DEFAULTTONEAREST);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
245 if(hMonitorNear != NULL)
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 MONITORINFO mi = { sizeof(MONITORINFO) };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
248 if(::GetMonitorInfo(hMonitorNear, &mi) != FALSE)
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 if(x < mi.rcWork.left)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
251 x = mi.rcWork.left;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
252 else if(x > mi.rcWork.right)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
253 x = mi.rcWork.right;
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 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
257
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
258 return x;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
259 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
260
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
261 BOOL GetMenuInfo(LPMENUINFO lpMenuInfo) const
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 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
264 return ::GetMenuInfo(m_hMenu, lpMenuInfo);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
265 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
266
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
267 BOOL SetMenuInfo(LPCMENUINFO lpMenuInfo)
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 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
270 return ::SetMenuInfo(m_hMenu, lpMenuInfo);
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 // Menu Item Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
274 BOOL AppendMenu(UINT nFlags, UINT_PTR nIDNewItem = 0, LPCTSTR lpszNewItem = NULL)
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 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
277 return ::AppendMenu(m_hMenu, nFlags, nIDNewItem, lpszNewItem);
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
280 BOOL AppendMenu(UINT nFlags, HMENU hSubMenu, LPCTSTR lpszNewItem)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
281 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
282 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
283 ATLASSERT(::IsMenu(hSubMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
284 return ::AppendMenu(m_hMenu, nFlags | MF_POPUP, (UINT_PTR)hSubMenu, lpszNewItem);
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 BOOL AppendMenu(UINT nFlags, UINT_PTR nIDNewItem, HBITMAP hBmp)
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 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
290 return ::AppendMenu(m_hMenu, nFlags | MF_BITMAP, nIDNewItem, (LPCTSTR)hBmp);
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 BOOL AppendMenu(UINT nFlags, HMENU hSubMenu, HBITMAP hBmp)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
294 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
295 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
296 ATLASSERT(::IsMenu(hSubMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
297 return ::AppendMenu(m_hMenu, nFlags | (MF_BITMAP | MF_POPUP), (UINT_PTR)hSubMenu, (LPCTSTR)hBmp);
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 UINT CheckMenuItem(UINT nIDCheckItem, UINT nCheck)
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 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
303 return (UINT)::CheckMenuItem(m_hMenu, nIDCheckItem, nCheck);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
304 }
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 UINT EnableMenuItem(UINT nIDEnableItem, UINT nEnable)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
307 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
308 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
309 return ::EnableMenuItem(m_hMenu, nIDEnableItem, nEnable);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
310 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
311
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
312 BOOL HiliteMenuItem(HWND hWnd, UINT uIDHiliteItem, UINT uHilite)
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 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
315 return ::HiliteMenuItem(hWnd, m_hMenu, uIDHiliteItem, uHilite);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
316 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
317
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
318 int GetMenuItemCount() const
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 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
321 return ::GetMenuItemCount(m_hMenu);
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
324 UINT GetMenuItemID(int nPos) const
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 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
327 return ::GetMenuItemID(m_hMenu, nPos);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
328 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
329
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
330 UINT GetMenuState(UINT nID, UINT nFlags) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
331 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
332 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
333 return ::GetMenuState(m_hMenu, nID, nFlags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
334 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
335
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
336 int GetMenuString(UINT nIDItem, LPTSTR lpString, int nMaxCount, UINT nFlags) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
337 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
338 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
339 return ::GetMenuString(m_hMenu, nIDItem, lpString, nMaxCount, nFlags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
340 }
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 int GetMenuStringLen(UINT nIDItem, UINT nFlags) const
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 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
345 return ::GetMenuString(m_hMenu, nIDItem, NULL, 0, nFlags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
346 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
347
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
348 BOOL GetMenuString(UINT nIDItem, BSTR& bstrText, UINT nFlags) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
349 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
350 USES_CONVERSION;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
351 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
352 ATLASSERT(bstrText == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
353
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
354 int nLen = GetMenuStringLen(nIDItem, nFlags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
355 if(nLen == 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
356 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
357 bstrText = ::SysAllocString(OLESTR(""));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
358 return (bstrText != NULL) ? TRUE : FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
359 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
360
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
361 nLen++; // increment to include terminating NULL char
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
362 ATL::CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
363 LPTSTR lpszText = buff.Allocate(nLen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
364 if(lpszText == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
365 return FALSE;
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 if(!GetMenuString(nIDItem, lpszText, nLen, nFlags))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
368 return FALSE;
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 bstrText = ::SysAllocString(T2OLE(lpszText));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
371 return (bstrText != NULL) ? TRUE : FALSE;
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
374 #ifdef __ATLSTR_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
375 int GetMenuString(UINT nIDItem, ATL::CString& strText, UINT nFlags) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
376 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
377 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
378
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
379 int nLen = GetMenuStringLen(nIDItem, nFlags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
380 if(nLen == 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
381 return 0;
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 nLen++; // increment to include terminating NULL char
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
384 LPTSTR lpstr = strText.GetBufferSetLength(nLen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
385 if(lpstr == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
386 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
387 int nRet = GetMenuString(nIDItem, lpstr, nLen, nFlags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
388 strText.ReleaseBuffer();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
389 return nRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
390 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
391 #endif // __ATLSTR_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
392
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
393 CMenuHandle GetSubMenu(int nPos) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
394 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
395 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
396 return CMenuHandle(::GetSubMenu(m_hMenu, nPos));
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
399 BOOL InsertMenu(UINT nPosition, UINT nFlags, UINT_PTR nIDNewItem = 0, LPCTSTR lpszNewItem = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
400 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
401 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
402 return ::InsertMenu(m_hMenu, nPosition, nFlags, nIDNewItem, lpszNewItem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
403 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
404
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
405 BOOL InsertMenu(UINT nPosition, UINT nFlags, HMENU hSubMenu, LPCTSTR lpszNewItem)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
406 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
407 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
408 ATLASSERT(::IsMenu(hSubMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
409 return ::InsertMenu(m_hMenu, nPosition, nFlags | MF_POPUP, (UINT_PTR)hSubMenu, lpszNewItem);
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
412 BOOL InsertMenu(UINT nPosition, UINT nFlags, UINT_PTR nIDNewItem, HBITMAP hBmp)
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 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
415 return ::InsertMenu(m_hMenu, nPosition, nFlags | MF_BITMAP, nIDNewItem, (LPCTSTR)hBmp);
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
418 BOOL InsertMenu(UINT nPosition, UINT nFlags, HMENU hSubMenu, HBITMAP hBmp)
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 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
421 ATLASSERT(::IsMenu(hSubMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
422 return ::InsertMenu(m_hMenu, nPosition, nFlags | (MF_BITMAP | MF_POPUP), (UINT_PTR)hSubMenu, (LPCTSTR)hBmp);
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
425 BOOL ModifyMenu(UINT nPosition, UINT nFlags, UINT_PTR nIDNewItem = 0, LPCTSTR lpszNewItem = NULL)
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(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
428 return ::ModifyMenu(m_hMenu, nPosition, nFlags, nIDNewItem, lpszNewItem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
429 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
430
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
431 BOOL ModifyMenu(UINT nPosition, UINT nFlags, HMENU hSubMenu, LPCTSTR lpszNewItem)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
432 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
433 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
434 ATLASSERT(::IsMenu(hSubMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
435 return ::ModifyMenu(m_hMenu, nPosition, nFlags | MF_POPUP, (UINT_PTR)hSubMenu, lpszNewItem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
436 }
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 BOOL ModifyMenu(UINT nPosition, UINT nFlags, UINT_PTR nIDNewItem, HBITMAP hBmp)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
439 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
440 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
441 return ::ModifyMenu(m_hMenu, nPosition, nFlags | MF_BITMAP, nIDNewItem, (LPCTSTR)hBmp);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
442 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
443
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
444 BOOL ModifyMenu(UINT nPosition, UINT nFlags, HMENU hSubMenu, HBITMAP hBmp)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
445 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
446 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
447 ATLASSERT(::IsMenu(hSubMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
448 return ::ModifyMenu(m_hMenu, nPosition, nFlags | (MF_BITMAP | MF_POPUP), (UINT_PTR)hSubMenu, (LPCTSTR)hBmp);
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
451 BOOL RemoveMenu(UINT nPosition, UINT nFlags)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
452 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
453 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
454 return ::RemoveMenu(m_hMenu, nPosition, nFlags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
455 }
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 BOOL SetMenuItemBitmaps(UINT nPosition, UINT nFlags, HBITMAP hBmpUnchecked, HBITMAP hBmpChecked)
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 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
460 return ::SetMenuItemBitmaps(m_hMenu, nPosition, nFlags, hBmpUnchecked, hBmpChecked);
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
463 BOOL CheckMenuRadioItem(UINT nIDFirst, UINT nIDLast, UINT nIDItem, UINT nFlags)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
464 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
465 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
466 return ::CheckMenuRadioItem(m_hMenu, nIDFirst, nIDLast, nIDItem, nFlags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
467 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
468
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
469 BOOL GetMenuItemInfo(UINT uItem, BOOL bByPosition, LPMENUITEMINFO lpmii) const
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 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
472 return (BOOL)::GetMenuItemInfo(m_hMenu, uItem, bByPosition, lpmii);
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
475 BOOL SetMenuItemInfo(UINT uItem, BOOL bByPosition, LPMENUITEMINFO lpmii)
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 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
478 return (BOOL)::SetMenuItemInfo(m_hMenu, uItem, bByPosition, lpmii);
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
481 BOOL InsertMenuItem(UINT uItem, BOOL bByPosition, LPMENUITEMINFO lpmii)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
482 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
483 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
484 return (BOOL)::InsertMenuItem(m_hMenu, uItem, bByPosition, lpmii);
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 UINT GetMenuDefaultItem(BOOL bByPosition = FALSE, UINT uFlags = 0U) const
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 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
490 return ::GetMenuDefaultItem(m_hMenu, (UINT)bByPosition, uFlags);
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 BOOL SetMenuDefaultItem(UINT uItem = (UINT)-1, BOOL bByPosition = FALSE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
494 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
495 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
496 return ::SetMenuDefaultItem(m_hMenu, uItem, (UINT)bByPosition);
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
499 BOOL GetMenuItemRect(HWND hWnd, UINT uItem, LPRECT lprcItem) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
500 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
501 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
502 return ::GetMenuItemRect(hWnd, m_hMenu, uItem, lprcItem);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
503 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
504
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
505 int MenuItemFromPoint(HWND hWnd, POINT point) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
506 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
507 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
508 return ::MenuItemFromPoint(hWnd, m_hMenu, point);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
509 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
510
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
511 // Context Help Functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
512 BOOL SetMenuContextHelpId(DWORD dwContextHelpId)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
513 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
514 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
515 return ::SetMenuContextHelpId(m_hMenu, dwContextHelpId);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
516 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
517
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
518 DWORD GetMenuContextHelpId() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
519 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
520 ATLASSERT(::IsMenu(m_hMenu));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
521 return ::GetMenuContextHelpId(m_hMenu);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
522 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
523 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
524
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
525
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
526 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
527 // CAccelerator
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
528
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
529 template <bool t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
530 class CAcceleratorT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
531 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
532 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
533 HACCEL m_hAccel;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
534
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
535 // Constructor/destructor/operators
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
536 CAcceleratorT(HACCEL hAccel = NULL) : m_hAccel(hAccel)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
537 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
538
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
539 ~CAcceleratorT()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
540 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
541 if(t_bManaged && (m_hAccel != NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
542 ::DestroyAcceleratorTable(m_hAccel);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
543 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
544
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
545 CAcceleratorT<t_bManaged>& operator =(HACCEL hAccel)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
546 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
547 Attach(hAccel);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
548 return *this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
549 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
550
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
551 void Attach(HACCEL hAccel)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
552 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
553 if(t_bManaged && (m_hAccel != NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
554 ::DestroyAcceleratorTable(m_hAccel);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
555 m_hAccel = hAccel;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
556 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
557
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
558 HACCEL Detach()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
559 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
560 HACCEL hAccel = m_hAccel;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
561 m_hAccel = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
562 return hAccel;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
563 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
564
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
565 operator HACCEL() const { return m_hAccel; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
566
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
567 bool IsNull() const { return m_hAccel == NULL; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
568
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
569 // Create/destroy methods
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
570 HACCEL LoadAccelerators(ATL::_U_STRINGorID accel)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
571 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
572 ATLASSERT(m_hAccel == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
573 m_hAccel = ::LoadAccelerators(ModuleHelper::GetResourceInstance(), accel.m_lpstr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
574 return m_hAccel;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
575 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
576
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
577 HACCEL CreateAcceleratorTable(LPACCEL pAccel, int cEntries)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
578 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
579 ATLASSERT(m_hAccel == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
580 ATLASSERT(pAccel != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
581 m_hAccel = ::CreateAcceleratorTable(pAccel, cEntries);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
582 return m_hAccel;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
583 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
584
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
585 void DestroyObject()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
586 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
587 if(m_hAccel != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
588 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
589 ::DestroyAcceleratorTable(m_hAccel);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
590 m_hAccel = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
591 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
592 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
593
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
594 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
595 int CopyAcceleratorTable(LPACCEL lpAccelDst, int cEntries)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
596 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
597 ATLASSERT(m_hAccel != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
598 ATLASSERT(lpAccelDst != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
599 return ::CopyAcceleratorTable(m_hAccel, lpAccelDst, cEntries);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
600 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
601
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
602 int GetEntriesCount() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
603 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
604 ATLASSERT(m_hAccel != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
605 return ::CopyAcceleratorTable(m_hAccel, NULL, 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
606 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
607
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
608 BOOL TranslateAccelerator(HWND hWnd, LPMSG pMsg)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
609 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
610 ATLASSERT(m_hAccel != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
611 ATLASSERT(::IsWindow(hWnd));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
612 ATLASSERT(pMsg != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
613 return ::TranslateAccelerator(hWnd, m_hAccel, pMsg);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
614 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
615 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
616
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
617 typedef CAcceleratorT<false> CAcceleratorHandle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
618 typedef CAcceleratorT<true> CAccelerator;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
619
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
620
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
621 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
622 // CIcon
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
623
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
624 template <bool t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
625 class CIconT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
626 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
627 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
628 HICON m_hIcon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
629
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
630 // Constructor/destructor/operators
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
631 CIconT(HICON hIcon = NULL) : m_hIcon(hIcon)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
632 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
633
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
634 ~CIconT()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
635 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
636 if(t_bManaged && (m_hIcon != NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
637 ::DestroyIcon(m_hIcon);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
638 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
639
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
640 CIconT<t_bManaged>& operator =(HICON hIcon)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
641 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
642 Attach(hIcon);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
643 return *this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
644 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
645
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
646 void Attach(HICON hIcon)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
647 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
648 if(t_bManaged && (m_hIcon != NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
649 ::DestroyIcon(m_hIcon);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
650 m_hIcon = hIcon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
651 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
652
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
653 HICON Detach()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
654 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
655 HICON hIcon = m_hIcon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
656 m_hIcon = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
657 return hIcon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
658 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
659
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
660 operator HICON() const { return m_hIcon; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
661
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
662 bool IsNull() const { return m_hIcon == NULL; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
663
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
664 // Create/destroy methods
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
665 HICON LoadIcon(ATL::_U_STRINGorID icon)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
666 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
667 ATLASSERT(m_hIcon == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
668 m_hIcon = ::LoadIcon(ModuleHelper::GetResourceInstance(), icon.m_lpstr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
669 return m_hIcon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
670 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
671
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
672 HICON LoadIcon(ATL::_U_STRINGorID icon, int cxDesired, int cyDesired, UINT fuLoad = 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
673 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
674 ATLASSERT(m_hIcon == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
675 m_hIcon = (HICON) ::LoadImage(ModuleHelper::GetResourceInstance(), icon.m_lpstr, IMAGE_ICON, cxDesired, cyDesired, fuLoad);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
676 return m_hIcon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
677 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
678
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
679 HICON LoadOEMIcon(LPCTSTR lpstrIconName)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
680 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
681 ATLASSERT(m_hIcon == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
682 ATLASSERT(IsOEMIcon(lpstrIconName));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
683 m_hIcon = ::LoadIcon(NULL, lpstrIconName);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
684 return m_hIcon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
685 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
686
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
687 HICON CreateIcon(int nWidth, int nHeight, BYTE cPlanes, BYTE cBitsPixel, CONST BYTE* lpbANDbits, CONST BYTE *lpbXORbits)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
688 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
689 ATLASSERT(m_hIcon == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
690 ATLASSERT(lpbANDbits != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
691 ATLASSERT(lpbXORbits != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
692 m_hIcon = ::CreateIcon(ModuleHelper::GetResourceInstance(), nWidth, nHeight, cPlanes, cBitsPixel, lpbANDbits, lpbXORbits);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
693 return m_hIcon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
694 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
695
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
696 HICON CreateIconFromResource(PBYTE pBits, DWORD dwResSize, DWORD dwVersion = 0x00030000)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
697 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
698 ATLASSERT(m_hIcon == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
699 ATLASSERT(pBits != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
700 m_hIcon = ::CreateIconFromResource(pBits, dwResSize, TRUE, dwVersion);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
701 return m_hIcon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
702 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
703
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
704 HICON CreateIconFromResourceEx(PBYTE pbBits, DWORD cbBits, DWORD dwVersion = 0x00030000, int cxDesired = 0, int cyDesired = 0, UINT uFlags = LR_DEFAULTCOLOR)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
705 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
706 ATLASSERT(m_hIcon == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
707 ATLASSERT(pbBits != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
708 ATLASSERT(cbBits > 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
709 m_hIcon = ::CreateIconFromResourceEx(pbBits, cbBits, TRUE, dwVersion, cxDesired, cyDesired, uFlags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
710 return m_hIcon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
711 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
712
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
713 HICON CreateIconIndirect(PICONINFO pIconInfo)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
714 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
715 ATLASSERT(m_hIcon == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
716 ATLASSERT(pIconInfo != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
717 m_hIcon = ::CreateIconIndirect(pIconInfo);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
718 return m_hIcon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
719 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
720
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
721 HICON ExtractIcon(LPCTSTR lpszExeFileName, UINT nIconIndex)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
722 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
723 ATLASSERT(m_hIcon == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
724 ATLASSERT(lpszExeFileName != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
725 m_hIcon = ::ExtractIcon(ModuleHelper::GetModuleInstance(), lpszExeFileName, nIconIndex);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
726 return m_hIcon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
727 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
728
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
729 HICON ExtractAssociatedIcon(HINSTANCE hInst, LPTSTR lpIconPath, LPWORD lpiIcon)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
730 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
731 ATLASSERT(m_hIcon == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
732 ATLASSERT(lpIconPath != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
733 ATLASSERT(lpiIcon != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
734 m_hIcon = ::ExtractAssociatedIcon(hInst, lpIconPath, lpiIcon);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
735 return m_hIcon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
736 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
737
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
738 BOOL DestroyIcon()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
739 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
740 ATLASSERT(m_hIcon != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
741 BOOL bRet = ::DestroyIcon(m_hIcon);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
742 if(bRet != FALSE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
743 m_hIcon = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
744 return bRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
745 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
746
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
747 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
748 HICON CopyIcon()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
749 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
750 ATLASSERT(m_hIcon != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
751 return ::CopyIcon(m_hIcon);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
752 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
753
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
754 HICON DuplicateIcon()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
755 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
756 ATLASSERT(m_hIcon != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
757 return ::DuplicateIcon(NULL, m_hIcon);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
758 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
759
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
760 BOOL DrawIcon(HDC hDC, int x, int y)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
761 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
762 ATLASSERT(m_hIcon != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
763 return ::DrawIcon(hDC, x, y, m_hIcon);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
764 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
765
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
766 BOOL DrawIcon(HDC hDC, POINT pt)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
767 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
768 ATLASSERT(m_hIcon != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
769 return ::DrawIcon(hDC, pt.x, pt.y, m_hIcon);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
770 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
771
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
772 BOOL DrawIconEx(HDC hDC, int x, int y, int cxWidth, int cyWidth, UINT uStepIfAniCur = 0, HBRUSH hbrFlickerFreeDraw = NULL, UINT uFlags = DI_NORMAL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
773 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
774 ATLASSERT(m_hIcon != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
775 return ::DrawIconEx(hDC, x, y, m_hIcon, cxWidth, cyWidth, uStepIfAniCur, hbrFlickerFreeDraw, uFlags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
776 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
777
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
778 BOOL DrawIconEx(HDC hDC, POINT pt, SIZE size, UINT uStepIfAniCur = 0, HBRUSH hbrFlickerFreeDraw = NULL, UINT uFlags = DI_NORMAL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
779 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
780 ATLASSERT(m_hIcon != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
781 return ::DrawIconEx(hDC, pt.x, pt.y, m_hIcon, size.cx, size.cy, uStepIfAniCur, hbrFlickerFreeDraw, uFlags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
782 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
783
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
784 BOOL GetIconInfo(PICONINFO pIconInfo) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
785 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
786 ATLASSERT(m_hIcon != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
787 ATLASSERT(pIconInfo != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
788 return ::GetIconInfo(m_hIcon, pIconInfo);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
789 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
790
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
791 #if (_WIN32_WINNT >= 0x0600)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
792 BOOL GetIconInfoEx(PICONINFOEX pIconInfo) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
793 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
794 ATLASSERT(m_hIcon != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
795 ATLASSERT(pIconInfo != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
796 return ::GetIconInfoEx(m_hIcon, pIconInfo);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
797 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
798 #endif // (_WIN32_WINNT >= 0x0600)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
799
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
800 #if defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
801 HRESULT LoadIconMetric(ATL::_U_STRINGorID icon, int lims)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
802 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
803 ATLASSERT(m_hIcon == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
804 USES_CONVERSION;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
805 return ::LoadIconMetric(ModuleHelper::GetResourceInstance(), T2CW(icon.m_lpstr), lims, &m_hIcon);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
806 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
807
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
808 HRESULT LoadIconWithScaleDown(ATL::_U_STRINGorID icon, int cx, int cy)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
809 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
810 ATLASSERT(m_hIcon == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
811 USES_CONVERSION;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
812 return ::LoadIconWithScaleDown(ModuleHelper::GetResourceInstance(), T2CW(icon.m_lpstr), cx, cy, &m_hIcon);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
813 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
814
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
815 HRESULT LoadOEMIconMetric(LPCTSTR lpstrIconName, int lims)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
816 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
817 ATLASSERT(m_hIcon == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
818 ATLASSERT(IsOEMIcon(lpstrIconName));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
819 return ::LoadIconMetric(NULL, (LPCWSTR)lpstrIconName, lims, &m_hIcon);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
820 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
821
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
822 HRESULT LoadOEMIconWithScaleDown(LPCTSTR lpstrIconName, int cx, int cy)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
823 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
824 ATLASSERT(m_hIcon == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
825 ATLASSERT(IsOEMIcon(lpstrIconName));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
826 USES_CONVERSION;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
827 return ::LoadIconWithScaleDown(NULL, (LPCWSTR)lpstrIconName, cx, cy, &m_hIcon);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
828 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
829 #endif // defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
830
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
831 // Helper
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
832 static bool IsOEMIcon(LPCTSTR lpstrIconName)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
833 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
834 #if (WINVER >= 0x0600)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
835 return ((lpstrIconName == IDI_APPLICATION) || (lpstrIconName == IDI_ASTERISK) || (lpstrIconName == IDI_EXCLAMATION) ||
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
836 (lpstrIconName == IDI_HAND) || (lpstrIconName == IDI_QUESTION) || (lpstrIconName == IDI_WINLOGO) ||
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
837 (lpstrIconName == IDI_SHIELD));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
838 #else // !(WINVER >= 0x0600)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
839 return ((lpstrIconName == IDI_APPLICATION) || (lpstrIconName == IDI_ASTERISK) || (lpstrIconName == IDI_EXCLAMATION) ||
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
840 (lpstrIconName == IDI_HAND) || (lpstrIconName == IDI_QUESTION) || (lpstrIconName == IDI_WINLOGO));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
841 #endif // !(WINVER >= 0x0600)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
842 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
843 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
844
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
845 typedef CIconT<false> CIconHandle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
846 typedef CIconT<true> CIcon;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
847
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
848
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
849 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
850 // CCursor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
851
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
852 // protect template member from a winuser.h macro
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
853 #ifdef CopyCursor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
854 #undef CopyCursor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
855 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
856
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
857 template <bool t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
858 class CCursorT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
859 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
860 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
861 HCURSOR m_hCursor;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
862
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
863 // Constructor/destructor/operators
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
864 CCursorT(HCURSOR hCursor = NULL) : m_hCursor(hCursor)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
865 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
866
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
867 ~CCursorT()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
868 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
869 if(t_bManaged && (m_hCursor != NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
870 DestroyCursor();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
871 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
872
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
873 CCursorT<t_bManaged>& operator =(HCURSOR hCursor)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
874 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
875 Attach(hCursor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
876 return *this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
877 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
878
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
879 void Attach(HCURSOR hCursor)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
880 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
881 if(t_bManaged && (m_hCursor != NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
882 DestroyCursor();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
883 m_hCursor = hCursor;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
884 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
885
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
886 HCURSOR Detach()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
887 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
888 HCURSOR hCursor = m_hCursor;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
889 m_hCursor = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
890 return hCursor;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
891 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
892
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
893 operator HCURSOR() const { return m_hCursor; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
894
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
895 bool IsNull() const { return m_hCursor == NULL; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
896
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
897 // Create/destroy methods
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
898 HCURSOR LoadCursor(ATL::_U_STRINGorID cursor)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
899 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
900 ATLASSERT(m_hCursor == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
901 m_hCursor = ::LoadCursor(ModuleHelper::GetResourceInstance(), cursor.m_lpstr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
902 return m_hCursor;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
903 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
904
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
905 HCURSOR LoadSysCursor(LPCTSTR lpstrCursorName)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
906 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
907 ATLASSERT(m_hCursor == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
908 ATLASSERT((lpstrCursorName == IDC_ARROW) || (lpstrCursorName == IDC_IBEAM) || (lpstrCursorName == IDC_WAIT) ||
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
909 (lpstrCursorName == IDC_CROSS) || (lpstrCursorName == IDC_UPARROW) || (lpstrCursorName == IDC_SIZE) ||
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
910 (lpstrCursorName == IDC_ICON) || (lpstrCursorName == IDC_SIZENWSE) || (lpstrCursorName == IDC_SIZENESW) ||
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
911 (lpstrCursorName == IDC_SIZEWE) || (lpstrCursorName == IDC_SIZENS) || (lpstrCursorName == IDC_SIZEALL) ||
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
912 (lpstrCursorName == IDC_NO) || (lpstrCursorName == IDC_APPSTARTING) || (lpstrCursorName == IDC_HELP) ||
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
913 (lpstrCursorName == IDC_HAND));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
914 m_hCursor = ::LoadCursor(NULL, lpstrCursorName);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
915 return m_hCursor;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
916 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
917
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
918 // deprecated
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
919 HCURSOR LoadOEMCursor(LPCTSTR lpstrCursorName)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
920 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
921 return LoadSysCursor(lpstrCursorName);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
922 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
923
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
924 HCURSOR LoadCursor(ATL::_U_STRINGorID cursor, int cxDesired, int cyDesired, UINT fuLoad = 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
925 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
926 ATLASSERT(m_hCursor == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
927 m_hCursor = (HCURSOR) ::LoadImage(ModuleHelper::GetResourceInstance(), cursor.m_lpstr, IMAGE_CURSOR, cxDesired, cyDesired, fuLoad);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
928 return m_hCursor;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
929 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
930
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
931 HCURSOR LoadCursorFromFile(LPCTSTR pstrFilename)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
932 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
933 ATLASSERT(m_hCursor == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
934 ATLASSERT(pstrFilename != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
935 m_hCursor = ::LoadCursorFromFile(pstrFilename);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
936 return m_hCursor;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
937 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
938
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
939 HCURSOR CreateCursor(int xHotSpot, int yHotSpot, int nWidth, int nHeight, CONST VOID *pvANDPlane, CONST VOID *pvXORPlane)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
940 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
941 ATLASSERT(m_hCursor == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
942 m_hCursor = ::CreateCursor(ModuleHelper::GetResourceInstance(), xHotSpot, yHotSpot, nWidth, nHeight, pvANDPlane, pvXORPlane);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
943 return m_hCursor;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
944 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
945
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
946 HCURSOR CreateCursorFromResource(PBYTE pBits, DWORD dwResSize, DWORD dwVersion = 0x00030000)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
947 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
948 ATLASSERT(m_hCursor == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
949 ATLASSERT(pBits != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
950 m_hCursor = (HCURSOR)::CreateIconFromResource(pBits, dwResSize, FALSE, dwVersion);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
951 return m_hCursor;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
952 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
953
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
954 HCURSOR CreateCursorFromResourceEx(PBYTE pbBits, DWORD cbBits, DWORD dwVersion = 0x00030000, int cxDesired = 0, int cyDesired = 0, UINT uFlags = LR_DEFAULTCOLOR)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
955 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
956 ATLASSERT(m_hCursor == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
957 ATLASSERT(pbBits != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
958 ATLASSERT(cbBits > 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
959 m_hCursor = (HCURSOR)::CreateIconFromResourceEx(pbBits, cbBits, FALSE, dwVersion, cxDesired, cyDesired, uFlags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
960 return m_hCursor;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
961 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
962
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
963 BOOL DestroyCursor()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
964 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
965 ATLASSERT(m_hCursor != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
966 BOOL bRet = ::DestroyCursor(m_hCursor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
967 if(bRet != FALSE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
968 m_hCursor = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
969 return bRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
970 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
971
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
972 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
973 HCURSOR CopyCursor()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
974 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
975 ATLASSERT(m_hCursor != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
976 return (HCURSOR)::CopyIcon((HICON)m_hCursor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
977 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
978
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
979 BOOL GetCursorInfo(LPCURSORINFO pCursorInfo)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
980 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
981 ATLASSERT(m_hCursor != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
982 ATLASSERT(pCursorInfo != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
983 return ::GetCursorInfo(pCursorInfo);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
984 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
985 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
986
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
987 typedef CCursorT<false> CCursorHandle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
988 typedef CCursorT<true> CCursor;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
989
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
990
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
991 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
992 // CResource - Wraps a generic Windows resource.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
993 // Use it with custom resource types other than the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
994 // standard RT_CURSOR, RT_BITMAP, etc.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
995
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
996 class CResource
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
997 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
998 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
999 HGLOBAL m_hGlobal;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1000 HRSRC m_hResource;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1001
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1002 // Constructor/destructor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1003 CResource() : m_hGlobal(NULL), m_hResource(NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1004 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1005
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1006 ~CResource()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1007 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1008 Release();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1009 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1010
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1011 // Load methods
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1012 bool Load(ATL::_U_STRINGorID Type, ATL::_U_STRINGorID ID)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1013 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1014 ATLASSERT(m_hResource == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1015 ATLASSERT(m_hGlobal == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1016
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1017 m_hResource = ::FindResource(ModuleHelper::GetResourceInstance(), ID.m_lpstr, Type.m_lpstr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1018 if(m_hResource == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1019 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1020
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1021 m_hGlobal = ::LoadResource(ModuleHelper::GetResourceInstance(), m_hResource);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1022 if(m_hGlobal == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1023 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1024 m_hResource = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1025 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1026 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1027
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1028 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1029 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1030
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1031 bool LoadEx(ATL::_U_STRINGorID ID, ATL::_U_STRINGorID Type, WORD wLanguage)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1032 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1033 ATLASSERT(m_hResource == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1034 ATLASSERT(m_hGlobal == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1035
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1036 m_hResource = ::FindResourceEx(ModuleHelper::GetResourceInstance(), Type.m_lpstr, ID.m_lpstr, wLanguage);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1037 if(m_hResource == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1038 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1039
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1040 m_hGlobal = ::LoadResource(ModuleHelper::GetResourceInstance(), m_hResource);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1041 if(m_hGlobal == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1042 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1043 m_hResource = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1044 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1045 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1046
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1047 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1048 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1049
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1050 // Misc. operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1051 DWORD GetSize() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1052 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1053 ATLASSERT(m_hResource != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1054 return ::SizeofResource(ModuleHelper::GetResourceInstance(), m_hResource);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1055 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1056
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1057 LPVOID Lock()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1058 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1059 ATLASSERT(m_hResource != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1060 ATLASSERT(m_hGlobal != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1061 LPVOID pVoid = ::LockResource(m_hGlobal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1062 ATLASSERT(pVoid != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1063 return pVoid;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1064 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1065
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1066 void Release()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1067 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1068 if(m_hGlobal != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1069 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1070 FreeResource(m_hGlobal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1071 m_hGlobal = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1072 m_hResource = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1073 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1074 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1075 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1076
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1077
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1078 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1079 // Toolbar resource descriptor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1080
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1081 struct _AtlToolBarData
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1082 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1083 WORD wVersion;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1084 WORD wWidth;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1085 WORD wHeight;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1086 WORD wItemCount;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1087
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1088 WORD* items()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1089 { return (WORD*)(this+1); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1090 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1091
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1092
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1093 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1094 // Global functions for loading resources
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1095
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1096 inline HACCEL AtlLoadAccelerators(ATL::_U_STRINGorID table)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1097 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1098 return ::LoadAccelerators(ModuleHelper::GetResourceInstance(), table.m_lpstr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1099 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1100
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1101 inline HMENU AtlLoadMenu(ATL::_U_STRINGorID menu)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1102 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1103 return ::LoadMenu(ModuleHelper::GetResourceInstance(), menu.m_lpstr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1104 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1105
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1106 inline HBITMAP AtlLoadBitmap(ATL::_U_STRINGorID bitmap)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1107 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1108 return ::LoadBitmap(ModuleHelper::GetResourceInstance(), bitmap.m_lpstr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1109 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1110
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1111 #ifdef OEMRESOURCE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1112 inline HBITMAP AtlLoadSysBitmap(ATL::_U_STRINGorID bitmap)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1113 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1114 #ifdef _DEBUG
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1115 WORD wID = LOWORD(bitmap.m_lpstr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1116 ATLASSERT((wID >= 32734) && (wID <= 32767));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1117 #endif // _DEBUG
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1118 return ::LoadBitmap(NULL, bitmap.m_lpstr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1119 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1120 #endif // OEMRESOURCE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1121
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1122 inline HCURSOR AtlLoadCursor(ATL::_U_STRINGorID cursor)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1123 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1124 return ::LoadCursor(ModuleHelper::GetResourceInstance(), cursor.m_lpstr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1125 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1126
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1127 inline HCURSOR AtlLoadSysCursor(LPCTSTR lpCursorName)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1128 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1129 ATLASSERT((lpCursorName == IDC_ARROW) || (lpCursorName == IDC_IBEAM) || (lpCursorName == IDC_WAIT) ||
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1130 (lpCursorName == IDC_CROSS) || (lpCursorName == IDC_UPARROW) || (lpCursorName == IDC_SIZE) ||
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1131 (lpCursorName == IDC_ICON) || (lpCursorName == IDC_SIZENWSE) || (lpCursorName == IDC_SIZENESW) ||
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1132 (lpCursorName == IDC_SIZEWE) || (lpCursorName == IDC_SIZENS) || (lpCursorName == IDC_SIZEALL) ||
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1133 (lpCursorName == IDC_NO) || (lpCursorName == IDC_APPSTARTING) || (lpCursorName == IDC_HELP) ||
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1134 (lpCursorName == IDC_HAND));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1135 return ::LoadCursor(NULL, lpCursorName);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1136 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1137
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1138 inline HICON AtlLoadIcon(ATL::_U_STRINGorID icon)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1139 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1140 return ::LoadIcon(ModuleHelper::GetResourceInstance(), icon.m_lpstr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1141 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1142
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1143 inline HICON AtlLoadSysIcon(LPCTSTR lpIconName)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1144 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1145 #if (WINVER >= 0x0600)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1146 ATLASSERT((lpIconName == IDI_APPLICATION) || (lpIconName == IDI_ASTERISK) || (lpIconName == IDI_EXCLAMATION) ||
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1147 (lpIconName == IDI_HAND) || (lpIconName == IDI_QUESTION) || (lpIconName == IDI_WINLOGO) ||
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1148 (lpIconName == IDI_SHIELD));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1149 #else // !(WINVER >= 0x0600)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1150 ATLASSERT((lpIconName == IDI_APPLICATION) || (lpIconName == IDI_ASTERISK) || (lpIconName == IDI_EXCLAMATION) ||
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1151 (lpIconName == IDI_HAND) || (lpIconName == IDI_QUESTION) || (lpIconName == IDI_WINLOGO));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1152 #endif // !(WINVER >= 0x0600)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1153 return ::LoadIcon(NULL, lpIconName);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1154 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1155
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1156 inline HBITMAP AtlLoadBitmapImage(ATL::_U_STRINGorID bitmap, UINT fuLoad = LR_DEFAULTCOLOR)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1157 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1158 return (HBITMAP)::LoadImage(ModuleHelper::GetResourceInstance(), bitmap.m_lpstr, IMAGE_BITMAP, 0, 0, fuLoad);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1159 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1160
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1161 inline HCURSOR AtlLoadCursorImage(ATL::_U_STRINGorID cursor, UINT fuLoad = LR_DEFAULTCOLOR | LR_DEFAULTSIZE, int cxDesired = 0, int cyDesired = 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1162 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1163 return (HCURSOR)::LoadImage(ModuleHelper::GetResourceInstance(), cursor.m_lpstr, IMAGE_CURSOR, cxDesired, cyDesired, fuLoad);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1164 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1165
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1166 inline HICON AtlLoadIconImage(ATL::_U_STRINGorID icon, UINT fuLoad = LR_DEFAULTCOLOR | LR_DEFAULTSIZE, int cxDesired = 0, int cyDesired = 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1167 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1168 return (HICON)::LoadImage(ModuleHelper::GetResourceInstance(), icon.m_lpstr, IMAGE_ICON, cxDesired, cyDesired, fuLoad);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1169 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1170
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1171 #ifdef OEMRESOURCE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1172 inline HBITMAP AtlLoadSysBitmapImage(WORD wBitmapID, UINT fuLoad = LR_DEFAULTCOLOR)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1173 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1174 ATLASSERT((wBitmapID >= 32734) && (wBitmapID <= 32767));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1175 ATLASSERT((fuLoad & LR_LOADFROMFILE) == 0); // this one doesn't load from a file
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1176 return (HBITMAP)::LoadImage(NULL, MAKEINTRESOURCE(wBitmapID), IMAGE_BITMAP, 0, 0, fuLoad);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1177 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1178 #endif // OEMRESOURCE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1179
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1180 inline HCURSOR AtlLoadSysCursorImage(ATL::_U_STRINGorID cursor, UINT fuLoad = LR_DEFAULTCOLOR | LR_DEFAULTSIZE, int cxDesired = 0, int cyDesired = 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1181 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1182 #ifdef _DEBUG
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1183 WORD wID = LOWORD(cursor.m_lpstr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1184 ATLASSERT(((wID >= 32512) && (wID <= 32516)) || ((wID >= 32640) && (wID <= 32648)) || (wID == 32650) || (wID == 32651));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1185 ATLASSERT((fuLoad & LR_LOADFROMFILE) == 0); // this one doesn't load from a file
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1186 #endif // _DEBUG
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1187 return (HCURSOR)::LoadImage(NULL, cursor.m_lpstr, IMAGE_CURSOR, cxDesired, cyDesired, fuLoad);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1188 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1189
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1190 inline HICON AtlLoadSysIconImage(ATL::_U_STRINGorID icon, UINT fuLoad = LR_DEFAULTCOLOR | LR_DEFAULTSIZE, int cxDesired = 0, int cyDesired = 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1191 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1192 #ifdef _DEBUG
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1193 WORD wID = LOWORD(icon.m_lpstr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1194 ATLASSERT((wID >= 32512) && (wID <= 32517));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1195 ATLASSERT((fuLoad & LR_LOADFROMFILE) == 0); // this one doesn't load from a file
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1196 #endif // _DEBUG
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1197 return (HICON)::LoadImage(NULL, icon.m_lpstr, IMAGE_ICON, cxDesired, cyDesired, fuLoad);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1198 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1199
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1200 inline bool AtlLoadString(UINT uID, BSTR& bstrText)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1201 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1202 USES_CONVERSION;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1203 ATLASSERT(bstrText == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1204
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1205 LPTSTR lpstrText = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1206 int nRes = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1207 for(int nLen = 256; ; nLen *= 2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1208 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1209 ATLTRY(lpstrText = new TCHAR[nLen]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1210 if(lpstrText == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1211 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1212 nRes = ::LoadString(ModuleHelper::GetResourceInstance(), uID, lpstrText, nLen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1213 if(nRes < nLen - 1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1214 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1215 delete [] lpstrText;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1216 lpstrText = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1217 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1218
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1219 if(lpstrText != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1220 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1221 if(nRes != 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1222 bstrText = ::SysAllocString(T2OLE(lpstrText));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1223 delete [] lpstrText;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1224 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1225
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1226 return (bstrText != NULL) ? true : false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1227 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1228
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1229 } // namespace WTL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1230
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1231 #endif // __ATLUSER_H__