OLD | NEW |
| (Empty) |
1 // Windows Template Library - WTL version 8.0 | |
2 // Copyright (C) Microsoft Corporation. All rights reserved. | |
3 // | |
4 // This file is a part of the Windows Template Library. | |
5 // The use and distribution terms for this software are covered by the | |
6 // Microsoft Permissive License (Ms-PL) which can be found in the file | |
7 // Ms-PL.txt at the root of this distribution. | |
8 | |
9 #ifndef __ATLCTRLS_H__ | |
10 #define __ATLCTRLS_H__ | |
11 | |
12 #pragma once | |
13 | |
14 #ifndef __cplusplus | |
15 #error ATL requires C++ compilation (use a .cpp suffix) | |
16 #endif | |
17 | |
18 #ifndef __ATLAPP_H__ | |
19 #error atlctrls.h requires atlapp.h to be included first | |
20 #endif | |
21 | |
22 #ifndef __ATLWIN_H__ | |
23 #error atlctrls.h requires atlwin.h to be included first | |
24 #endif | |
25 | |
26 #if (_WIN32_IE < 0x0300) | |
27 #error atlctrls.h requires IE Version 3.0 or higher | |
28 #endif | |
29 | |
30 #ifndef _WIN32_WCE | |
31 #include <richedit.h> | |
32 #include <richole.h> | |
33 #elif defined(WIN32_PLATFORM_WFSP) && !defined(_WINUSERM_H_) | |
34 #include <winuserm.h> | |
35 #endif // !_WIN32_WCE | |
36 | |
37 // protect template members from windowsx.h macros | |
38 #ifdef _INC_WINDOWSX | |
39 #undef GetNextSibling | |
40 #undef GetPrevSibling | |
41 #endif // _INC_WINDOWSX | |
42 | |
43 | |
44 /////////////////////////////////////////////////////////////////////////////// | |
45 // Classes in this file: | |
46 // | |
47 // CStaticT<TBase> - CStatic | |
48 // CButtonT<TBase> - CButton | |
49 // CListBoxT<TBase> - CListBox | |
50 // CComboBoxT<TBase> - CComboBox | |
51 // CEditT<TBase> - CEdit | |
52 // CEditCommands<T> | |
53 // CScrollBarT<TBase> - CScrollBar | |
54 // | |
55 // CImageList | |
56 // CListViewCtrlT<TBase> - CListViewCtrl | |
57 // CTreeViewCtrlT<TBase> - CTreeViewCtrl | |
58 // CTreeItemT<TBase> - CTreeItem | |
59 // CTreeViewCtrlExT<TBase> - CTreeViewCtrlEx | |
60 // CHeaderCtrlT<TBase> - CHeaderCtrl | |
61 // CToolBarCtrlT<TBase> - CToolBarCtrl | |
62 // CStatusBarCtrlT<TBase> - CStatusBarCtrl | |
63 // CTabCtrlT<TBase> - CTabCtrl | |
64 // CToolInfo | |
65 // CToolTipCtrlT<TBase> - CToolTipCtrl | |
66 // CTrackBarCtrlT<TBase> - CTrackBarCtrl | |
67 // CUpDownCtrlT<TBase> - CUpDownCtrl | |
68 // CProgressBarCtrlT<TBase> - CProgressBarCtrl | |
69 // CHotKeyCtrlT<TBase> - CHotKeyCtrl | |
70 // CAnimateCtrlT<TBase> - CAnimateCtrl | |
71 // CRichEditCtrlT<TBase> - CRichEditCtrl | |
72 // CRichEditCommands<T> | |
73 // CDragListBoxT<TBase> - CDragListBox | |
74 // CDragListNotifyImpl<T> | |
75 // CReBarCtrlT<TBase> - CReBarCtrl | |
76 // CComboBoxExT<TBase> - CComboBoxEx | |
77 // CDateTimePickerCtrlT<TBase> - CDateTimePickerCtrl | |
78 // CMonthCalendarCtrlT<TBase> - CMonthCalendarCtrl | |
79 // CFlatScrollBarImpl<T> | |
80 // CFlatScrollBarT<TBase> - CFlatScrollBar | |
81 // CIPAddressCtrlT<TBase> - CIPAddressCtrl | |
82 // CPagerCtrlT<TBase> - CPagerCtrl | |
83 // CLinkCtrlT<TBase> - CLinkCtrl | |
84 // | |
85 // CCustomDraw<T> | |
86 // | |
87 // CCECommandBarCtrlT<TBase> - CCECommandBarCtrl | |
88 // CCECommandBandsCtrlT<TBase> - CCECommandBandsCtrl | |
89 | |
90 | |
91 namespace WTL | |
92 { | |
93 | |
94 // These are wrapper classes for Windows standard and common controls. | |
95 // To implement a window based on a control, use following: | |
96 // Example: Implementing a window based on a list box | |
97 // | |
98 // class CMyListBox : CWindowImpl<CMyListBox, CListBox> | |
99 // { | |
100 // public: | |
101 // BEGIN_MSG_MAP(CMyListBox) | |
102 // // put your message handler entries here | |
103 // END_MSG_MAP() | |
104 // }; | |
105 | |
106 | |
107 | |
108 // --- Standard Windows controls --- | |
109 | |
110 /////////////////////////////////////////////////////////////////////////////// | |
111 // CStatic - client side for a Windows STATIC control | |
112 | |
113 template <class TBase> | |
114 class CStaticT : public TBase | |
115 { | |
116 public: | |
117 // Constructors | |
118 CStaticT(HWND hWnd = NULL) : TBase(hWnd) | |
119 { } | |
120 | |
121 CStaticT< TBase >& operator =(HWND hWnd) | |
122 { | |
123 m_hWnd = hWnd; | |
124 return *this; | |
125 } | |
126 | |
127 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
128 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
129 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
130 { | |
131 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
132 } | |
133 | |
134 // Attributes | |
135 static LPCTSTR GetWndClassName() | |
136 { | |
137 return _T("STATIC"); | |
138 } | |
139 | |
140 #ifndef _WIN32_WCE | |
141 HICON GetIcon() const | |
142 { | |
143 ATLASSERT(::IsWindow(m_hWnd)); | |
144 return (HICON)::SendMessage(m_hWnd, STM_GETICON, 0, 0L); | |
145 } | |
146 | |
147 HICON SetIcon(HICON hIcon) | |
148 { | |
149 ATLASSERT(::IsWindow(m_hWnd)); | |
150 return (HICON)::SendMessage(m_hWnd, STM_SETICON, (WPARAM)hIcon,
0L); | |
151 } | |
152 | |
153 HENHMETAFILE GetEnhMetaFile() const | |
154 { | |
155 ATLASSERT(::IsWindow(m_hWnd)); | |
156 return (HENHMETAFILE)::SendMessage(m_hWnd, STM_GETIMAGE, IMAGE_E
NHMETAFILE, 0L); | |
157 } | |
158 | |
159 HENHMETAFILE SetEnhMetaFile(HENHMETAFILE hMetaFile) | |
160 { | |
161 ATLASSERT(::IsWindow(m_hWnd)); | |
162 return (HENHMETAFILE)::SendMessage(m_hWnd, STM_SETIMAGE, IMAGE_E
NHMETAFILE, (LPARAM)hMetaFile); | |
163 } | |
164 #else // CE specific | |
165 HICON GetIcon() const | |
166 { | |
167 ATLASSERT(::IsWindow(m_hWnd)); | |
168 return (HICON)::SendMessage(m_hWnd, STM_GETIMAGE, IMAGE_ICON, 0L
); | |
169 } | |
170 | |
171 HICON SetIcon(HICON hIcon) | |
172 { | |
173 ATLASSERT(::IsWindow(m_hWnd)); | |
174 return (HICON)::SendMessage(m_hWnd, STM_SETIMAGE, IMAGE_ICON, (L
PARAM)hIcon); | |
175 } | |
176 #endif // _WIN32_WCE | |
177 | |
178 CBitmapHandle GetBitmap() const | |
179 { | |
180 ATLASSERT(::IsWindow(m_hWnd)); | |
181 return CBitmapHandle((HBITMAP)::SendMessage(m_hWnd, STM_GETIMAGE
, IMAGE_BITMAP, 0L)); | |
182 } | |
183 | |
184 CBitmapHandle SetBitmap(HBITMAP hBitmap) | |
185 { | |
186 ATLASSERT(::IsWindow(m_hWnd)); | |
187 return CBitmapHandle((HBITMAP)::SendMessage(m_hWnd, STM_SETIMAGE
, IMAGE_BITMAP, (LPARAM)hBitmap)); | |
188 } | |
189 | |
190 HCURSOR GetCursor() const | |
191 { | |
192 ATLASSERT(::IsWindow(m_hWnd)); | |
193 return (HCURSOR)::SendMessage(m_hWnd, STM_GETIMAGE, IMAGE_CURSOR
, 0L); | |
194 } | |
195 | |
196 HCURSOR SetCursor(HCURSOR hCursor) | |
197 { | |
198 ATLASSERT(::IsWindow(m_hWnd)); | |
199 return (HCURSOR)::SendMessage(m_hWnd, STM_SETIMAGE, IMAGE_CURSOR
, (LPARAM)hCursor); | |
200 } | |
201 }; | |
202 | |
203 typedef CStaticT<ATL::CWindow> CStatic; | |
204 | |
205 | |
206 /////////////////////////////////////////////////////////////////////////////// | |
207 // CButton - client side for a Windows BUTTON control | |
208 | |
209 template <class TBase> | |
210 class CButtonT : public TBase | |
211 { | |
212 public: | |
213 // Constructors | |
214 CButtonT(HWND hWnd = NULL) : TBase(hWnd) | |
215 { } | |
216 | |
217 CButtonT< TBase >& operator =(HWND hWnd) | |
218 { | |
219 m_hWnd = hWnd; | |
220 return *this; | |
221 } | |
222 | |
223 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
224 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
225 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
226 { | |
227 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
228 } | |
229 | |
230 // Attributes | |
231 static LPCTSTR GetWndClassName() | |
232 { | |
233 return _T("BUTTON"); | |
234 } | |
235 | |
236 UINT GetState() const | |
237 { | |
238 ATLASSERT(::IsWindow(m_hWnd)); | |
239 return (UINT)::SendMessage(m_hWnd, BM_GETSTATE, 0, 0L); | |
240 } | |
241 | |
242 void SetState(BOOL bHighlight) | |
243 { | |
244 ATLASSERT(::IsWindow(m_hWnd)); | |
245 ::SendMessage(m_hWnd, BM_SETSTATE, bHighlight, 0L); | |
246 } | |
247 | |
248 int GetCheck() const | |
249 { | |
250 ATLASSERT(::IsWindow(m_hWnd)); | |
251 return (int)::SendMessage(m_hWnd, BM_GETCHECK, 0, 0L); | |
252 } | |
253 | |
254 void SetCheck(int nCheck) | |
255 { | |
256 ATLASSERT(::IsWindow(m_hWnd)); | |
257 ::SendMessage(m_hWnd, BM_SETCHECK, nCheck, 0L); | |
258 } | |
259 | |
260 UINT GetButtonStyle() const | |
261 { | |
262 ATLASSERT(::IsWindow(m_hWnd)); | |
263 return (UINT)::GetWindowLong(m_hWnd, GWL_STYLE) & 0xFFFF; | |
264 } | |
265 | |
266 void SetButtonStyle(UINT nStyle, BOOL bRedraw = TRUE) | |
267 { | |
268 ATLASSERT(::IsWindow(m_hWnd)); | |
269 ::SendMessage(m_hWnd, BM_SETSTYLE, nStyle, (LPARAM)bRedraw); | |
270 } | |
271 | |
272 #ifndef _WIN32_WCE | |
273 HICON GetIcon() const | |
274 { | |
275 ATLASSERT(::IsWindow(m_hWnd)); | |
276 return (HICON)::SendMessage(m_hWnd, BM_GETIMAGE, IMAGE_ICON, 0L)
; | |
277 } | |
278 | |
279 HICON SetIcon(HICON hIcon) | |
280 { | |
281 ATLASSERT(::IsWindow(m_hWnd)); | |
282 return (HICON)::SendMessage(m_hWnd, BM_SETIMAGE, IMAGE_ICON, (LP
ARAM)hIcon); | |
283 } | |
284 | |
285 CBitmapHandle GetBitmap() const | |
286 { | |
287 ATLASSERT(::IsWindow(m_hWnd)); | |
288 return CBitmapHandle((HBITMAP)::SendMessage(m_hWnd, BM_GETIMAGE,
IMAGE_BITMAP, 0L)); | |
289 } | |
290 | |
291 CBitmapHandle SetBitmap(HBITMAP hBitmap) | |
292 { | |
293 ATLASSERT(::IsWindow(m_hWnd)); | |
294 return CBitmapHandle((HBITMAP)::SendMessage(m_hWnd, BM_SETIMAGE,
IMAGE_BITMAP, (LPARAM)hBitmap)); | |
295 } | |
296 #endif // !_WIN32_WCE | |
297 | |
298 #if (_WIN32_WINNT >= 0x0501) | |
299 BOOL GetIdealSize(LPSIZE lpSize) const | |
300 { | |
301 ATLASSERT(::IsWindow(m_hWnd)); | |
302 return (BOOL)::SendMessage(m_hWnd, BCM_GETIDEALSIZE, 0, (LPARAM)
lpSize); | |
303 } | |
304 | |
305 BOOL GetImageList(PBUTTON_IMAGELIST pButtonImagelist) const | |
306 { | |
307 ATLASSERT(::IsWindow(m_hWnd)); | |
308 return (BOOL)::SendMessage(m_hWnd, BCM_GETIMAGELIST, 0, (LPARAM)
pButtonImagelist); | |
309 } | |
310 | |
311 BOOL SetImageList(PBUTTON_IMAGELIST pButtonImagelist) | |
312 { | |
313 ATLASSERT(::IsWindow(m_hWnd)); | |
314 return (BOOL)::SendMessage(m_hWnd, BCM_SETIMAGELIST, 0, (LPARAM)
pButtonImagelist); | |
315 } | |
316 | |
317 BOOL GetTextMargin(LPRECT lpRect) const | |
318 { | |
319 ATLASSERT(::IsWindow(m_hWnd)); | |
320 return (BOOL)::SendMessage(m_hWnd, BCM_GETTEXTMARGIN, 0, (LPARAM
)lpRect); | |
321 } | |
322 | |
323 BOOL SetTextMargin(LPRECT lpRect) | |
324 { | |
325 ATLASSERT(::IsWindow(m_hWnd)); | |
326 return (BOOL)::SendMessage(m_hWnd, BCM_SETTEXTMARGIN, 0, (LPARAM
)lpRect); | |
327 } | |
328 #endif // (_WIN32_WINNT >= 0x0501) | |
329 | |
330 #if (WINVER >= 0x0600) | |
331 void SetDontClick(BOOL bDontClick) | |
332 { | |
333 ATLASSERT(::IsWindow(m_hWnd)); | |
334 ::SendMessage(m_hWnd, BM_SETDONTCLICK, (WPARAM)bDontClick, 0L); | |
335 } | |
336 #endif // (WINVER >= 0x0600) | |
337 | |
338 #if (_WIN32_WINNT >= 0x0600) | |
339 BOOL SetDropDownState(BOOL bDropDown) | |
340 { | |
341 ATLASSERT(::IsWindow(m_hWnd)); | |
342 ATLASSERT((GetStyle() & (BS_SPLITBUTTON | BS_DEFSPLITBUTTON)) !=
0); | |
343 return (BOOL)::SendMessage(m_hWnd, BCM_SETDROPDOWNSTATE, (WPARAM
)bDropDown, 0L); | |
344 } | |
345 | |
346 BOOL GetSplitInfo(PBUTTON_SPLITINFO pSplitInfo) const | |
347 { | |
348 ATLASSERT(::IsWindow(m_hWnd)); | |
349 ATLASSERT((GetStyle() & (BS_SPLITBUTTON | BS_DEFSPLITBUTTON)) !=
0); | |
350 return (BOOL)::SendMessage(m_hWnd, BCM_GETSPLITINFO, 0, (LPARAM)
pSplitInfo); | |
351 } | |
352 | |
353 BOOL SetSplitInfo(PBUTTON_SPLITINFO pSplitInfo) | |
354 { | |
355 ATLASSERT(::IsWindow(m_hWnd)); | |
356 ATLASSERT((GetStyle() & (BS_SPLITBUTTON | BS_DEFSPLITBUTTON)) !=
0); | |
357 return (BOOL)::SendMessage(m_hWnd, BCM_SETSPLITINFO, 0, (LPARAM)
pSplitInfo); | |
358 } | |
359 | |
360 int GetNoteLength() const | |
361 { | |
362 ATLASSERT(::IsWindow(m_hWnd)); | |
363 ATLASSERT((GetStyle() & (BS_COMMANDLINK | BS_DEFCOMMANDLINK)) !=
0); | |
364 return (int)::SendMessage(m_hWnd, BCM_GETNOTELENGTH, 0, 0L); | |
365 } | |
366 | |
367 BOOL GetNote(LPWSTR lpstrNoteText, int cchNoteText) const | |
368 { | |
369 ATLASSERT(::IsWindow(m_hWnd)); | |
370 ATLASSERT((GetStyle() & (BS_COMMANDLINK | BS_DEFCOMMANDLINK)) !=
0); | |
371 return (BOOL)::SendMessage(m_hWnd, BCM_GETNOTE, cchNoteText, (LP
ARAM)lpstrNoteText); | |
372 } | |
373 | |
374 BOOL SetNote(LPCWSTR lpstrNoteText) | |
375 { | |
376 ATLASSERT(::IsWindow(m_hWnd)); | |
377 ATLASSERT((GetStyle() & (BS_COMMANDLINK | BS_DEFCOMMANDLINK)) !=
0); | |
378 return (BOOL)::SendMessage(m_hWnd, BCM_SETNOTE, 0, (LPARAM)lpstr
NoteText); | |
379 } | |
380 | |
381 LRESULT SetElevationRequiredState(BOOL bSet) | |
382 { | |
383 ATLASSERT(::IsWindow(m_hWnd)); | |
384 return ::SendMessage(m_hWnd, BCM_SETSHIELD, 0, (LPARAM)bSet); | |
385 } | |
386 #endif // (_WIN32_WINNT >= 0x0600) | |
387 | |
388 // Operations | |
389 void Click() | |
390 { | |
391 ATLASSERT(::IsWindow(m_hWnd)); | |
392 ::SendMessage(m_hWnd, BM_CLICK, 0, 0L); | |
393 } | |
394 }; | |
395 | |
396 typedef CButtonT<ATL::CWindow> CButton; | |
397 | |
398 | |
399 /////////////////////////////////////////////////////////////////////////////// | |
400 // CListBox - client side for a Windows LISTBOX control | |
401 | |
402 template <class TBase> | |
403 class CListBoxT : public TBase | |
404 { | |
405 public: | |
406 // Constructors | |
407 CListBoxT(HWND hWnd = NULL) : TBase(hWnd) | |
408 { } | |
409 | |
410 CListBoxT< TBase >& operator =(HWND hWnd) | |
411 { | |
412 m_hWnd = hWnd; | |
413 return *this; | |
414 } | |
415 | |
416 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
417 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
418 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
419 { | |
420 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
421 } | |
422 | |
423 // Attributes | |
424 static LPCTSTR GetWndClassName() | |
425 { | |
426 return _T("LISTBOX"); | |
427 } | |
428 | |
429 // for entire listbox | |
430 int GetCount() const | |
431 { | |
432 ATLASSERT(::IsWindow(m_hWnd)); | |
433 return (int)::SendMessage(m_hWnd, LB_GETCOUNT, 0, 0L); | |
434 } | |
435 | |
436 #ifndef _WIN32_WCE | |
437 int SetCount(int cItems) | |
438 { | |
439 ATLASSERT(::IsWindow(m_hWnd)); | |
440 ATLASSERT(((GetStyle() & LBS_NODATA) != 0) && ((GetStyle() & LBS
_HASSTRINGS) == 0)); | |
441 return (int)::SendMessage(m_hWnd, LB_SETCOUNT, cItems, 0L); | |
442 } | |
443 #endif // !_WIN32_WCE | |
444 | |
445 int GetHorizontalExtent() const | |
446 { | |
447 ATLASSERT(::IsWindow(m_hWnd)); | |
448 return (int)::SendMessage(m_hWnd, LB_GETHORIZONTALEXTENT, 0, 0L)
; | |
449 } | |
450 | |
451 void SetHorizontalExtent(int cxExtent) | |
452 { | |
453 ATLASSERT(::IsWindow(m_hWnd)); | |
454 ::SendMessage(m_hWnd, LB_SETHORIZONTALEXTENT, cxExtent, 0L); | |
455 } | |
456 | |
457 int GetTopIndex() const | |
458 { | |
459 ATLASSERT(::IsWindow(m_hWnd)); | |
460 return (int)::SendMessage(m_hWnd, LB_GETTOPINDEX, 0, 0L); | |
461 } | |
462 | |
463 int SetTopIndex(int nIndex) | |
464 { | |
465 ATLASSERT(::IsWindow(m_hWnd)); | |
466 return (int)::SendMessage(m_hWnd, LB_SETTOPINDEX, nIndex, 0L); | |
467 } | |
468 | |
469 LCID GetLocale() const | |
470 { | |
471 ATLASSERT(::IsWindow(m_hWnd)); | |
472 return (LCID)::SendMessage(m_hWnd, LB_GETLOCALE, 0, 0L); | |
473 } | |
474 | |
475 LCID SetLocale(LCID nNewLocale) | |
476 { | |
477 ATLASSERT(::IsWindow(m_hWnd)); | |
478 return (LCID)::SendMessage(m_hWnd, LB_SETLOCALE, (WPARAM)nNewLoc
ale, 0L); | |
479 } | |
480 | |
481 #if (WINVER >= 0x0500) && !defined(_WIN32_WCE) | |
482 DWORD GetListBoxInfo() const | |
483 { | |
484 ATLASSERT(::IsWindow(m_hWnd)); | |
485 #if (_WIN32_WINNT >= 0x0501) | |
486 return (DWORD)::SendMessage(m_hWnd, LB_GETLISTBOXINFO, 0, 0L); | |
487 #else // !(_WIN32_WINNT >= 0x0501) | |
488 return ::GetListBoxInfo(m_hWnd); | |
489 #endif // !(_WIN32_WINNT >= 0x0501) | |
490 } | |
491 #endif // (WINVER >= 0x0500) && !defined(_WIN32_WCE) | |
492 | |
493 // for single-selection listboxes | |
494 int GetCurSel() const | |
495 { | |
496 ATLASSERT(::IsWindow(m_hWnd)); | |
497 ATLASSERT((GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) ==
0); | |
498 return (int)::SendMessage(m_hWnd, LB_GETCURSEL, 0, 0L); | |
499 } | |
500 | |
501 int SetCurSel(int nSelect) | |
502 { | |
503 ATLASSERT(::IsWindow(m_hWnd)); | |
504 ATLASSERT((GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) ==
0); | |
505 return (int)::SendMessage(m_hWnd, LB_SETCURSEL, nSelect, 0L); | |
506 } | |
507 | |
508 // for multiple-selection listboxes | |
509 int GetSel(int nIndex) const // also works for single-selectio
n | |
510 { | |
511 ATLASSERT(::IsWindow(m_hWnd)); | |
512 return (int)::SendMessage(m_hWnd, LB_GETSEL, nIndex, 0L); | |
513 } | |
514 | |
515 int SetSel(int nIndex, BOOL bSelect = TRUE) | |
516 { | |
517 ATLASSERT(::IsWindow(m_hWnd)); | |
518 ATLASSERT((GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) !=
0); | |
519 return (int)::SendMessage(m_hWnd, LB_SETSEL, bSelect, nIndex); | |
520 } | |
521 | |
522 int GetSelCount() const | |
523 { | |
524 ATLASSERT(::IsWindow(m_hWnd)); | |
525 ATLASSERT((GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) !=
0); | |
526 return (int)::SendMessage(m_hWnd, LB_GETSELCOUNT, 0, 0L); | |
527 } | |
528 | |
529 int GetSelItems(int nMaxItems, LPINT rgIndex) const | |
530 { | |
531 ATLASSERT(::IsWindow(m_hWnd)); | |
532 ATLASSERT((GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) !=
0); | |
533 return (int)::SendMessage(m_hWnd, LB_GETSELITEMS, nMaxItems, (LP
ARAM)rgIndex); | |
534 } | |
535 | |
536 int GetAnchorIndex() const | |
537 { | |
538 ATLASSERT(::IsWindow(m_hWnd)); | |
539 ATLASSERT((GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) !=
0); | |
540 return (int)::SendMessage(m_hWnd, LB_GETANCHORINDEX, 0, 0L); | |
541 } | |
542 | |
543 void SetAnchorIndex(int nIndex) | |
544 { | |
545 ATLASSERT(::IsWindow(m_hWnd)); | |
546 ATLASSERT((GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) !=
0); | |
547 ::SendMessage(m_hWnd, LB_SETANCHORINDEX, nIndex, 0L); | |
548 } | |
549 | |
550 int GetCaretIndex() const | |
551 { | |
552 ATLASSERT(::IsWindow(m_hWnd)); | |
553 return (int)::SendMessage(m_hWnd, LB_GETCARETINDEX, 0, 0); | |
554 } | |
555 | |
556 int SetCaretIndex(int nIndex, BOOL bScroll = TRUE) | |
557 { | |
558 ATLASSERT(::IsWindow(m_hWnd)); | |
559 return (int)::SendMessage(m_hWnd, LB_SETCARETINDEX, nIndex, MAKE
LONG(bScroll, 0)); | |
560 } | |
561 | |
562 // for listbox items | |
563 DWORD_PTR GetItemData(int nIndex) const | |
564 { | |
565 ATLASSERT(::IsWindow(m_hWnd)); | |
566 return (DWORD_PTR)::SendMessage(m_hWnd, LB_GETITEMDATA, nIndex,
0L); | |
567 } | |
568 | |
569 int SetItemData(int nIndex, DWORD_PTR dwItemData) | |
570 { | |
571 ATLASSERT(::IsWindow(m_hWnd)); | |
572 return (int)::SendMessage(m_hWnd, LB_SETITEMDATA, nIndex, (LPARA
M)dwItemData); | |
573 } | |
574 | |
575 void* GetItemDataPtr(int nIndex) const | |
576 { | |
577 ATLASSERT(::IsWindow(m_hWnd)); | |
578 return (void*)::SendMessage(m_hWnd, LB_GETITEMDATA, nIndex, 0L); | |
579 } | |
580 | |
581 int SetItemDataPtr(int nIndex, void* pData) | |
582 { | |
583 ATLASSERT(::IsWindow(m_hWnd)); | |
584 return SetItemData(nIndex, (DWORD_PTR)pData); | |
585 } | |
586 | |
587 int GetItemRect(int nIndex, LPRECT lpRect) const | |
588 { | |
589 ATLASSERT(::IsWindow(m_hWnd)); | |
590 return (int)::SendMessage(m_hWnd, LB_GETITEMRECT, nIndex, (LPARA
M)lpRect); | |
591 } | |
592 | |
593 int GetText(int nIndex, LPTSTR lpszBuffer) const | |
594 { | |
595 ATLASSERT(::IsWindow(m_hWnd)); | |
596 return (int)::SendMessage(m_hWnd, LB_GETTEXT, nIndex, (LPARAM)lp
szBuffer); | |
597 } | |
598 | |
599 #ifndef _ATL_NO_COM | |
600 #ifdef _OLEAUTO_H_ | |
601 BOOL GetTextBSTR(int nIndex, BSTR& bstrText) const | |
602 { | |
603 USES_CONVERSION; | |
604 ATLASSERT(::IsWindow(m_hWnd)); | |
605 ATLASSERT(bstrText == NULL); | |
606 | |
607 int nLen = GetTextLen(nIndex); | |
608 if(nLen == LB_ERR) | |
609 return FALSE; | |
610 | |
611 CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff; | |
612 LPTSTR lpstrText = buff.Allocate(nLen + 1); | |
613 if(lpstrText == NULL) | |
614 return FALSE; | |
615 | |
616 if(GetText(nIndex, lpstrText) == LB_ERR) | |
617 return FALSE; | |
618 | |
619 bstrText = ::SysAllocString(T2OLE(lpstrText)); | |
620 return (bstrText != NULL) ? TRUE : FALSE; | |
621 } | |
622 #endif // _OLEAUTO_H_ | |
623 #endif // !_ATL_NO_COM | |
624 | |
625 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) | |
626 int GetText(int nIndex, _CSTRING_NS::CString& strText) const | |
627 { | |
628 ATLASSERT(::IsWindow(m_hWnd)); | |
629 int cchLen = GetTextLen(nIndex); | |
630 if(cchLen == LB_ERR) | |
631 return LB_ERR; | |
632 int nRet = LB_ERR; | |
633 LPTSTR lpstr = strText.GetBufferSetLength(cchLen); | |
634 if(lpstr != NULL) | |
635 { | |
636 nRet = GetText(nIndex, lpstr); | |
637 strText.ReleaseBuffer(); | |
638 } | |
639 return nRet; | |
640 } | |
641 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) | |
642 | |
643 int GetTextLen(int nIndex) const | |
644 { | |
645 ATLASSERT(::IsWindow(m_hWnd)); | |
646 return (int)::SendMessage(m_hWnd, LB_GETTEXTLEN, nIndex, 0L); | |
647 } | |
648 | |
649 int GetItemHeight(int nIndex) const | |
650 { | |
651 ATLASSERT(::IsWindow(m_hWnd)); | |
652 return (int)::SendMessage(m_hWnd, LB_GETITEMHEIGHT, nIndex, 0L); | |
653 } | |
654 | |
655 int SetItemHeight(int nIndex, UINT cyItemHeight) | |
656 { | |
657 ATLASSERT(::IsWindow(m_hWnd)); | |
658 return (int)::SendMessage(m_hWnd, LB_SETITEMHEIGHT, nIndex, MAKE
LONG(cyItemHeight, 0)); | |
659 } | |
660 | |
661 // Settable only attributes | |
662 void SetColumnWidth(int cxWidth) | |
663 { | |
664 ATLASSERT(::IsWindow(m_hWnd)); | |
665 ::SendMessage(m_hWnd, LB_SETCOLUMNWIDTH, cxWidth, 0L); | |
666 } | |
667 | |
668 BOOL SetTabStops(int nTabStops, LPINT rgTabStops) | |
669 { | |
670 ATLASSERT(::IsWindow(m_hWnd)); | |
671 ATLASSERT((GetStyle() & LBS_USETABSTOPS) != 0); | |
672 return (BOOL)::SendMessage(m_hWnd, LB_SETTABSTOPS, nTabStops, (L
PARAM)rgTabStops); | |
673 } | |
674 | |
675 BOOL SetTabStops() | |
676 { | |
677 ATLASSERT(::IsWindow(m_hWnd)); | |
678 ATLASSERT((GetStyle() & LBS_USETABSTOPS) != 0); | |
679 return (BOOL)::SendMessage(m_hWnd, LB_SETTABSTOPS, 0, 0L); | |
680 } | |
681 | |
682 BOOL SetTabStops(const int& cxEachStop) // takes an 'int' | |
683 { | |
684 ATLASSERT(::IsWindow(m_hWnd)); | |
685 ATLASSERT((GetStyle() & LBS_USETABSTOPS) != 0); | |
686 return (BOOL)::SendMessage(m_hWnd, LB_SETTABSTOPS, 1, (LPARAM)(L
PINT)&cxEachStop); | |
687 } | |
688 | |
689 // Operations | |
690 int InitStorage(int nItems, UINT nBytes) | |
691 { | |
692 ATLASSERT(::IsWindow(m_hWnd)); | |
693 return (int)::SendMessage(m_hWnd, LB_INITSTORAGE, (WPARAM)nItems
, nBytes); | |
694 } | |
695 | |
696 void ResetContent() | |
697 { | |
698 ATLASSERT(::IsWindow(m_hWnd)); | |
699 ::SendMessage(m_hWnd, LB_RESETCONTENT, 0, 0L); | |
700 } | |
701 | |
702 UINT ItemFromPoint(POINT pt, BOOL& bOutside) const | |
703 { | |
704 ATLASSERT(::IsWindow(m_hWnd)); | |
705 DWORD dw = (DWORD)::SendMessage(m_hWnd, LB_ITEMFROMPOINT, 0, MAK
ELPARAM(pt.x, pt.y)); | |
706 bOutside = (BOOL)HIWORD(dw); | |
707 return (UINT)LOWORD(dw); | |
708 } | |
709 | |
710 // manipulating listbox items | |
711 int AddString(LPCTSTR lpszItem) | |
712 { | |
713 ATLASSERT(::IsWindow(m_hWnd)); | |
714 return (int)::SendMessage(m_hWnd, LB_ADDSTRING, 0, (LPARAM)lpszI
tem); | |
715 } | |
716 | |
717 int DeleteString(UINT nIndex) | |
718 { | |
719 ATLASSERT(::IsWindow(m_hWnd)); | |
720 return (int)::SendMessage(m_hWnd, LB_DELETESTRING, nIndex, 0L); | |
721 } | |
722 | |
723 int InsertString(int nIndex, LPCTSTR lpszItem) | |
724 { | |
725 ATLASSERT(::IsWindow(m_hWnd)); | |
726 return (int)::SendMessage(m_hWnd, LB_INSERTSTRING, nIndex, (LPAR
AM)lpszItem); | |
727 } | |
728 | |
729 #ifndef _WIN32_WCE | |
730 int Dir(UINT attr, LPCTSTR lpszWildCard) | |
731 { | |
732 ATLASSERT(::IsWindow(m_hWnd)); | |
733 return (int)::SendMessage(m_hWnd, LB_DIR, attr, (LPARAM)lpszWild
Card); | |
734 } | |
735 | |
736 int AddFile(LPCTSTR lpstrFileName) | |
737 { | |
738 ATLASSERT(::IsWindow(m_hWnd)); | |
739 return (int)::SendMessage(m_hWnd, LB_ADDFILE, 0, (LPARAM)lpstrFi
leName); | |
740 } | |
741 #endif // !_WIN32_WCE | |
742 | |
743 // selection helpers | |
744 int FindString(int nStartAfter, LPCTSTR lpszItem) const | |
745 { | |
746 ATLASSERT(::IsWindow(m_hWnd)); | |
747 return (int)::SendMessage(m_hWnd, LB_FINDSTRING, nStartAfter, (L
PARAM)lpszItem); | |
748 } | |
749 | |
750 int FindStringExact(int nIndexStart, LPCTSTR lpszFind) const | |
751 { | |
752 ATLASSERT(::IsWindow(m_hWnd)); | |
753 return (int)::SendMessage(m_hWnd, LB_FINDSTRINGEXACT, nIndexStar
t, (LPARAM)lpszFind); | |
754 } | |
755 | |
756 int SelectString(int nStartAfter, LPCTSTR lpszItem) | |
757 { | |
758 ATLASSERT(::IsWindow(m_hWnd)); | |
759 return (int)::SendMessage(m_hWnd, LB_SELECTSTRING, nStartAfter,
(LPARAM)lpszItem); | |
760 } | |
761 | |
762 int SelItemRange(BOOL bSelect, int nFirstItem, int nLastItem) | |
763 { | |
764 ATLASSERT(::IsWindow(m_hWnd)); | |
765 ATLASSERT((GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) !=
0); | |
766 ATLASSERT(nFirstItem <= nLastItem); | |
767 return bSelect ? (int)::SendMessage(m_hWnd, LB_SELITEMRANGEEX, n
FirstItem, nLastItem) : (int)::SendMessage(m_hWnd, LB_SELITEMRANGEEX, nLastItem,
nFirstItem); | |
768 } | |
769 | |
770 #ifdef WIN32_PLATFORM_WFSP // SmartPhone only messages | |
771 DWORD GetInputMode(BOOL bCurrentMode = TRUE) | |
772 { | |
773 return SendMessage(LB_GETINPUTMODE, 0, (LPARAM)bCurrentMode); | |
774 } | |
775 | |
776 BOOL SetInputMode(DWORD dwMode) | |
777 { | |
778 return SendMessage(LB_SETINPUTMODE, 0, (LPARAM)dwMode); | |
779 } | |
780 #endif // WIN32_PLATFORM_WFSP | |
781 }; | |
782 | |
783 typedef CListBoxT<ATL::CWindow> CListBox; | |
784 | |
785 | |
786 /////////////////////////////////////////////////////////////////////////////// | |
787 // CComboBox - client side for a Windows COMBOBOX control | |
788 | |
789 #ifndef WIN32_PLATFORM_WFSP // No COMBOBOX on SmartPhones | |
790 | |
791 template <class TBase> | |
792 class CComboBoxT : public TBase | |
793 { | |
794 public: | |
795 // Constructors | |
796 CComboBoxT(HWND hWnd = NULL) : TBase(hWnd) | |
797 { } | |
798 | |
799 CComboBoxT< TBase >& operator =(HWND hWnd) | |
800 { | |
801 m_hWnd = hWnd; | |
802 return *this; | |
803 } | |
804 | |
805 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
806 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
807 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
808 { | |
809 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
810 } | |
811 | |
812 // Attributes | |
813 static LPCTSTR GetWndClassName() | |
814 { | |
815 return _T("COMBOBOX"); | |
816 } | |
817 | |
818 // for entire combo box | |
819 int GetCount() const | |
820 { | |
821 ATLASSERT(::IsWindow(m_hWnd)); | |
822 return (int)::SendMessage(m_hWnd, CB_GETCOUNT, 0, 0L); | |
823 } | |
824 | |
825 int GetCurSel() const | |
826 { | |
827 ATLASSERT(::IsWindow(m_hWnd)); | |
828 return (int)::SendMessage(m_hWnd, CB_GETCURSEL, 0, 0L); | |
829 } | |
830 | |
831 int SetCurSel(int nSelect) | |
832 { | |
833 ATLASSERT(::IsWindow(m_hWnd)); | |
834 return (int)::SendMessage(m_hWnd, CB_SETCURSEL, nSelect, 0L); | |
835 } | |
836 | |
837 LCID GetLocale() const | |
838 { | |
839 ATLASSERT(::IsWindow(m_hWnd)); | |
840 return (LCID)::SendMessage(m_hWnd, CB_GETLOCALE, 0, 0L); | |
841 } | |
842 | |
843 LCID SetLocale(LCID nNewLocale) | |
844 { | |
845 ATLASSERT(::IsWindow(m_hWnd)); | |
846 return (LCID)::SendMessage(m_hWnd, CB_SETLOCALE, (WPARAM)nNewLoc
ale, 0L); | |
847 } | |
848 | |
849 int GetTopIndex() const | |
850 { | |
851 ATLASSERT(::IsWindow(m_hWnd)); | |
852 return (int)::SendMessage(m_hWnd, CB_GETTOPINDEX, 0, 0L); | |
853 } | |
854 | |
855 int SetTopIndex(int nIndex) | |
856 { | |
857 ATLASSERT(::IsWindow(m_hWnd)); | |
858 return (int)::SendMessage(m_hWnd, CB_SETTOPINDEX, nIndex, 0L); | |
859 } | |
860 | |
861 UINT GetHorizontalExtent() const | |
862 { | |
863 ATLASSERT(::IsWindow(m_hWnd)); | |
864 return (UINT)::SendMessage(m_hWnd, CB_GETHORIZONTALEXTENT, 0, 0L
); | |
865 } | |
866 | |
867 void SetHorizontalExtent(UINT nExtent) | |
868 { | |
869 ATLASSERT(::IsWindow(m_hWnd)); | |
870 ::SendMessage(m_hWnd, CB_SETHORIZONTALEXTENT, nExtent, 0L); | |
871 } | |
872 | |
873 int GetDroppedWidth() const | |
874 { | |
875 ATLASSERT(::IsWindow(m_hWnd)); | |
876 return (int)::SendMessage(m_hWnd, CB_GETDROPPEDWIDTH, 0, 0L); | |
877 } | |
878 | |
879 int SetDroppedWidth(UINT nWidth) | |
880 { | |
881 ATLASSERT(::IsWindow(m_hWnd)); | |
882 return (int)::SendMessage(m_hWnd, CB_SETDROPPEDWIDTH, nWidth, 0L
); | |
883 } | |
884 | |
885 #if ((WINVER >= 0x0500) && !defined(_WIN32_WCE)) || (defined(_WIN32_WCE) && (_WI
N32_WCE >= 420)) | |
886 BOOL GetComboBoxInfo(PCOMBOBOXINFO pComboBoxInfo) const | |
887 { | |
888 ATLASSERT(::IsWindow(m_hWnd)); | |
889 #if ((_WIN32_WINNT >= 0x0501) && !defined(_WIN32_WCE)) || (defined(_WIN32_WCE) &
& (_WIN32_WCE >= 420)) | |
890 return (BOOL)::SendMessage(m_hWnd, CB_GETCOMBOBOXINFO, 0, (LPARA
M)pComboBoxInfo); | |
891 #else // !((_WIN32_WINNT >= 0x0501) && !defined(_WIN32_WCE)) || (defined(_WIN32_
WCE) && (_WIN32_WCE >= 420)) | |
892 return ::GetComboBoxInfo(m_hWnd, pComboBoxInfo); | |
893 #endif // !((_WIN32_WINNT >= 0x0501) && !defined(_WIN32_WCE)) || (defined(_WIN32
_WCE) && (_WIN32_WCE >= 420)) | |
894 } | |
895 #endif // ((WINVER >= 0x0500) && !defined(_WIN32_WCE)) || (defined(_WIN32_WCE) &
& (_WIN32_WCE >= 420)) | |
896 | |
897 // for edit control | |
898 DWORD GetEditSel() const | |
899 { | |
900 ATLASSERT(::IsWindow(m_hWnd)); | |
901 return (DWORD)::SendMessage(m_hWnd, CB_GETEDITSEL, 0, 0L); | |
902 } | |
903 | |
904 BOOL SetEditSel(int nStartChar, int nEndChar) | |
905 { | |
906 ATLASSERT(::IsWindow(m_hWnd)); | |
907 return (BOOL)::SendMessage(m_hWnd, CB_SETEDITSEL, 0, MAKELONG(nS
tartChar, nEndChar)); | |
908 } | |
909 | |
910 // for combobox item | |
911 DWORD_PTR GetItemData(int nIndex) const | |
912 { | |
913 ATLASSERT(::IsWindow(m_hWnd)); | |
914 return (DWORD_PTR)::SendMessage(m_hWnd, CB_GETITEMDATA, nIndex,
0L); | |
915 } | |
916 | |
917 int SetItemData(int nIndex, DWORD_PTR dwItemData) | |
918 { | |
919 ATLASSERT(::IsWindow(m_hWnd)); | |
920 return (int)::SendMessage(m_hWnd, CB_SETITEMDATA, nIndex, (LPARA
M)dwItemData); | |
921 } | |
922 | |
923 void* GetItemDataPtr(int nIndex) const | |
924 { | |
925 ATLASSERT(::IsWindow(m_hWnd)); | |
926 return (void*)GetItemData(nIndex); | |
927 } | |
928 | |
929 int SetItemDataPtr(int nIndex, void* pData) | |
930 { | |
931 ATLASSERT(::IsWindow(m_hWnd)); | |
932 return SetItemData(nIndex, (DWORD_PTR)pData); | |
933 } | |
934 | |
935 int GetLBText(int nIndex, LPTSTR lpszText) const | |
936 { | |
937 ATLASSERT(::IsWindow(m_hWnd)); | |
938 return (int)::SendMessage(m_hWnd, CB_GETLBTEXT, nIndex, (LPARAM)
lpszText); | |
939 } | |
940 | |
941 #ifndef _ATL_NO_COM | |
942 BOOL GetLBTextBSTR(int nIndex, BSTR& bstrText) const | |
943 { | |
944 USES_CONVERSION; | |
945 ATLASSERT(::IsWindow(m_hWnd)); | |
946 ATLASSERT(bstrText == NULL); | |
947 | |
948 int nLen = GetLBTextLen(nIndex); | |
949 if(nLen == CB_ERR) | |
950 return FALSE; | |
951 | |
952 CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff; | |
953 LPTSTR lpstrText = buff.Allocate(nLen + 1); | |
954 if(lpstrText == NULL) | |
955 return FALSE; | |
956 | |
957 if(GetLBText(nIndex, lpstrText) == CB_ERR) | |
958 return FALSE; | |
959 | |
960 bstrText = ::SysAllocString(T2OLE(lpstrText)); | |
961 return (bstrText != NULL) ? TRUE : FALSE; | |
962 } | |
963 #endif // !_ATL_NO_COM | |
964 | |
965 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) | |
966 int GetLBText(int nIndex, _CSTRING_NS::CString& strText) const | |
967 { | |
968 ATLASSERT(::IsWindow(m_hWnd)); | |
969 int cchLen = GetLBTextLen(nIndex); | |
970 if(cchLen == CB_ERR) | |
971 return CB_ERR; | |
972 int nRet = CB_ERR; | |
973 LPTSTR lpstr = strText.GetBufferSetLength(cchLen); | |
974 if(lpstr != NULL) | |
975 { | |
976 nRet = GetLBText(nIndex, lpstr); | |
977 strText.ReleaseBuffer(); | |
978 } | |
979 return nRet; | |
980 } | |
981 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) | |
982 | |
983 int GetLBTextLen(int nIndex) const | |
984 { | |
985 ATLASSERT(::IsWindow(m_hWnd)); | |
986 return (int)::SendMessage(m_hWnd, CB_GETLBTEXTLEN, nIndex, 0L); | |
987 } | |
988 | |
989 int GetItemHeight(int nIndex) const | |
990 { | |
991 ATLASSERT(::IsWindow(m_hWnd)); | |
992 return (int)::SendMessage(m_hWnd, CB_GETITEMHEIGHT, nIndex, 0L); | |
993 } | |
994 | |
995 int SetItemHeight(int nIndex, UINT cyItemHeight) | |
996 { | |
997 ATLASSERT(::IsWindow(m_hWnd)); | |
998 return (int)::SendMessage(m_hWnd, CB_SETITEMHEIGHT, nIndex, MAKE
LONG(cyItemHeight, 0)); | |
999 } | |
1000 | |
1001 BOOL GetExtendedUI() const | |
1002 { | |
1003 ATLASSERT(::IsWindow(m_hWnd)); | |
1004 return (BOOL)::SendMessage(m_hWnd, CB_GETEXTENDEDUI, 0, 0L); | |
1005 } | |
1006 | |
1007 int SetExtendedUI(BOOL bExtended = TRUE) | |
1008 { | |
1009 ATLASSERT(::IsWindow(m_hWnd)); | |
1010 return (int)::SendMessage(m_hWnd, CB_SETEXTENDEDUI, bExtended, 0
L); | |
1011 } | |
1012 | |
1013 void GetDroppedControlRect(LPRECT lprect) const | |
1014 { | |
1015 ATLASSERT(::IsWindow(m_hWnd)); | |
1016 ::SendMessage(m_hWnd, CB_GETDROPPEDCONTROLRECT, 0, (LPARAM)lprec
t); | |
1017 } | |
1018 | |
1019 BOOL GetDroppedState() const | |
1020 { | |
1021 ATLASSERT(::IsWindow(m_hWnd)); | |
1022 return (BOOL)::SendMessage(m_hWnd, CB_GETDROPPEDSTATE, 0, 0L); | |
1023 } | |
1024 | |
1025 #if (_WIN32_WINNT >= 0x0501) | |
1026 int GetMinVisible() const | |
1027 { | |
1028 ATLASSERT(::IsWindow(m_hWnd)); | |
1029 return (int)::SendMessage(m_hWnd, CB_GETMINVISIBLE, 0, 0L); | |
1030 } | |
1031 | |
1032 BOOL SetMinVisible(int nMinVisible) | |
1033 { | |
1034 ATLASSERT(::IsWindow(m_hWnd)); | |
1035 return (BOOL)::SendMessage(m_hWnd, CB_SETMINVISIBLE, nMinVisible
, 0L); | |
1036 } | |
1037 | |
1038 // Vista only | |
1039 BOOL GetCueBannerText(LPWSTR lpwText, int cchText) const | |
1040 { | |
1041 #ifndef CB_GETCUEBANNER | |
1042 const UINT CB_GETCUEBANNER = (CBM_FIRST + 4); | |
1043 #endif | |
1044 ATLASSERT(::IsWindow(m_hWnd)); | |
1045 return (BOOL)::SendMessage(m_hWnd, CB_GETCUEBANNER, (WPARAM)lpwT
ext, cchText); | |
1046 } | |
1047 | |
1048 // Vista only | |
1049 BOOL SetCueBannerText(LPCWSTR lpcwText) | |
1050 { | |
1051 #ifndef CB_SETCUEBANNER | |
1052 const UINT CB_SETCUEBANNER = (CBM_FIRST + 3); | |
1053 #endif | |
1054 ATLASSERT(::IsWindow(m_hWnd)); | |
1055 return (BOOL)::SendMessage(m_hWnd, CB_SETCUEBANNER, 0, (LPARAM)l
pcwText); | |
1056 } | |
1057 #endif // (_WIN32_WINNT >= 0x0501) | |
1058 | |
1059 // Operations | |
1060 int InitStorage(int nItems, UINT nBytes) | |
1061 { | |
1062 ATLASSERT(::IsWindow(m_hWnd)); | |
1063 return (int)::SendMessage(m_hWnd, CB_INITSTORAGE, (WPARAM)nItems
, nBytes); | |
1064 } | |
1065 | |
1066 void ResetContent() | |
1067 { | |
1068 ATLASSERT(::IsWindow(m_hWnd)); | |
1069 ::SendMessage(m_hWnd, CB_RESETCONTENT, 0, 0L); | |
1070 } | |
1071 | |
1072 // for edit control | |
1073 BOOL LimitText(int nMaxChars) | |
1074 { | |
1075 ATLASSERT(::IsWindow(m_hWnd)); | |
1076 return (BOOL)::SendMessage(m_hWnd, CB_LIMITTEXT, nMaxChars, 0L); | |
1077 } | |
1078 | |
1079 // for drop-down combo boxes | |
1080 void ShowDropDown(BOOL bShowIt = TRUE) | |
1081 { | |
1082 ATLASSERT(::IsWindow(m_hWnd)); | |
1083 ::SendMessage(m_hWnd, CB_SHOWDROPDOWN, bShowIt, 0L); | |
1084 } | |
1085 | |
1086 // manipulating listbox items | |
1087 int AddString(LPCTSTR lpszString) | |
1088 { | |
1089 ATLASSERT(::IsWindow(m_hWnd)); | |
1090 return (int)::SendMessage(m_hWnd, CB_ADDSTRING, 0, (LPARAM)lpszS
tring); | |
1091 } | |
1092 | |
1093 int DeleteString(UINT nIndex) | |
1094 { | |
1095 ATLASSERT(::IsWindow(m_hWnd)); | |
1096 return (int)::SendMessage(m_hWnd, CB_DELETESTRING, nIndex, 0L); | |
1097 } | |
1098 | |
1099 int InsertString(int nIndex, LPCTSTR lpszString) | |
1100 { | |
1101 ATLASSERT(::IsWindow(m_hWnd)); | |
1102 return (int)::SendMessage(m_hWnd, CB_INSERTSTRING, nIndex, (LPAR
AM)lpszString); | |
1103 } | |
1104 | |
1105 #ifndef _WIN32_WCE | |
1106 int Dir(UINT attr, LPCTSTR lpszWildCard) | |
1107 { | |
1108 ATLASSERT(::IsWindow(m_hWnd)); | |
1109 return (int)::SendMessage(m_hWnd, CB_DIR, attr, (LPARAM)lpszWild
Card); | |
1110 } | |
1111 #endif // !_WIN32_WCE | |
1112 | |
1113 // selection helpers | |
1114 int FindString(int nStartAfter, LPCTSTR lpszString) const | |
1115 { | |
1116 ATLASSERT(::IsWindow(m_hWnd)); | |
1117 return (int)::SendMessage(m_hWnd, CB_FINDSTRING, nStartAfter, (L
PARAM)lpszString); | |
1118 } | |
1119 | |
1120 int FindStringExact(int nIndexStart, LPCTSTR lpszFind) const | |
1121 { | |
1122 ATLASSERT(::IsWindow(m_hWnd)); | |
1123 return (int)::SendMessage(m_hWnd, CB_FINDSTRINGEXACT, nIndexStar
t, (LPARAM)lpszFind); | |
1124 } | |
1125 | |
1126 int SelectString(int nStartAfter, LPCTSTR lpszString) | |
1127 { | |
1128 ATLASSERT(::IsWindow(m_hWnd)); | |
1129 return (int)::SendMessage(m_hWnd, CB_SELECTSTRING, nStartAfter,
(LPARAM)lpszString); | |
1130 } | |
1131 | |
1132 // Clipboard operations | |
1133 void Clear() | |
1134 { | |
1135 ATLASSERT(::IsWindow(m_hWnd)); | |
1136 ::SendMessage(m_hWnd, WM_CLEAR, 0, 0L); | |
1137 } | |
1138 | |
1139 void Copy() | |
1140 { | |
1141 ATLASSERT(::IsWindow(m_hWnd)); | |
1142 ::SendMessage(m_hWnd, WM_COPY, 0, 0L); | |
1143 } | |
1144 | |
1145 void Cut() | |
1146 { | |
1147 ATLASSERT(::IsWindow(m_hWnd)); | |
1148 ::SendMessage(m_hWnd, WM_CUT, 0, 0L); | |
1149 } | |
1150 | |
1151 void Paste() | |
1152 { | |
1153 ATLASSERT(::IsWindow(m_hWnd)); | |
1154 ::SendMessage(m_hWnd, WM_PASTE, 0, 0L); | |
1155 } | |
1156 }; | |
1157 | |
1158 typedef CComboBoxT<ATL::CWindow> CComboBox; | |
1159 | |
1160 #endif // !WIN32_PLATFORM_WFSP | |
1161 | |
1162 /////////////////////////////////////////////////////////////////////////////// | |
1163 // CEdit - client side for a Windows EDIT control | |
1164 | |
1165 template <class TBase> | |
1166 class CEditT : public TBase | |
1167 { | |
1168 public: | |
1169 // Constructors | |
1170 CEditT(HWND hWnd = NULL) : TBase(hWnd) | |
1171 { } | |
1172 | |
1173 CEditT< TBase >& operator =(HWND hWnd) | |
1174 { | |
1175 m_hWnd = hWnd; | |
1176 return *this; | |
1177 } | |
1178 | |
1179 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
1180 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
1181 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
1182 { | |
1183 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
1184 } | |
1185 | |
1186 // Attributes | |
1187 static LPCTSTR GetWndClassName() | |
1188 { | |
1189 return _T("EDIT"); | |
1190 } | |
1191 | |
1192 BOOL CanUndo() const | |
1193 { | |
1194 ATLASSERT(::IsWindow(m_hWnd)); | |
1195 return (BOOL)::SendMessage(m_hWnd, EM_CANUNDO, 0, 0L); | |
1196 } | |
1197 | |
1198 int GetLineCount() const | |
1199 { | |
1200 ATLASSERT(::IsWindow(m_hWnd)); | |
1201 return (int)::SendMessage(m_hWnd, EM_GETLINECOUNT, 0, 0L); | |
1202 } | |
1203 | |
1204 BOOL GetModify() const | |
1205 { | |
1206 ATLASSERT(::IsWindow(m_hWnd)); | |
1207 return (BOOL)::SendMessage(m_hWnd, EM_GETMODIFY, 0, 0L); | |
1208 } | |
1209 | |
1210 void SetModify(BOOL bModified = TRUE) | |
1211 { | |
1212 ATLASSERT(::IsWindow(m_hWnd)); | |
1213 ::SendMessage(m_hWnd, EM_SETMODIFY, bModified, 0L); | |
1214 } | |
1215 | |
1216 void GetRect(LPRECT lpRect) const | |
1217 { | |
1218 ATLASSERT(::IsWindow(m_hWnd)); | |
1219 ::SendMessage(m_hWnd, EM_GETRECT, 0, (LPARAM)lpRect); | |
1220 } | |
1221 | |
1222 DWORD GetSel() const | |
1223 { | |
1224 ATLASSERT(::IsWindow(m_hWnd)); | |
1225 return (DWORD)::SendMessage(m_hWnd, EM_GETSEL, 0, 0L); | |
1226 } | |
1227 | |
1228 void GetSel(int& nStartChar, int& nEndChar) const | |
1229 { | |
1230 ATLASSERT(::IsWindow(m_hWnd)); | |
1231 ::SendMessage(m_hWnd, EM_GETSEL, (WPARAM)&nStartChar, (LPARAM)&n
EndChar); | |
1232 } | |
1233 | |
1234 #ifndef _WIN32_WCE | |
1235 HLOCAL GetHandle() const | |
1236 { | |
1237 ATLASSERT(::IsWindow(m_hWnd)); | |
1238 return (HLOCAL)::SendMessage(m_hWnd, EM_GETHANDLE, 0, 0L); | |
1239 } | |
1240 | |
1241 void SetHandle(HLOCAL hBuffer) | |
1242 { | |
1243 ATLASSERT(::IsWindow(m_hWnd)); | |
1244 ::SendMessage(m_hWnd, EM_SETHANDLE, (WPARAM)hBuffer, 0L); | |
1245 } | |
1246 #endif // !_WIN32_WCE | |
1247 | |
1248 DWORD GetMargins() const | |
1249 { | |
1250 ATLASSERT(::IsWindow(m_hWnd)); | |
1251 return (DWORD)::SendMessage(m_hWnd, EM_GETMARGINS, 0, 0L); | |
1252 } | |
1253 | |
1254 void SetMargins(UINT nLeft, UINT nRight) | |
1255 { | |
1256 ATLASSERT(::IsWindow(m_hWnd)); | |
1257 ::SendMessage(m_hWnd, EM_SETMARGINS, EC_LEFTMARGIN|EC_RIGHTMARGI
N, MAKELONG(nLeft, nRight)); | |
1258 } | |
1259 | |
1260 UINT GetLimitText() const | |
1261 { | |
1262 ATLASSERT(::IsWindow(m_hWnd)); | |
1263 return (UINT)::SendMessage(m_hWnd, EM_GETLIMITTEXT, 0, 0L); | |
1264 } | |
1265 | |
1266 void SetLimitText(UINT nMax) | |
1267 { | |
1268 ATLASSERT(::IsWindow(m_hWnd)); | |
1269 ::SendMessage(m_hWnd, EM_SETLIMITTEXT, nMax, 0L); | |
1270 } | |
1271 | |
1272 POINT PosFromChar(UINT nChar) const | |
1273 { | |
1274 ATLASSERT(::IsWindow(m_hWnd)); | |
1275 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, EM_POSFROMCHAR, nChar
, 0); | |
1276 POINT point = { GET_X_LPARAM(dwRet), GET_Y_LPARAM(dwRet) }; | |
1277 return point; | |
1278 } | |
1279 | |
1280 int CharFromPos(POINT pt, int* pLine = NULL) const | |
1281 { | |
1282 ATLASSERT(::IsWindow(m_hWnd)); | |
1283 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, EM_CHARFROMPOS, 0, MA
KELPARAM(pt.x, pt.y)); | |
1284 if(pLine != NULL) | |
1285 *pLine = (int)(short)HIWORD(dwRet); | |
1286 return (int)(short)LOWORD(dwRet); | |
1287 } | |
1288 | |
1289 // NOTE: first word in lpszBuffer must contain the size of the buffer! | |
1290 int GetLine(int nIndex, LPTSTR lpszBuffer) const | |
1291 { | |
1292 ATLASSERT(::IsWindow(m_hWnd)); | |
1293 return (int)::SendMessage(m_hWnd, EM_GETLINE, nIndex, (LPARAM)lp
szBuffer); | |
1294 } | |
1295 | |
1296 int GetLine(int nIndex, LPTSTR lpszBuffer, int nMaxLength) const | |
1297 { | |
1298 ATLASSERT(::IsWindow(m_hWnd)); | |
1299 *(LPWORD)lpszBuffer = (WORD)nMaxLength; | |
1300 return (int)::SendMessage(m_hWnd, EM_GETLINE, nIndex, (LPARAM)lp
szBuffer); | |
1301 } | |
1302 | |
1303 TCHAR GetPasswordChar() const | |
1304 { | |
1305 ATLASSERT(::IsWindow(m_hWnd)); | |
1306 return (TCHAR)::SendMessage(m_hWnd, EM_GETPASSWORDCHAR, 0, 0L); | |
1307 } | |
1308 | |
1309 void SetPasswordChar(TCHAR ch) | |
1310 { | |
1311 ATLASSERT(::IsWindow(m_hWnd)); | |
1312 ::SendMessage(m_hWnd, EM_SETPASSWORDCHAR, ch, 0L); | |
1313 } | |
1314 | |
1315 #ifndef _WIN32_WCE | |
1316 EDITWORDBREAKPROC GetWordBreakProc() const | |
1317 { | |
1318 ATLASSERT(::IsWindow(m_hWnd)); | |
1319 return (EDITWORDBREAKPROC)::SendMessage(m_hWnd, EM_GETWORDBREAKP
ROC, 0, 0L); | |
1320 } | |
1321 | |
1322 void SetWordBreakProc(EDITWORDBREAKPROC ewbprc) | |
1323 { | |
1324 ATLASSERT(::IsWindow(m_hWnd)); | |
1325 ::SendMessage(m_hWnd, EM_SETWORDBREAKPROC, 0, (LPARAM)ewbprc); | |
1326 } | |
1327 #endif // !_WIN32_WCE | |
1328 | |
1329 int GetFirstVisibleLine() const | |
1330 { | |
1331 ATLASSERT(::IsWindow(m_hWnd)); | |
1332 return (int)::SendMessage(m_hWnd, EM_GETFIRSTVISIBLELINE, 0, 0L)
; | |
1333 } | |
1334 | |
1335 #ifndef _WIN32_WCE | |
1336 int GetThumb() const | |
1337 { | |
1338 ATLASSERT(::IsWindow(m_hWnd)); | |
1339 ATLASSERT((GetStyle() & ES_MULTILINE) != 0); | |
1340 return (int)::SendMessage(m_hWnd, EM_GETTHUMB, 0, 0L); | |
1341 } | |
1342 #endif // !_WIN32_WCE | |
1343 | |
1344 BOOL SetReadOnly(BOOL bReadOnly = TRUE) | |
1345 { | |
1346 ATLASSERT(::IsWindow(m_hWnd)); | |
1347 return (BOOL)::SendMessage(m_hWnd, EM_SETREADONLY, bReadOnly, 0L
); | |
1348 } | |
1349 | |
1350 #if (WINVER >= 0x0500) && !defined(_WIN32_WCE) | |
1351 UINT GetImeStatus(UINT uStatus) const | |
1352 { | |
1353 ATLASSERT(::IsWindow(m_hWnd)); | |
1354 return (UINT)::SendMessage(m_hWnd, EM_GETIMESTATUS, uStatus, 0L)
; | |
1355 } | |
1356 | |
1357 UINT SetImeStatus(UINT uStatus, UINT uData) | |
1358 { | |
1359 ATLASSERT(::IsWindow(m_hWnd)); | |
1360 return (UINT)::SendMessage(m_hWnd, EM_SETIMESTATUS, uStatus, uDa
ta); | |
1361 } | |
1362 #endif // (WINVER >= 0x0500) && !defined(_WIN32_WCE) | |
1363 | |
1364 #if (_WIN32_WINNT >= 0x0501) | |
1365 BOOL GetCueBannerText(LPCWSTR lpstrText, int cchText) const | |
1366 { | |
1367 ATLASSERT(::IsWindow(m_hWnd)); | |
1368 return (BOOL)::SendMessage(m_hWnd, EM_GETCUEBANNER, (WPARAM)lpst
rText, cchText); | |
1369 } | |
1370 | |
1371 // bKeepWithFocus - Vista only | |
1372 BOOL SetCueBannerText(LPCWSTR lpstrText, BOOL bKeepWithFocus = FALSE) | |
1373 { | |
1374 ATLASSERT(::IsWindow(m_hWnd)); | |
1375 return (BOOL)::SendMessage(m_hWnd, EM_SETCUEBANNER, (WPARAM)bKee
pWithFocus, (LPARAM)(lpstrText)); | |
1376 } | |
1377 #endif // (_WIN32_WINNT >= 0x0501) | |
1378 | |
1379 // Operations | |
1380 void EmptyUndoBuffer() | |
1381 { | |
1382 ATLASSERT(::IsWindow(m_hWnd)); | |
1383 ::SendMessage(m_hWnd, EM_EMPTYUNDOBUFFER, 0, 0L); | |
1384 } | |
1385 | |
1386 BOOL FmtLines(BOOL bAddEOL) | |
1387 { | |
1388 ATLASSERT(::IsWindow(m_hWnd)); | |
1389 return (BOOL)::SendMessage(m_hWnd, EM_FMTLINES, bAddEOL, 0L); | |
1390 } | |
1391 | |
1392 void LimitText(int nChars = 0) | |
1393 { | |
1394 ATLASSERT(::IsWindow(m_hWnd)); | |
1395 ::SendMessage(m_hWnd, EM_LIMITTEXT, nChars, 0L); | |
1396 } | |
1397 | |
1398 int LineFromChar(int nIndex = -1) const | |
1399 { | |
1400 ATLASSERT(::IsWindow(m_hWnd)); | |
1401 return (int)::SendMessage(m_hWnd, EM_LINEFROMCHAR, nIndex, 0L); | |
1402 } | |
1403 | |
1404 int LineIndex(int nLine = -1) const | |
1405 { | |
1406 ATLASSERT(::IsWindow(m_hWnd)); | |
1407 return (int)::SendMessage(m_hWnd, EM_LINEINDEX, nLine, 0L); | |
1408 } | |
1409 | |
1410 int LineLength(int nLine = -1) const | |
1411 { | |
1412 ATLASSERT(::IsWindow(m_hWnd)); | |
1413 return (int)::SendMessage(m_hWnd, EM_LINELENGTH, nLine, 0L); | |
1414 } | |
1415 | |
1416 void LineScroll(int nLines, int nChars = 0) | |
1417 { | |
1418 ATLASSERT(::IsWindow(m_hWnd)); | |
1419 ::SendMessage(m_hWnd, EM_LINESCROLL, nChars, nLines); | |
1420 } | |
1421 | |
1422 void ReplaceSel(LPCTSTR lpszNewText, BOOL bCanUndo = FALSE) | |
1423 { | |
1424 ATLASSERT(::IsWindow(m_hWnd)); | |
1425 ::SendMessage(m_hWnd, EM_REPLACESEL, (WPARAM) bCanUndo, (LPARAM)
lpszNewText); | |
1426 } | |
1427 | |
1428 void SetRect(LPCRECT lpRect) | |
1429 { | |
1430 ATLASSERT(::IsWindow(m_hWnd)); | |
1431 ::SendMessage(m_hWnd, EM_SETRECT, 0, (LPARAM)lpRect); | |
1432 } | |
1433 | |
1434 void SetRectNP(LPCRECT lpRect) | |
1435 { | |
1436 ATLASSERT(::IsWindow(m_hWnd)); | |
1437 ::SendMessage(m_hWnd, EM_SETRECTNP, 0, (LPARAM)lpRect); | |
1438 } | |
1439 | |
1440 void SetSel(DWORD dwSelection, BOOL bNoScroll = FALSE) | |
1441 { | |
1442 ATLASSERT(::IsWindow(m_hWnd)); | |
1443 ::SendMessage(m_hWnd, EM_SETSEL, LOWORD(dwSelection), HIWORD(dwS
election)); | |
1444 if(!bNoScroll) | |
1445 ::SendMessage(m_hWnd, EM_SCROLLCARET, 0, 0L); | |
1446 } | |
1447 | |
1448 void SetSel(int nStartChar, int nEndChar, BOOL bNoScroll = FALSE) | |
1449 { | |
1450 ATLASSERT(::IsWindow(m_hWnd)); | |
1451 ::SendMessage(m_hWnd, EM_SETSEL, nStartChar, nEndChar); | |
1452 if(!bNoScroll) | |
1453 ::SendMessage(m_hWnd, EM_SCROLLCARET, 0, 0L); | |
1454 } | |
1455 | |
1456 void SetSelAll(BOOL bNoScroll = FALSE) | |
1457 { | |
1458 SetSel(0, -1, bNoScroll); | |
1459 } | |
1460 | |
1461 void SetSelNone(BOOL bNoScroll = FALSE) | |
1462 { | |
1463 SetSel(-1, 0, bNoScroll); | |
1464 } | |
1465 | |
1466 BOOL SetTabStops(int nTabStops, LPINT rgTabStops) | |
1467 { | |
1468 ATLASSERT(::IsWindow(m_hWnd)); | |
1469 return (BOOL)::SendMessage(m_hWnd, EM_SETTABSTOPS, nTabStops, (L
PARAM)rgTabStops); | |
1470 } | |
1471 | |
1472 BOOL SetTabStops() | |
1473 { | |
1474 ATLASSERT(::IsWindow(m_hWnd)); | |
1475 return (BOOL)::SendMessage(m_hWnd, EM_SETTABSTOPS, 0, 0L); | |
1476 } | |
1477 | |
1478 BOOL SetTabStops(const int& cxEachStop) // takes an 'int' | |
1479 { | |
1480 ATLASSERT(::IsWindow(m_hWnd)); | |
1481 return (BOOL)::SendMessage(m_hWnd, EM_SETTABSTOPS, 1, (LPARAM)(L
PINT)&cxEachStop); | |
1482 } | |
1483 | |
1484 void ScrollCaret() | |
1485 { | |
1486 ATLASSERT(::IsWindow(m_hWnd)); | |
1487 ::SendMessage(m_hWnd, EM_SCROLLCARET, 0, 0L); | |
1488 } | |
1489 | |
1490 int Scroll(int nScrollAction) | |
1491 { | |
1492 ATLASSERT(::IsWindow(m_hWnd)); | |
1493 ATLASSERT((GetStyle() & ES_MULTILINE) != 0); | |
1494 LRESULT lRet = ::SendMessage(m_hWnd, EM_SCROLL, nScrollAction, 0
L); | |
1495 if(!(BOOL)HIWORD(lRet)) | |
1496 return -1; // failed | |
1497 return (int)(short)LOWORD(lRet); | |
1498 | |
1499 } | |
1500 | |
1501 void InsertText(int nInsertAfterChar, LPCTSTR lpstrText, BOOL bNoScroll
= FALSE, BOOL bCanUndo = FALSE) | |
1502 { | |
1503 SetSel(nInsertAfterChar, nInsertAfterChar, bNoScroll); | |
1504 ReplaceSel(lpstrText, bCanUndo); | |
1505 } | |
1506 | |
1507 void AppendText(LPCTSTR lpstrText, BOOL bNoScroll = FALSE, BOOL bCanUndo
= FALSE) | |
1508 { | |
1509 InsertText(GetWindowTextLength(), lpstrText, bNoScroll, bCanUndo
); | |
1510 } | |
1511 | |
1512 #if (_WIN32_WINNT >= 0x0501) | |
1513 BOOL ShowBalloonTip(PEDITBALLOONTIP pEditBaloonTip) | |
1514 { | |
1515 ATLASSERT(::IsWindow(m_hWnd)); | |
1516 return (BOOL)::SendMessage(m_hWnd, EM_SHOWBALLOONTIP, 0, (LPARAM
)pEditBaloonTip); | |
1517 } | |
1518 | |
1519 BOOL HideBalloonTip() | |
1520 { | |
1521 ATLASSERT(::IsWindow(m_hWnd)); | |
1522 return (BOOL)::SendMessage(m_hWnd, EM_HIDEBALLOONTIP, 0, 0L); | |
1523 } | |
1524 #endif // (_WIN32_WINNT >= 0x0501) | |
1525 | |
1526 #if (_WIN32_WINNT >= 0x0600) | |
1527 DWORD GetHilite() const | |
1528 { | |
1529 ATLASSERT(::IsWindow(m_hWnd)); | |
1530 return (DWORD)::SendMessage(m_hWnd, EM_GETHILITE, 0, 0L); | |
1531 } | |
1532 | |
1533 void GetHilite(int& nStartChar, int& nEndChar) const | |
1534 { | |
1535 ATLASSERT(::IsWindow(m_hWnd)); | |
1536 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, EM_GETHILITE, 0, 0L); | |
1537 nStartChar = (int)(short)LOWORD(dwRet); | |
1538 nEndChar = (int)(short)HIWORD(dwRet); | |
1539 } | |
1540 | |
1541 void SetHilite(int nStartChar, int nEndChar) | |
1542 { | |
1543 ATLASSERT(::IsWindow(m_hWnd)); | |
1544 ::SendMessage(m_hWnd, EM_SETHILITE, nStartChar, nEndChar); | |
1545 } | |
1546 #endif // (_WIN32_WINNT >= 0x0600) | |
1547 | |
1548 // Clipboard operations | |
1549 BOOL Undo() | |
1550 { | |
1551 ATLASSERT(::IsWindow(m_hWnd)); | |
1552 return (BOOL)::SendMessage(m_hWnd, EM_UNDO, 0, 0L); | |
1553 } | |
1554 | |
1555 void Clear() | |
1556 { | |
1557 ATLASSERT(::IsWindow(m_hWnd)); | |
1558 ::SendMessage(m_hWnd, WM_CLEAR, 0, 0L); | |
1559 } | |
1560 | |
1561 void Copy() | |
1562 { | |
1563 ATLASSERT(::IsWindow(m_hWnd)); | |
1564 ::SendMessage(m_hWnd, WM_COPY, 0, 0L); | |
1565 } | |
1566 | |
1567 void Cut() | |
1568 { | |
1569 ATLASSERT(::IsWindow(m_hWnd)); | |
1570 ::SendMessage(m_hWnd, WM_CUT, 0, 0L); | |
1571 } | |
1572 | |
1573 void Paste() | |
1574 { | |
1575 ATLASSERT(::IsWindow(m_hWnd)); | |
1576 ::SendMessage(m_hWnd, WM_PASTE, 0, 0L); | |
1577 } | |
1578 | |
1579 #ifdef WIN32_PLATFORM_WFSP // SmartPhone only messages | |
1580 DWORD GetExtendedStyle() | |
1581 { | |
1582 return SendMessage(EM_GETEXTENDEDSTYLE); | |
1583 } | |
1584 | |
1585 DWORD SetExtendedStyle(DWORD dwMask, DWORD dwExStyle) | |
1586 { | |
1587 return SendMessage(EM_SETEXTENDEDSTYLE, (WPARAM)dwMask, (LPARAM)
dwExStyle); | |
1588 } | |
1589 | |
1590 DWORD GetInputMode(BOOL bCurrentMode = TRUE) | |
1591 { | |
1592 return SendMessage(EM_GETINPUTMODE, 0, (LPARAM)bCurrentMode); | |
1593 } | |
1594 | |
1595 BOOL SetInputMode(DWORD dwMode) | |
1596 { | |
1597 return SendMessage(EM_SETINPUTMODE, 0, (LPARAM)dwMode); | |
1598 } | |
1599 | |
1600 BOOL SetSymbols(LPCTSTR szSymbols) | |
1601 { | |
1602 return SendMessage(EM_SETSYMBOLS, 0, (LPARAM)szSymbols); | |
1603 } | |
1604 | |
1605 BOOL ResetSymbols() | |
1606 { | |
1607 return SendMessage(EM_SETSYMBOLS); | |
1608 } | |
1609 #endif // WIN32_PLATFORM_WFSP | |
1610 }; | |
1611 | |
1612 typedef CEditT<ATL::CWindow> CEdit; | |
1613 | |
1614 | |
1615 /////////////////////////////////////////////////////////////////////////////// | |
1616 // CEditCommands - message handlers for standard EDIT commands | |
1617 | |
1618 // Chain to CEditCommands message map. Your class must also derive from CEdit. | |
1619 // Example: | |
1620 // class CMyEdit : public CWindowImpl<CMyEdit, CEdit>, | |
1621 // public CEditCommands<CMyEdit> | |
1622 // { | |
1623 // public: | |
1624 // BEGIN_MSG_MAP(CMyEdit) | |
1625 // // your handlers... | |
1626 // CHAIN_MSG_MAP_ALT(CEditCommands<CMyEdit>, 1) | |
1627 // END_MSG_MAP() | |
1628 // // other stuff... | |
1629 // }; | |
1630 | |
1631 template <class T> | |
1632 class CEditCommands | |
1633 { | |
1634 public: | |
1635 BEGIN_MSG_MAP(CEditCommands< T >) | |
1636 ALT_MSG_MAP(1) | |
1637 COMMAND_ID_HANDLER(ID_EDIT_CLEAR, OnEditClear) | |
1638 COMMAND_ID_HANDLER(ID_EDIT_CLEAR_ALL, OnEditClearAll) | |
1639 COMMAND_ID_HANDLER(ID_EDIT_COPY, OnEditCopy) | |
1640 COMMAND_ID_HANDLER(ID_EDIT_CUT, OnEditCut) | |
1641 COMMAND_ID_HANDLER(ID_EDIT_PASTE, OnEditPaste) | |
1642 COMMAND_ID_HANDLER(ID_EDIT_SELECT_ALL, OnEditSelectAll) | |
1643 COMMAND_ID_HANDLER(ID_EDIT_UNDO, OnEditUndo) | |
1644 END_MSG_MAP() | |
1645 | |
1646 LRESULT OnEditClear(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/
, BOOL& /*bHandled*/) | |
1647 { | |
1648 T* pT = static_cast<T*>(this); | |
1649 pT->Clear(); | |
1650 return 0; | |
1651 } | |
1652 | |
1653 LRESULT OnEditClearAll(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCt
l*/, BOOL& /*bHandled*/) | |
1654 { | |
1655 T* pT = static_cast<T*>(this); | |
1656 pT->SetSel(0, -1); | |
1657 pT->Clear(); | |
1658 return 0; | |
1659 } | |
1660 | |
1661 LRESULT OnEditCopy(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/,
BOOL& /*bHandled*/) | |
1662 { | |
1663 T* pT = static_cast<T*>(this); | |
1664 pT->Copy(); | |
1665 return 0; | |
1666 } | |
1667 | |
1668 LRESULT OnEditCut(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/,
BOOL& /*bHandled*/) | |
1669 { | |
1670 T* pT = static_cast<T*>(this); | |
1671 pT->Cut(); | |
1672 return 0; | |
1673 } | |
1674 | |
1675 LRESULT OnEditPaste(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/
, BOOL& /*bHandled*/) | |
1676 { | |
1677 T* pT = static_cast<T*>(this); | |
1678 pT->Paste(); | |
1679 return 0; | |
1680 } | |
1681 | |
1682 LRESULT OnEditSelectAll(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndC
tl*/, BOOL& /*bHandled*/) | |
1683 { | |
1684 T* pT = static_cast<T*>(this); | |
1685 pT->SetSel(0, -1); | |
1686 return 0; | |
1687 } | |
1688 | |
1689 LRESULT OnEditUndo(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/,
BOOL& /*bHandled*/) | |
1690 { | |
1691 T* pT = static_cast<T*>(this); | |
1692 pT->Undo(); | |
1693 return 0; | |
1694 } | |
1695 | |
1696 // State (update UI) helpers | |
1697 BOOL CanCut() const | |
1698 { return HasSelection(); } | |
1699 | |
1700 BOOL CanCopy() const | |
1701 { return HasSelection(); } | |
1702 | |
1703 BOOL CanClear() const | |
1704 { return HasSelection(); } | |
1705 | |
1706 BOOL CanSelectAll() const | |
1707 { return HasText(); } | |
1708 | |
1709 BOOL CanFind() const | |
1710 { return HasText(); } | |
1711 | |
1712 BOOL CanRepeat() const | |
1713 { return HasText(); } | |
1714 | |
1715 BOOL CanReplace() const | |
1716 { return HasText(); } | |
1717 | |
1718 BOOL CanClearAll() const | |
1719 { return HasText(); } | |
1720 | |
1721 // Implementation | |
1722 BOOL HasSelection() const | |
1723 { | |
1724 const T* pT = static_cast<const T*>(this); | |
1725 int nMin, nMax; | |
1726 ::SendMessage(pT->m_hWnd, EM_GETSEL, (WPARAM)&nMin, (LPARAM)&nMa
x); | |
1727 return (nMin != nMax); | |
1728 } | |
1729 | |
1730 BOOL HasText() const | |
1731 { | |
1732 const T* pT = static_cast<const T*>(this); | |
1733 return (pT->GetWindowTextLength() > 0); | |
1734 } | |
1735 }; | |
1736 | |
1737 | |
1738 /////////////////////////////////////////////////////////////////////////////// | |
1739 // CScrollBar - client side for a Windows SCROLLBAR control | |
1740 | |
1741 template <class TBase> | |
1742 class CScrollBarT : public TBase | |
1743 { | |
1744 public: | |
1745 // Constructors | |
1746 CScrollBarT(HWND hWnd = NULL) : TBase(hWnd) | |
1747 { } | |
1748 | |
1749 CScrollBarT< TBase >& operator =(HWND hWnd) | |
1750 { | |
1751 m_hWnd = hWnd; | |
1752 return *this; | |
1753 } | |
1754 | |
1755 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
1756 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
1757 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
1758 { | |
1759 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
1760 } | |
1761 | |
1762 // Attributes | |
1763 static LPCTSTR GetWndClassName() | |
1764 { | |
1765 return _T("SCROLLBAR"); | |
1766 } | |
1767 | |
1768 #ifndef _WIN32_WCE | |
1769 int GetScrollPos() const | |
1770 { | |
1771 ATLASSERT(::IsWindow(m_hWnd)); | |
1772 return ::GetScrollPos(m_hWnd, SB_CTL); | |
1773 } | |
1774 #endif // !_WIN32_WCE | |
1775 | |
1776 int SetScrollPos(int nPos, BOOL bRedraw = TRUE) | |
1777 { | |
1778 ATLASSERT(::IsWindow(m_hWnd)); | |
1779 return ::SetScrollPos(m_hWnd, SB_CTL, nPos, bRedraw); | |
1780 } | |
1781 | |
1782 #ifndef _WIN32_WCE | |
1783 void GetScrollRange(LPINT lpMinPos, LPINT lpMaxPos) const | |
1784 { | |
1785 ATLASSERT(::IsWindow(m_hWnd)); | |
1786 ::GetScrollRange(m_hWnd, SB_CTL, lpMinPos, lpMaxPos); | |
1787 } | |
1788 #endif // !_WIN32_WCE | |
1789 | |
1790 void SetScrollRange(int nMinPos, int nMaxPos, BOOL bRedraw = TRUE) | |
1791 { | |
1792 ATLASSERT(::IsWindow(m_hWnd)); | |
1793 ::SetScrollRange(m_hWnd, SB_CTL, nMinPos, nMaxPos, bRedraw); | |
1794 } | |
1795 | |
1796 BOOL GetScrollInfo(LPSCROLLINFO lpScrollInfo) const | |
1797 { | |
1798 ATLASSERT(::IsWindow(m_hWnd)); | |
1799 return ::GetScrollInfo(m_hWnd, SB_CTL, lpScrollInfo); | |
1800 } | |
1801 | |
1802 int SetScrollInfo(LPSCROLLINFO lpScrollInfo, BOOL bRedraw = TRUE) | |
1803 { | |
1804 ATLASSERT(::IsWindow(m_hWnd)); | |
1805 return ::SetScrollInfo(m_hWnd, SB_CTL, lpScrollInfo, bRedraw); | |
1806 } | |
1807 | |
1808 #ifndef _WIN32_WCE | |
1809 int GetScrollLimit() const | |
1810 { | |
1811 int nMin = 0, nMax = 0; | |
1812 ::GetScrollRange(m_hWnd, SB_CTL, &nMin, &nMax); | |
1813 SCROLLINFO info = { 0 }; | |
1814 info.cbSize = sizeof(SCROLLINFO); | |
1815 info.fMask = SIF_PAGE; | |
1816 if(::GetScrollInfo(m_hWnd, SB_CTL, &info)) | |
1817 nMax -= ((info.nPage - 1) > 0) ? (info.nPage - 1) : 0; | |
1818 | |
1819 return nMax; | |
1820 } | |
1821 | |
1822 #if (WINVER >= 0x0500) | |
1823 BOOL GetScrollBarInfo(PSCROLLBARINFO pScrollBarInfo) const | |
1824 { | |
1825 ATLASSERT(::IsWindow(m_hWnd)); | |
1826 #if (_WIN32_WINNT >= 0x0501) | |
1827 return (BOOL)::SendMessage(m_hWnd, SBM_GETSCROLLBARINFO, 0, (LPA
RAM)pScrollBarInfo); | |
1828 #else // !(_WIN32_WINNT >= 0x0501) | |
1829 return ::GetScrollBarInfo(m_hWnd, OBJID_CLIENT, pScrollBarInfo); | |
1830 #endif // !(_WIN32_WINNT >= 0x0501) | |
1831 } | |
1832 #endif // (WINVER >= 0x0500) | |
1833 | |
1834 // Operations | |
1835 void ShowScrollBar(BOOL bShow = TRUE) | |
1836 { | |
1837 ATLASSERT(::IsWindow(m_hWnd)); | |
1838 ::ShowScrollBar(m_hWnd, SB_CTL, bShow); | |
1839 } | |
1840 | |
1841 BOOL EnableScrollBar(UINT nArrowFlags = ESB_ENABLE_BOTH) | |
1842 { | |
1843 ATLASSERT(::IsWindow(m_hWnd)); | |
1844 return ::EnableScrollBar(m_hWnd, SB_CTL, nArrowFlags); | |
1845 } | |
1846 #endif // !_WIN32_WCE | |
1847 }; | |
1848 | |
1849 typedef CScrollBarT<ATL::CWindow> CScrollBar; | |
1850 | |
1851 | |
1852 // --- Windows Common Controls --- | |
1853 | |
1854 /////////////////////////////////////////////////////////////////////////////// | |
1855 // CImageList | |
1856 | |
1857 class CImageList | |
1858 { | |
1859 public: | |
1860 HIMAGELIST m_hImageList; | |
1861 | |
1862 // Constructor | |
1863 CImageList(HIMAGELIST hImageList = NULL) : m_hImageList(hImageList) | |
1864 { } | |
1865 | |
1866 // Operators, etc. | |
1867 CImageList& operator =(HIMAGELIST hImageList) | |
1868 { | |
1869 m_hImageList = hImageList; | |
1870 return *this; | |
1871 } | |
1872 | |
1873 operator HIMAGELIST() const { return m_hImageList; } | |
1874 | |
1875 void Attach(HIMAGELIST hImageList) | |
1876 { | |
1877 ATLASSERT(m_hImageList == NULL); | |
1878 ATLASSERT(hImageList != NULL); | |
1879 m_hImageList = hImageList; | |
1880 } | |
1881 | |
1882 HIMAGELIST Detach() | |
1883 { | |
1884 HIMAGELIST hImageList = m_hImageList; | |
1885 m_hImageList = NULL; | |
1886 return hImageList; | |
1887 } | |
1888 | |
1889 bool IsNull() const { return (m_hImageList == NULL); } | |
1890 | |
1891 // Attributes | |
1892 int GetImageCount() const | |
1893 { | |
1894 ATLASSERT(m_hImageList != NULL); | |
1895 return ImageList_GetImageCount(m_hImageList); | |
1896 } | |
1897 | |
1898 COLORREF GetBkColor() const | |
1899 { | |
1900 ATLASSERT(m_hImageList != NULL); | |
1901 return ImageList_GetBkColor(m_hImageList); | |
1902 } | |
1903 | |
1904 COLORREF SetBkColor(COLORREF cr) | |
1905 { | |
1906 ATLASSERT(m_hImageList != NULL); | |
1907 return ImageList_SetBkColor(m_hImageList, cr); | |
1908 } | |
1909 | |
1910 BOOL GetImageInfo(int nImage, IMAGEINFO* pImageInfo) const | |
1911 { | |
1912 ATLASSERT(m_hImageList != NULL); | |
1913 return ImageList_GetImageInfo(m_hImageList, nImage, pImageInfo); | |
1914 } | |
1915 | |
1916 HICON GetIcon(int nIndex, UINT uFlags = ILD_NORMAL) const | |
1917 { | |
1918 ATLASSERT(m_hImageList != NULL); | |
1919 return ImageList_GetIcon(m_hImageList, nIndex, uFlags); | |
1920 } | |
1921 | |
1922 BOOL GetIconSize(int& cx, int& cy) const | |
1923 { | |
1924 ATLASSERT(m_hImageList != NULL); | |
1925 return ImageList_GetIconSize(m_hImageList, &cx, &cy); | |
1926 } | |
1927 | |
1928 BOOL GetIconSize(SIZE& size) const | |
1929 { | |
1930 ATLASSERT(m_hImageList != NULL); | |
1931 return ImageList_GetIconSize(m_hImageList, (int*)&size.cx, (int*
)&size.cy); | |
1932 } | |
1933 | |
1934 BOOL SetIconSize(int cx, int cy) | |
1935 { | |
1936 ATLASSERT(m_hImageList != NULL); | |
1937 return ImageList_SetIconSize(m_hImageList, cx, cy); | |
1938 } | |
1939 | |
1940 BOOL SetIconSize(SIZE size) | |
1941 { | |
1942 ATLASSERT(m_hImageList != NULL); | |
1943 return ImageList_SetIconSize(m_hImageList, size.cx, size.cy); | |
1944 } | |
1945 | |
1946 BOOL SetImageCount(UINT uNewCount) | |
1947 { | |
1948 ATLASSERT(m_hImageList != NULL); | |
1949 return ImageList_SetImageCount(m_hImageList, uNewCount); | |
1950 } | |
1951 | |
1952 BOOL SetOverlayImage(int nImage, int nOverlay) | |
1953 { | |
1954 ATLASSERT(m_hImageList != NULL); | |
1955 return ImageList_SetOverlayImage(m_hImageList, nImage, nOverlay)
; | |
1956 } | |
1957 | |
1958 // Operations | |
1959 BOOL Create(int cx, int cy, UINT nFlags, int nInitial, int nGrow) | |
1960 { | |
1961 ATLASSERT(m_hImageList == NULL); | |
1962 m_hImageList = ImageList_Create(cx, cy, nFlags, nInitial, nGrow)
; | |
1963 return (m_hImageList != NULL) ? TRUE : FALSE; | |
1964 } | |
1965 | |
1966 BOOL Create(ATL::_U_STRINGorID bitmap, int cx, int nGrow, COLORREF crMas
k) | |
1967 { | |
1968 ATLASSERT(m_hImageList == NULL); | |
1969 m_hImageList = ImageList_LoadBitmap(ModuleHelper::GetResourceIns
tance(), bitmap.m_lpstr, cx, nGrow, crMask); | |
1970 return (m_hImageList != NULL) ? TRUE : FALSE; | |
1971 } | |
1972 | |
1973 BOOL CreateFromImage(ATL::_U_STRINGorID image, int cx, int nGrow, COLORR
EF crMask, UINT uType, UINT uFlags = LR_DEFAULTCOLOR | LR_DEFAULTSIZE) | |
1974 { | |
1975 ATLASSERT(m_hImageList == NULL); | |
1976 m_hImageList = ImageList_LoadImage(ModuleHelper::GetResourceInst
ance(), image.m_lpstr, cx, nGrow, crMask, uType, uFlags); | |
1977 return (m_hImageList != NULL) ? TRUE : FALSE; | |
1978 } | |
1979 | |
1980 BOOL Merge(HIMAGELIST hImageList1, int nImage1, HIMAGELIST hImageList2,
int nImage2, int dx, int dy) | |
1981 { | |
1982 ATLASSERT(m_hImageList == NULL); | |
1983 m_hImageList = ImageList_Merge(hImageList1, nImage1, hImageList2
, nImage2, dx, dy); | |
1984 return (m_hImageList != NULL) ? TRUE : FALSE; | |
1985 } | |
1986 | |
1987 #ifndef _WIN32_WCE | |
1988 #ifdef __IStream_INTERFACE_DEFINED__ | |
1989 BOOL CreateFromStream(LPSTREAM lpStream) | |
1990 { | |
1991 ATLASSERT(m_hImageList == NULL); | |
1992 m_hImageList = ImageList_Read(lpStream); | |
1993 return (m_hImageList != NULL) ? TRUE : FALSE; | |
1994 } | |
1995 #endif // __IStream_INTERFACE_DEFINED__ | |
1996 #endif // !_WIN32_WCE | |
1997 | |
1998 BOOL Destroy() | |
1999 { | |
2000 if (m_hImageList == NULL) | |
2001 return FALSE; | |
2002 BOOL bRet = ImageList_Destroy(m_hImageList); | |
2003 if(bRet) | |
2004 m_hImageList = NULL; | |
2005 return bRet; | |
2006 } | |
2007 | |
2008 int Add(HBITMAP hBitmap, HBITMAP hBitmapMask = NULL) | |
2009 { | |
2010 ATLASSERT(m_hImageList != NULL); | |
2011 return ImageList_Add(m_hImageList, hBitmap, hBitmapMask); | |
2012 } | |
2013 | |
2014 int Add(HBITMAP hBitmap, COLORREF crMask) | |
2015 { | |
2016 ATLASSERT(m_hImageList != NULL); | |
2017 return ImageList_AddMasked(m_hImageList, hBitmap, crMask); | |
2018 } | |
2019 | |
2020 BOOL Remove(int nImage) | |
2021 { | |
2022 ATLASSERT(m_hImageList != NULL); | |
2023 return ImageList_Remove(m_hImageList, nImage); | |
2024 } | |
2025 | |
2026 BOOL RemoveAll() | |
2027 { | |
2028 ATLASSERT(m_hImageList != NULL); | |
2029 return ImageList_RemoveAll(m_hImageList); | |
2030 } | |
2031 | |
2032 BOOL Replace(int nImage, HBITMAP hBitmap, HBITMAP hBitmapMask) | |
2033 { | |
2034 ATLASSERT(m_hImageList != NULL); | |
2035 return ImageList_Replace(m_hImageList, nImage, hBitmap, hBitmapM
ask); | |
2036 } | |
2037 | |
2038 int AddIcon(HICON hIcon) | |
2039 { | |
2040 ATLASSERT(m_hImageList != NULL); | |
2041 return ImageList_AddIcon(m_hImageList, hIcon); | |
2042 } | |
2043 | |
2044 int ReplaceIcon(int nImage, HICON hIcon) | |
2045 { | |
2046 ATLASSERT(m_hImageList != NULL); | |
2047 return ImageList_ReplaceIcon(m_hImageList, nImage, hIcon); | |
2048 } | |
2049 | |
2050 HICON ExtractIcon(int nImage) | |
2051 { | |
2052 ATLASSERT(m_hImageList != NULL); | |
2053 return ImageList_ExtractIcon(NULL, m_hImageList, nImage); | |
2054 } | |
2055 | |
2056 BOOL Draw(HDC hDC, int nImage, int x, int y, UINT nStyle) | |
2057 { | |
2058 ATLASSERT(m_hImageList != NULL); | |
2059 ATLASSERT(hDC != NULL); | |
2060 return ImageList_Draw(m_hImageList, nImage, hDC, x, y, nStyle); | |
2061 } | |
2062 | |
2063 BOOL Draw(HDC hDC, int nImage, POINT pt, UINT nStyle) | |
2064 { | |
2065 ATLASSERT(m_hImageList != NULL); | |
2066 ATLASSERT(hDC != NULL); | |
2067 return ImageList_Draw(m_hImageList, nImage, hDC, pt.x, pt.y, nSt
yle); | |
2068 } | |
2069 | |
2070 BOOL DrawEx(int nImage, HDC hDC, int x, int y, int dx, int dy, COLORREF
rgbBk, COLORREF rgbFg, UINT fStyle) | |
2071 { | |
2072 ATLASSERT(m_hImageList != NULL); | |
2073 ATLASSERT(hDC != NULL); | |
2074 return ImageList_DrawEx(m_hImageList, nImage, hDC, x, y, dx, dy,
rgbBk, rgbFg, fStyle); | |
2075 } | |
2076 | |
2077 BOOL DrawEx(int nImage, HDC hDC, RECT& rect, COLORREF rgbBk, COLORREF rg
bFg, UINT fStyle) | |
2078 { | |
2079 ATLASSERT(m_hImageList != NULL); | |
2080 ATLASSERT(hDC != NULL); | |
2081 return ImageList_DrawEx(m_hImageList, nImage, hDC, rect.left, re
ct.top, rect.right - rect.left, rect.bottom - rect.top, rgbBk, rgbFg, fStyle); | |
2082 } | |
2083 | |
2084 static BOOL DrawIndirect(IMAGELISTDRAWPARAMS* pimldp) | |
2085 { | |
2086 return ImageList_DrawIndirect(pimldp); | |
2087 } | |
2088 | |
2089 BOOL Copy(int nSrc, int nDst, UINT uFlags = ILCF_MOVE) | |
2090 { | |
2091 ATLASSERT(m_hImageList != NULL); | |
2092 return ImageList_Copy(m_hImageList, nDst, m_hImageList, nSrc, uF
lags); | |
2093 } | |
2094 | |
2095 #ifdef __IStream_INTERFACE_DEFINED__ | |
2096 #ifndef _WIN32_WCE | |
2097 static HIMAGELIST Read(LPSTREAM lpStream) | |
2098 { | |
2099 return ImageList_Read(lpStream); | |
2100 } | |
2101 | |
2102 BOOL Write(LPSTREAM lpStream) | |
2103 { | |
2104 ATLASSERT(m_hImageList != NULL); | |
2105 return ImageList_Write(m_hImageList, lpStream); | |
2106 } | |
2107 #endif // !_WIN32_WCE | |
2108 | |
2109 #if (_WIN32_WINNT >= 0x0501) | |
2110 static HRESULT ReadEx(DWORD dwFlags, LPSTREAM lpStream, REFIID riid, PVO
ID* ppv) | |
2111 { | |
2112 return ImageList_ReadEx(dwFlags, lpStream, riid, ppv); | |
2113 } | |
2114 | |
2115 HRESULT WriteEx(DWORD dwFlags, LPSTREAM lpStream) | |
2116 { | |
2117 ATLASSERT(m_hImageList != NULL); | |
2118 return ImageList_WriteEx(m_hImageList, dwFlags, lpStream); | |
2119 } | |
2120 #endif // (_WIN32_WINNT >= 0x0501) | |
2121 #endif // __IStream_INTERFACE_DEFINED__ | |
2122 | |
2123 // Drag operations | |
2124 BOOL BeginDrag(int nImage, POINT ptHotSpot) | |
2125 { | |
2126 ATLASSERT(m_hImageList != NULL); | |
2127 return ImageList_BeginDrag(m_hImageList, nImage, ptHotSpot.x, pt
HotSpot.y); | |
2128 } | |
2129 | |
2130 BOOL BeginDrag(int nImage, int xHotSpot, int yHotSpot) | |
2131 { | |
2132 ATLASSERT(m_hImageList != NULL); | |
2133 return ImageList_BeginDrag(m_hImageList, nImage, xHotSpot, yHotS
pot); | |
2134 } | |
2135 | |
2136 static void EndDrag() | |
2137 { | |
2138 ImageList_EndDrag(); | |
2139 } | |
2140 | |
2141 static BOOL DragMove(POINT pt) | |
2142 { | |
2143 return ImageList_DragMove(pt.x, pt.y); | |
2144 } | |
2145 | |
2146 static BOOL DragMove(int x, int y) | |
2147 { | |
2148 return ImageList_DragMove(x, y); | |
2149 } | |
2150 | |
2151 BOOL SetDragCursorImage(int nDrag, POINT ptHotSpot) | |
2152 { | |
2153 ATLASSERT(m_hImageList != NULL); | |
2154 return ImageList_SetDragCursorImage(m_hImageList, nDrag, ptHotSp
ot.x, ptHotSpot.y); | |
2155 } | |
2156 | |
2157 BOOL SetDragCursorImage(int nDrag, int xHotSpot, int yHotSpot) | |
2158 { | |
2159 ATLASSERT(m_hImageList != NULL); | |
2160 return ImageList_SetDragCursorImage(m_hImageList, nDrag, xHotSpo
t, yHotSpot); | |
2161 } | |
2162 | |
2163 static BOOL DragShowNolock(BOOL bShow = TRUE) | |
2164 { | |
2165 return ImageList_DragShowNolock(bShow); | |
2166 } | |
2167 | |
2168 static CImageList GetDragImage(LPPOINT lpPoint, LPPOINT lpPointHotSpot) | |
2169 { | |
2170 return CImageList(ImageList_GetDragImage(lpPoint, lpPointHotSpot
)); | |
2171 } | |
2172 | |
2173 static BOOL DragEnter(HWND hWnd, POINT point) | |
2174 { | |
2175 return ImageList_DragEnter(hWnd, point.x, point.y); | |
2176 } | |
2177 | |
2178 static BOOL DragEnter(HWND hWnd, int x, int y) | |
2179 { | |
2180 return ImageList_DragEnter(hWnd, x, y); | |
2181 } | |
2182 | |
2183 static BOOL DragLeave(HWND hWnd) | |
2184 { | |
2185 return ImageList_DragLeave(hWnd); | |
2186 } | |
2187 | |
2188 #if (_WIN32_IE >= 0x0400) | |
2189 CImageList Duplicate() const | |
2190 { | |
2191 ATLASSERT(m_hImageList != NULL); | |
2192 return CImageList(ImageList_Duplicate(m_hImageList)); | |
2193 } | |
2194 | |
2195 static CImageList Duplicate(HIMAGELIST hImageList) | |
2196 { | |
2197 ATLASSERT(hImageList != NULL); | |
2198 return CImageList(ImageList_Duplicate(hImageList)); | |
2199 } | |
2200 #endif // (_WIN32_IE >= 0x0400) | |
2201 }; | |
2202 | |
2203 | |
2204 /////////////////////////////////////////////////////////////////////////////// | |
2205 // CToolTipCtrl | |
2206 | |
2207 #ifndef _WIN32_WCE | |
2208 | |
2209 class CToolInfo : public TOOLINFO | |
2210 { | |
2211 public: | |
2212 CToolInfo(UINT nFlags, HWND hWnd, UINT nIDTool = 0, LPRECT lpRect = NULL
, LPTSTR lpstrText = LPSTR_TEXTCALLBACK, LPARAM lUserParam = NULL) | |
2213 { | |
2214 Init(nFlags, hWnd, nIDTool, lpRect, lpstrText, lUserParam); | |
2215 } | |
2216 | |
2217 operator LPTOOLINFO() { return this; } | |
2218 | |
2219 operator LPARAM() { return (LPARAM)this; } | |
2220 | |
2221 void Init(UINT nFlags, HWND hWnd, UINT nIDTool = 0, LPRECT lpRect = NULL
, LPTSTR lpstrText = LPSTR_TEXTCALLBACK, LPARAM lUserParam = NULL) | |
2222 { | |
2223 ATLASSERT(::IsWindow(hWnd)); | |
2224 memset(this, 0, sizeof(TOOLINFO)); | |
2225 cbSize = sizeof(TOOLINFO); | |
2226 uFlags = nFlags; | |
2227 if(nIDTool == 0) | |
2228 { | |
2229 hwnd = ::GetParent(hWnd); | |
2230 uFlags |= TTF_IDISHWND; | |
2231 uId = (UINT_PTR)hWnd; | |
2232 } | |
2233 else | |
2234 { | |
2235 hwnd = hWnd; | |
2236 uId = nIDTool; | |
2237 } | |
2238 if(lpRect != NULL) | |
2239 rect = *lpRect; | |
2240 hinst = ModuleHelper::GetResourceInstance(); | |
2241 lpszText = lpstrText; | |
2242 lParam = lUserParam; | |
2243 } | |
2244 }; | |
2245 | |
2246 template <class TBase> | |
2247 class CToolTipCtrlT : public TBase | |
2248 { | |
2249 public: | |
2250 // Constructors | |
2251 CToolTipCtrlT(HWND hWnd = NULL) : TBase(hWnd) | |
2252 { } | |
2253 | |
2254 CToolTipCtrlT< TBase >& operator =(HWND hWnd) | |
2255 { | |
2256 m_hWnd = hWnd; | |
2257 return *this; | |
2258 } | |
2259 | |
2260 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
2261 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
2262 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
2263 { | |
2264 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
2265 } | |
2266 | |
2267 // Attributes | |
2268 static LPCTSTR GetWndClassName() | |
2269 { | |
2270 return TOOLTIPS_CLASS; | |
2271 } | |
2272 | |
2273 void GetText(LPTOOLINFO lpToolInfo) const | |
2274 { | |
2275 ATLASSERT(::IsWindow(m_hWnd)); | |
2276 ::SendMessage(m_hWnd, TTM_GETTEXT, 0, (LPARAM)&lpToolInfo); | |
2277 } | |
2278 | |
2279 void GetText(LPTSTR lpstrText, HWND hWnd, UINT nIDTool = 0) const | |
2280 { | |
2281 ATLASSERT(::IsWindow(m_hWnd)); | |
2282 ATLASSERT(hWnd != NULL); | |
2283 CToolInfo ti(0, hWnd, nIDTool, NULL, lpstrText); | |
2284 ::SendMessage(m_hWnd, TTM_GETTEXT, 0, ti); | |
2285 } | |
2286 | |
2287 BOOL GetToolInfo(LPTOOLINFO lpToolInfo) const | |
2288 { | |
2289 ATLASSERT(::IsWindow(m_hWnd)); | |
2290 return (BOOL)::SendMessage(m_hWnd, TTM_GETTOOLINFO, 0, (LPARAM)l
pToolInfo); | |
2291 } | |
2292 | |
2293 BOOL GetToolInfo(HWND hWnd, UINT nIDTool, UINT* puFlags, LPRECT lpRect,
LPTSTR lpstrText) const | |
2294 { | |
2295 ATLASSERT(::IsWindow(m_hWnd)); | |
2296 ATLASSERT(hWnd != NULL); | |
2297 ATLASSERT(puFlags != NULL); | |
2298 ATLASSERT(lpRect != NULL); | |
2299 CToolInfo ti(0, hWnd, nIDTool, NULL, lpstrText); | |
2300 BOOL bRet = (BOOL)::SendMessage(m_hWnd, TTM_GETTOOLINFO, 0, ti); | |
2301 if(bRet != FALSE) | |
2302 { | |
2303 *puFlags = ti.uFlags; | |
2304 *lpRect = ti.rect; | |
2305 } | |
2306 return bRet; | |
2307 } | |
2308 | |
2309 void SetToolInfo(LPTOOLINFO lpToolInfo) | |
2310 { | |
2311 ATLASSERT(::IsWindow(m_hWnd)); | |
2312 ::SendMessage(m_hWnd, TTM_SETTOOLINFO, 0, (LPARAM)lpToolInfo); | |
2313 } | |
2314 | |
2315 void SetToolRect(LPTOOLINFO lpToolInfo) | |
2316 { | |
2317 ATLASSERT(::IsWindow(m_hWnd)); | |
2318 ::SendMessage(m_hWnd, TTM_NEWTOOLRECT, 0, (LPARAM)lpToolInfo); | |
2319 } | |
2320 | |
2321 void SetToolRect(HWND hWnd, UINT nIDTool, LPCRECT lpRect) | |
2322 { | |
2323 ATLASSERT(::IsWindow(m_hWnd)); | |
2324 ATLASSERT(hWnd != NULL); | |
2325 ATLASSERT(nIDTool != 0); | |
2326 | |
2327 CToolInfo ti(0, hWnd, nIDTool, (LPRECT)lpRect, NULL); | |
2328 ::SendMessage(m_hWnd, TTM_NEWTOOLRECT, 0, ti); | |
2329 } | |
2330 | |
2331 int GetToolCount() const | |
2332 { | |
2333 ATLASSERT(::IsWindow(m_hWnd)); | |
2334 return (int)::SendMessage(m_hWnd, TTM_GETTOOLCOUNT, 0, 0L); | |
2335 } | |
2336 | |
2337 int GetDelayTime(DWORD dwType) const | |
2338 { | |
2339 ATLASSERT(::IsWindow(m_hWnd)); | |
2340 return (int)::SendMessage(m_hWnd, TTM_GETDELAYTIME, dwType, 0L); | |
2341 } | |
2342 | |
2343 void SetDelayTime(DWORD dwType, int nTime) | |
2344 { | |
2345 ATLASSERT(::IsWindow(m_hWnd)); | |
2346 ::SendMessage(m_hWnd, TTM_SETDELAYTIME, dwType, MAKELPARAM(nTime
, 0)); | |
2347 } | |
2348 | |
2349 void GetMargin(LPRECT lpRect) const | |
2350 { | |
2351 ATLASSERT(::IsWindow(m_hWnd)); | |
2352 ::SendMessage(m_hWnd, TTM_GETMARGIN, 0, (LPARAM)lpRect); | |
2353 } | |
2354 | |
2355 void SetMargin(LPRECT lpRect) | |
2356 { | |
2357 ATLASSERT(::IsWindow(m_hWnd)); | |
2358 ::SendMessage(m_hWnd, TTM_SETMARGIN, 0, (LPARAM)lpRect); | |
2359 } | |
2360 | |
2361 int GetMaxTipWidth() const | |
2362 { | |
2363 ATLASSERT(::IsWindow(m_hWnd)); | |
2364 return (int)::SendMessage(m_hWnd, TTM_GETMAXTIPWIDTH, 0, 0L); | |
2365 } | |
2366 | |
2367 int SetMaxTipWidth(int nWidth) | |
2368 { | |
2369 ATLASSERT(::IsWindow(m_hWnd)); | |
2370 return (int)::SendMessage(m_hWnd, TTM_SETMAXTIPWIDTH, 0, nWidth)
; | |
2371 } | |
2372 | |
2373 COLORREF GetTipBkColor() const | |
2374 { | |
2375 ATLASSERT(::IsWindow(m_hWnd)); | |
2376 return (COLORREF)::SendMessage(m_hWnd, TTM_GETTIPBKCOLOR, 0, 0L)
; | |
2377 } | |
2378 | |
2379 void SetTipBkColor(COLORREF clr) | |
2380 { | |
2381 ATLASSERT(::IsWindow(m_hWnd)); | |
2382 ::SendMessage(m_hWnd, TTM_SETTIPBKCOLOR, (WPARAM)clr, 0L); | |
2383 } | |
2384 | |
2385 COLORREF GetTipTextColor() const | |
2386 { | |
2387 ATLASSERT(::IsWindow(m_hWnd)); | |
2388 return (COLORREF)::SendMessage(m_hWnd, TTM_GETTIPTEXTCOLOR, 0, 0
L); | |
2389 } | |
2390 | |
2391 void SetTipTextColor(COLORREF clr) | |
2392 { | |
2393 ATLASSERT(::IsWindow(m_hWnd)); | |
2394 ::SendMessage(m_hWnd, TTM_SETTIPTEXTCOLOR, (WPARAM)clr, 0L); | |
2395 } | |
2396 | |
2397 BOOL GetCurrentTool(LPTOOLINFO lpToolInfo) const | |
2398 { | |
2399 ATLASSERT(::IsWindow(m_hWnd)); | |
2400 return (BOOL)::SendMessage(m_hWnd, TTM_GETCURRENTTOOL, 0, (LPARA
M)lpToolInfo); | |
2401 } | |
2402 | |
2403 #if (_WIN32_IE >= 0x0500) | |
2404 SIZE GetBubbleSize(LPTOOLINFO lpToolInfo) const | |
2405 { | |
2406 ATLASSERT(::IsWindow(m_hWnd)); | |
2407 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, TTM_GETBUBBLESIZE, 0,
(LPARAM)lpToolInfo); | |
2408 SIZE size = { GET_X_LPARAM(dwRet), GET_Y_LPARAM(dwRet) }; | |
2409 return size; | |
2410 } | |
2411 | |
2412 BOOL SetTitle(UINT uIcon, LPCTSTR lpstrTitle) | |
2413 { | |
2414 ATLASSERT(::IsWindow(m_hWnd)); | |
2415 return (BOOL)::SendMessage(m_hWnd, TTM_SETTITLE, uIcon, (LPARAM)
lpstrTitle); | |
2416 } | |
2417 #endif // (_WIN32_IE >= 0x0500) | |
2418 | |
2419 #if (_WIN32_WINNT >= 0x0501) | |
2420 void GetTitle(PTTGETTITLE pTTGetTitle) const | |
2421 { | |
2422 ATLASSERT(::IsWindow(m_hWnd)); | |
2423 ::SendMessage(m_hWnd, TTM_GETTITLE, 0, (LPARAM)pTTGetTitle); | |
2424 } | |
2425 | |
2426 void SetWindowTheme(LPCWSTR lpstrTheme) | |
2427 { | |
2428 ATLASSERT(::IsWindow(m_hWnd)); | |
2429 ::SendMessage(m_hWnd, TTM_SETWINDOWTHEME, 0, (LPARAM)lpstrTheme)
; | |
2430 } | |
2431 #endif // (_WIN32_WINNT >= 0x0501) | |
2432 | |
2433 // Operations | |
2434 void Activate(BOOL bActivate) | |
2435 { | |
2436 ATLASSERT(::IsWindow(m_hWnd)); | |
2437 ::SendMessage(m_hWnd, TTM_ACTIVATE, bActivate, 0L); | |
2438 } | |
2439 | |
2440 BOOL AddTool(LPTOOLINFO lpToolInfo) | |
2441 { | |
2442 ATLASSERT(::IsWindow(m_hWnd)); | |
2443 return (BOOL)::SendMessage(m_hWnd, TTM_ADDTOOL, 0, (LPARAM)lpToo
lInfo); | |
2444 } | |
2445 | |
2446 BOOL AddTool(HWND hWnd, ATL::_U_STRINGorID text = LPSTR_TEXTCALLBACK, LP
CRECT lpRectTool = NULL, UINT nIDTool = 0) | |
2447 { | |
2448 ATLASSERT(::IsWindow(m_hWnd)); | |
2449 ATLASSERT(hWnd != NULL); | |
2450 // the toolrect and toolid must both be zero or both valid | |
2451 ATLASSERT((lpRectTool != NULL && nIDTool != 0) || (lpRectTool ==
NULL && nIDTool == 0)); | |
2452 | |
2453 CToolInfo ti(0, hWnd, nIDTool, (LPRECT)lpRectTool, (LPTSTR)text.
m_lpstr); | |
2454 return (BOOL)::SendMessage(m_hWnd, TTM_ADDTOOL, 0, ti); | |
2455 } | |
2456 | |
2457 void DelTool(LPTOOLINFO lpToolInfo) | |
2458 { | |
2459 ATLASSERT(::IsWindow(m_hWnd)); | |
2460 ::SendMessage(m_hWnd, TTM_DELTOOL, 0, (LPARAM)lpToolInfo); | |
2461 } | |
2462 | |
2463 void DelTool(HWND hWnd, UINT nIDTool = 0) | |
2464 { | |
2465 ATLASSERT(::IsWindow(m_hWnd)); | |
2466 ATLASSERT(hWnd != NULL); | |
2467 | |
2468 CToolInfo ti(0, hWnd, nIDTool, NULL, NULL); | |
2469 ::SendMessage(m_hWnd, TTM_DELTOOL, 0, ti); | |
2470 } | |
2471 | |
2472 BOOL HitTest(LPTTHITTESTINFO lpHitTestInfo) const | |
2473 { | |
2474 ATLASSERT(::IsWindow(m_hWnd)); | |
2475 return (BOOL)::SendMessage(m_hWnd, TTM_HITTEST, 0, (LPARAM)lpHit
TestInfo); | |
2476 } | |
2477 | |
2478 BOOL HitTest(HWND hWnd, POINT pt, LPTOOLINFO lpToolInfo) const | |
2479 { | |
2480 ATLASSERT(::IsWindow(m_hWnd)); | |
2481 ATLASSERT(hWnd != NULL); | |
2482 ATLASSERT(lpToolInfo != NULL); | |
2483 | |
2484 TTHITTESTINFO hti = { 0 }; | |
2485 hti.ti.cbSize = sizeof(TOOLINFO); | |
2486 hti.hwnd = hWnd; | |
2487 hti.pt.x = pt.x; | |
2488 hti.pt.y = pt.y; | |
2489 if((BOOL)::SendMessage(m_hWnd, TTM_HITTEST, 0, (LPARAM)&hti) !=
FALSE) | |
2490 { | |
2491 *lpToolInfo = hti.ti; | |
2492 return TRUE; | |
2493 } | |
2494 return FALSE; | |
2495 } | |
2496 | |
2497 void RelayEvent(LPMSG lpMsg) | |
2498 { | |
2499 ATLASSERT(::IsWindow(m_hWnd)); | |
2500 ::SendMessage(m_hWnd, TTM_RELAYEVENT, 0, (LPARAM)lpMsg); | |
2501 } | |
2502 | |
2503 void UpdateTipText(LPTOOLINFO lpToolInfo) | |
2504 { | |
2505 ATLASSERT(::IsWindow(m_hWnd)); | |
2506 ::SendMessage(m_hWnd, TTM_UPDATETIPTEXT, 0, (LPARAM)lpToolInfo); | |
2507 } | |
2508 | |
2509 void UpdateTipText(ATL::_U_STRINGorID text, HWND hWnd, UINT nIDTool = 0) | |
2510 { | |
2511 ATLASSERT(::IsWindow(m_hWnd)); | |
2512 ATLASSERT(hWnd != NULL); | |
2513 | |
2514 CToolInfo ti(0, hWnd, nIDTool, NULL, (LPTSTR)text.m_lpstr); | |
2515 ::SendMessage(m_hWnd, TTM_UPDATETIPTEXT, 0, ti); | |
2516 } | |
2517 | |
2518 BOOL EnumTools(UINT nTool, LPTOOLINFO lpToolInfo) const | |
2519 { | |
2520 ATLASSERT(::IsWindow(m_hWnd)); | |
2521 return (BOOL)::SendMessage(m_hWnd, TTM_ENUMTOOLS, nTool, (LPARAM
)lpToolInfo); | |
2522 } | |
2523 | |
2524 void Pop() | |
2525 { | |
2526 ATLASSERT(::IsWindow(m_hWnd)); | |
2527 ::SendMessage(m_hWnd, TTM_POP, 0, 0L); | |
2528 } | |
2529 | |
2530 void TrackActivate(LPTOOLINFO lpToolInfo, BOOL bActivate) | |
2531 { | |
2532 ATLASSERT(::IsWindow(m_hWnd)); | |
2533 ::SendMessage(m_hWnd, TTM_TRACKACTIVATE, bActivate, (LPARAM)lpTo
olInfo); | |
2534 } | |
2535 | |
2536 void TrackPosition(int xPos, int yPos) | |
2537 { | |
2538 ATLASSERT(::IsWindow(m_hWnd)); | |
2539 ::SendMessage(m_hWnd, TTM_TRACKPOSITION, 0, MAKELPARAM(xPos, yPo
s)); | |
2540 } | |
2541 | |
2542 #if (_WIN32_IE >= 0x0400) | |
2543 void Update() | |
2544 { | |
2545 ATLASSERT(::IsWindow(m_hWnd)); | |
2546 ::SendMessage(m_hWnd, TTM_UPDATE, 0, 0L); | |
2547 } | |
2548 #endif // (_WIN32_IE >= 0x0400) | |
2549 | |
2550 #if (_WIN32_IE >= 0x0500) | |
2551 BOOL AdjustRect(LPRECT lpRect, BOOL bLarger /*= TRUE*/) | |
2552 { | |
2553 ATLASSERT(::IsWindow(m_hWnd)); | |
2554 return (BOOL)::SendMessage(m_hWnd, TTM_ADJUSTRECT, bLarger, (LPA
RAM)lpRect); | |
2555 } | |
2556 #endif // (_WIN32_IE >= 0x0500) | |
2557 | |
2558 #if (_WIN32_WINNT >= 0x0501) | |
2559 void Popup() | |
2560 { | |
2561 ATLASSERT(::IsWindow(m_hWnd)); | |
2562 ::SendMessage(m_hWnd, TTM_POPUP, 0, 0L); | |
2563 } | |
2564 #endif // (_WIN32_WINNT >= 0x0501) | |
2565 }; | |
2566 | |
2567 typedef CToolTipCtrlT<ATL::CWindow> CToolTipCtrl; | |
2568 | |
2569 #endif // !_WIN32_WCE | |
2570 | |
2571 | |
2572 /////////////////////////////////////////////////////////////////////////////// | |
2573 // CHeaderCtrl | |
2574 | |
2575 template <class TBase> | |
2576 class CHeaderCtrlT : public TBase | |
2577 { | |
2578 public: | |
2579 // Constructors | |
2580 CHeaderCtrlT(HWND hWnd = NULL) : TBase(hWnd) | |
2581 { } | |
2582 | |
2583 CHeaderCtrlT< TBase >& operator =(HWND hWnd) | |
2584 { | |
2585 m_hWnd = hWnd; | |
2586 return *this; | |
2587 } | |
2588 | |
2589 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
2590 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
2591 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
2592 { | |
2593 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
2594 } | |
2595 | |
2596 // Attributes | |
2597 static LPCTSTR GetWndClassName() | |
2598 { | |
2599 return WC_HEADER; | |
2600 } | |
2601 | |
2602 int GetItemCount() const | |
2603 { | |
2604 ATLASSERT(::IsWindow(m_hWnd)); | |
2605 return (int)::SendMessage(m_hWnd, HDM_GETITEMCOUNT, 0, 0L); | |
2606 } | |
2607 | |
2608 BOOL GetItem(int nIndex, LPHDITEM pHeaderItem) const | |
2609 { | |
2610 ATLASSERT(::IsWindow(m_hWnd)); | |
2611 return (BOOL)::SendMessage(m_hWnd, HDM_GETITEM, nIndex, (LPARAM)
pHeaderItem); | |
2612 } | |
2613 | |
2614 BOOL SetItem(int nIndex, LPHDITEM pHeaderItem) | |
2615 { | |
2616 ATLASSERT(::IsWindow(m_hWnd)); | |
2617 return (BOOL)::SendMessage(m_hWnd, HDM_SETITEM, nIndex, (LPARAM)
pHeaderItem); | |
2618 } | |
2619 | |
2620 CImageList GetImageList() const | |
2621 { | |
2622 ATLASSERT(::IsWindow(m_hWnd)); | |
2623 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, HDM_GETIMAGE
LIST, 0, 0L)); | |
2624 } | |
2625 | |
2626 CImageList SetImageList(HIMAGELIST hImageList) | |
2627 { | |
2628 ATLASSERT(::IsWindow(m_hWnd)); | |
2629 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, HDM_SETIMAGE
LIST, 0, (LPARAM)hImageList)); | |
2630 } | |
2631 | |
2632 BOOL GetOrderArray(int nSize, int* lpnArray) const | |
2633 { | |
2634 ATLASSERT(::IsWindow(m_hWnd)); | |
2635 return (BOOL)::SendMessage(m_hWnd, HDM_GETORDERARRAY, nSize, (LP
ARAM)lpnArray); | |
2636 } | |
2637 | |
2638 BOOL SetOrderArray(int nSize, int* lpnArray) | |
2639 { | |
2640 ATLASSERT(::IsWindow(m_hWnd)); | |
2641 return (BOOL)::SendMessage(m_hWnd, HDM_SETORDERARRAY, nSize, (LP
ARAM)lpnArray); | |
2642 } | |
2643 | |
2644 BOOL GetItemRect(int nIndex, LPRECT lpItemRect) const | |
2645 { | |
2646 ATLASSERT(::IsWindow(m_hWnd)); | |
2647 return (BOOL)::SendMessage(m_hWnd, HDM_GETITEMRECT, nIndex, (LPA
RAM)lpItemRect); | |
2648 } | |
2649 | |
2650 int SetHotDivider(BOOL bPos, DWORD dwInputValue) | |
2651 { | |
2652 ATLASSERT(::IsWindow(m_hWnd)); | |
2653 return (int)::SendMessage(m_hWnd, HDM_SETHOTDIVIDER, bPos, dwInp
utValue); | |
2654 } | |
2655 | |
2656 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
2657 BOOL GetUnicodeFormat() const | |
2658 { | |
2659 ATLASSERT(::IsWindow(m_hWnd)); | |
2660 return (BOOL)::SendMessage(m_hWnd, HDM_GETUNICODEFORMAT, 0, 0L); | |
2661 } | |
2662 | |
2663 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE) | |
2664 { | |
2665 ATLASSERT(::IsWindow(m_hWnd)); | |
2666 return (BOOL)::SendMessage(m_hWnd, HDM_SETUNICODEFORMAT, bUnicod
e, 0L); | |
2667 } | |
2668 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
2669 | |
2670 #if (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE) | |
2671 int GetBitmapMargin() const | |
2672 { | |
2673 ATLASSERT(::IsWindow(m_hWnd)); | |
2674 return (int)::SendMessage(m_hWnd, HDM_GETBITMAPMARGIN, 0, 0L); | |
2675 } | |
2676 | |
2677 int SetBitmapMargin(int nWidth) | |
2678 { | |
2679 ATLASSERT(::IsWindow(m_hWnd)); | |
2680 return (int)::SendMessage(m_hWnd, HDM_SETBITMAPMARGIN, nWidth, 0
L); | |
2681 } | |
2682 | |
2683 int SetFilterChangeTimeout(DWORD dwTimeOut) | |
2684 { | |
2685 ATLASSERT(::IsWindow(m_hWnd)); | |
2686 return (int)::SendMessage(m_hWnd, HDM_SETFILTERCHANGETIMEOUT, 0,
dwTimeOut); | |
2687 } | |
2688 #endif // (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE) | |
2689 | |
2690 #if (_WIN32_WINNT >= 0x0600) | |
2691 BOOL GetItemDropDownRect(int nIndex, LPRECT lpRect) const | |
2692 { | |
2693 ATLASSERT(::IsWindow(m_hWnd)); | |
2694 return (BOOL)::SendMessage(m_hWnd, HDM_GETITEMDROPDOWNRECT, nInd
ex, (LPARAM)lpRect); | |
2695 } | |
2696 | |
2697 BOOL GetOverflowRect(LPRECT lpRect) const | |
2698 { | |
2699 ATLASSERT(::IsWindow(m_hWnd)); | |
2700 return (BOOL)::SendMessage(m_hWnd, HDM_GETOVERFLOWRECT, 0, (LPAR
AM)lpRect); | |
2701 } | |
2702 | |
2703 int GetFocusedItem() const | |
2704 { | |
2705 ATLASSERT(::IsWindow(m_hWnd)); | |
2706 return (int)::SendMessage(m_hWnd, HDM_GETFOCUSEDITEM, 0, 0L); | |
2707 } | |
2708 | |
2709 BOOL SetFocusedItem(int nIndex) | |
2710 { | |
2711 ATLASSERT(::IsWindow(m_hWnd)); | |
2712 return (BOOL)::SendMessage(m_hWnd, HDM_SETFOCUSEDITEM, 0, nIndex
); | |
2713 } | |
2714 #endif // (_WIN32_WINNT >= 0x0600) | |
2715 | |
2716 // Operations | |
2717 int InsertItem(int nIndex, LPHDITEM phdi) | |
2718 { | |
2719 ATLASSERT(::IsWindow(m_hWnd)); | |
2720 return (int)::SendMessage(m_hWnd, HDM_INSERTITEM, nIndex, (LPARA
M)phdi); | |
2721 } | |
2722 | |
2723 int AddItem(LPHDITEM phdi) | |
2724 { | |
2725 return InsertItem(GetItemCount(), phdi); | |
2726 } | |
2727 | |
2728 BOOL DeleteItem(int nIndex) | |
2729 { | |
2730 ATLASSERT(::IsWindow(m_hWnd)); | |
2731 return (BOOL)::SendMessage(m_hWnd, HDM_DELETEITEM, nIndex, 0L); | |
2732 } | |
2733 | |
2734 BOOL Layout(HD_LAYOUT* pHeaderLayout) | |
2735 { | |
2736 ATLASSERT(::IsWindow(m_hWnd)); | |
2737 return (BOOL)::SendMessage(m_hWnd, HDM_LAYOUT, 0, (LPARAM)pHeade
rLayout); | |
2738 } | |
2739 | |
2740 int HitTest(LPHDHITTESTINFO lpHitTestInfo) const | |
2741 { | |
2742 ATLASSERT(::IsWindow(m_hWnd)); | |
2743 return (int)::SendMessage(m_hWnd, HDM_HITTEST, 0, (LPARAM)lpHitT
estInfo); | |
2744 } | |
2745 | |
2746 int OrderToIndex(int nOrder) | |
2747 { | |
2748 ATLASSERT(::IsWindow(m_hWnd)); | |
2749 return (int)::SendMessage(m_hWnd, HDM_ORDERTOINDEX, nOrder, 0L); | |
2750 } | |
2751 | |
2752 CImageList CreateDragImage(int nIndex) | |
2753 { | |
2754 ATLASSERT(::IsWindow(m_hWnd)); | |
2755 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, HDM_CREATEDR
AGIMAGE, nIndex, 0L)); | |
2756 } | |
2757 | |
2758 #if (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE) | |
2759 int EditFilter(int nColumn, BOOL bDiscardChanges) | |
2760 { | |
2761 ATLASSERT(::IsWindow(m_hWnd)); | |
2762 return (int)::SendMessage(m_hWnd, HDM_EDITFILTER, nColumn, MAKEL
PARAM(bDiscardChanges, 0)); | |
2763 } | |
2764 | |
2765 int ClearFilter(int nColumn) | |
2766 { | |
2767 ATLASSERT(::IsWindow(m_hWnd)); | |
2768 return (int)::SendMessage(m_hWnd, HDM_CLEARFILTER, nColumn, 0L); | |
2769 } | |
2770 | |
2771 int ClearAllFilters() | |
2772 { | |
2773 ATLASSERT(::IsWindow(m_hWnd)); | |
2774 return (int)::SendMessage(m_hWnd, HDM_CLEARFILTER, (WPARAM)-1, 0
L); | |
2775 } | |
2776 #endif // (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE) | |
2777 }; | |
2778 | |
2779 typedef CHeaderCtrlT<ATL::CWindow> CHeaderCtrl; | |
2780 | |
2781 | |
2782 /////////////////////////////////////////////////////////////////////////////// | |
2783 // CListViewCtrl | |
2784 | |
2785 template <class TBase> | |
2786 class CListViewCtrlT : public TBase | |
2787 { | |
2788 public: | |
2789 // Constructors | |
2790 CListViewCtrlT(HWND hWnd = NULL) : TBase(hWnd) | |
2791 { } | |
2792 | |
2793 CListViewCtrlT< TBase >& operator =(HWND hWnd) | |
2794 { | |
2795 m_hWnd = hWnd; | |
2796 return *this; | |
2797 } | |
2798 | |
2799 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
2800 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
2801 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
2802 { | |
2803 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
2804 } | |
2805 | |
2806 // Attributes | |
2807 static LPCTSTR GetWndClassName() | |
2808 { | |
2809 return WC_LISTVIEW; | |
2810 } | |
2811 | |
2812 COLORREF GetBkColor() const | |
2813 { | |
2814 ATLASSERT(::IsWindow(m_hWnd)); | |
2815 return (COLORREF)::SendMessage(m_hWnd, LVM_GETBKCOLOR, 0, 0L); | |
2816 } | |
2817 | |
2818 BOOL SetBkColor(COLORREF cr) | |
2819 { | |
2820 ATLASSERT(::IsWindow(m_hWnd)); | |
2821 return (BOOL)::SendMessage(m_hWnd, LVM_SETBKCOLOR, 0, cr); | |
2822 } | |
2823 | |
2824 CImageList GetImageList(int nImageListType) const | |
2825 { | |
2826 ATLASSERT(::IsWindow(m_hWnd)); | |
2827 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, LVM_GETIMAGE
LIST, nImageListType, 0L)); | |
2828 } | |
2829 | |
2830 CImageList SetImageList(HIMAGELIST hImageList, int nImageList) | |
2831 { | |
2832 ATLASSERT(::IsWindow(m_hWnd)); | |
2833 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, LVM_SETIMAGE
LIST, nImageList, (LPARAM)hImageList)); | |
2834 } | |
2835 | |
2836 int GetItemCount() const | |
2837 { | |
2838 ATLASSERT(::IsWindow(m_hWnd)); | |
2839 return (int)::SendMessage(m_hWnd, LVM_GETITEMCOUNT, 0, 0L); | |
2840 } | |
2841 | |
2842 BOOL SetItemCount(int nItems) | |
2843 { | |
2844 ATLASSERT(::IsWindow(m_hWnd)); | |
2845 return (BOOL)::SendMessage(m_hWnd, LVM_SETITEMCOUNT, nItems, 0L)
; | |
2846 } | |
2847 | |
2848 BOOL GetItem(LPLVITEM pItem) const | |
2849 { | |
2850 ATLASSERT(::IsWindow(m_hWnd)); | |
2851 return (BOOL)::SendMessage(m_hWnd, LVM_GETITEM, 0, (LPARAM)pItem
); | |
2852 } | |
2853 | |
2854 BOOL SetItem(const LVITEM* pItem) | |
2855 { | |
2856 ATLASSERT(::IsWindow(m_hWnd)); | |
2857 return (BOOL)::SendMessage(m_hWnd, LVM_SETITEM, 0, (LPARAM)pItem
); | |
2858 } | |
2859 | |
2860 BOOL SetItem(int nItem, int nSubItem, UINT nMask, LPCTSTR lpszItem, | |
2861 int nImage, UINT nState, UINT nStateMask, LPARAM lParam) | |
2862 { | |
2863 ATLASSERT(::IsWindow(m_hWnd)); | |
2864 LVITEM lvi = { 0 }; | |
2865 lvi.mask = nMask; | |
2866 lvi.iItem = nItem; | |
2867 lvi.iSubItem = nSubItem; | |
2868 lvi.stateMask = nStateMask; | |
2869 lvi.state = nState; | |
2870 lvi.pszText = (LPTSTR) lpszItem; | |
2871 lvi.iImage = nImage; | |
2872 lvi.lParam = lParam; | |
2873 return (BOOL)::SendMessage(m_hWnd, LVM_SETITEM, 0, (LPARAM)&lvi)
; | |
2874 } | |
2875 | |
2876 UINT GetItemState(int nItem, UINT nMask) const | |
2877 { | |
2878 ATLASSERT(::IsWindow(m_hWnd)); | |
2879 return (UINT)::SendMessage(m_hWnd, LVM_GETITEMSTATE, nItem, nMas
k); | |
2880 } | |
2881 | |
2882 BOOL SetItemState(int nItem, UINT nState, UINT nStateMask) | |
2883 { | |
2884 ATLASSERT(::IsWindow(m_hWnd)); | |
2885 LVITEM lvi = { 0 }; | |
2886 lvi.state = nState; | |
2887 lvi.stateMask = nStateMask; | |
2888 return (BOOL)::SendMessage(m_hWnd, LVM_SETITEMSTATE, nItem, (LPA
RAM)&lvi); | |
2889 } | |
2890 | |
2891 BOOL SetItemState(int nItem, LPLVITEM pItem) | |
2892 { | |
2893 ATLASSERT(::IsWindow(m_hWnd)); | |
2894 return (BOOL)::SendMessage(m_hWnd, LVM_SETITEMSTATE, nItem, (LPA
RAM)pItem); | |
2895 } | |
2896 | |
2897 #ifndef _ATL_NO_COM | |
2898 BOOL GetItemText(int nItem, int nSubItem, BSTR& bstrText) const | |
2899 { | |
2900 USES_CONVERSION; | |
2901 ATLASSERT(::IsWindow(m_hWnd)); | |
2902 ATLASSERT(bstrText == NULL); | |
2903 LVITEM lvi = { 0 }; | |
2904 lvi.iSubItem = nSubItem; | |
2905 | |
2906 LPTSTR lpstrText = NULL; | |
2907 int nRes = 0; | |
2908 for(int nLen = 256; ; nLen *= 2) | |
2909 { | |
2910 ATLTRY(lpstrText = new TCHAR[nLen]); | |
2911 if(lpstrText == NULL) | |
2912 break; | |
2913 lpstrText[0] = NULL; | |
2914 lvi.cchTextMax = nLen; | |
2915 lvi.pszText = lpstrText; | |
2916 nRes = (int)::SendMessage(m_hWnd, LVM_GETITEMTEXT, (WPA
RAM)nItem, (LPARAM)&lvi); | |
2917 if(nRes < nLen - 1) | |
2918 break; | |
2919 delete [] lpstrText; | |
2920 lpstrText = NULL; | |
2921 } | |
2922 | |
2923 if(lpstrText != NULL) | |
2924 { | |
2925 if(nRes != 0) | |
2926 bstrText = ::SysAllocString(T2OLE(lpstrText)); | |
2927 delete [] lpstrText; | |
2928 } | |
2929 | |
2930 return (bstrText != NULL) ? TRUE : FALSE; | |
2931 } | |
2932 #endif // !_ATL_NO_COM | |
2933 | |
2934 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) | |
2935 int GetItemText(int nItem, int nSubItem, _CSTRING_NS::CString& strText)
const | |
2936 { | |
2937 ATLASSERT(::IsWindow(m_hWnd)); | |
2938 LVITEM lvi = { 0 }; | |
2939 lvi.iSubItem = nSubItem; | |
2940 | |
2941 strText.Empty(); | |
2942 int nRes = 0; | |
2943 for(int nLen = 256; ; nLen *= 2) | |
2944 { | |
2945 lvi.cchTextMax = nLen; | |
2946 lvi.pszText = strText.GetBufferSetLength(nLen); | |
2947 if(lvi.pszText == NULL) | |
2948 { | |
2949 nRes = 0; | |
2950 break; | |
2951 } | |
2952 nRes = (int)::SendMessage(m_hWnd, LVM_GETITEMTEXT, (WPA
RAM)nItem, (LPARAM)&lvi); | |
2953 if(nRes < nLen - 1) | |
2954 break; | |
2955 } | |
2956 strText.ReleaseBuffer(); | |
2957 return nRes; | |
2958 } | |
2959 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) | |
2960 | |
2961 int GetItemText(int nItem, int nSubItem, LPTSTR lpszText, int nLen) cons
t | |
2962 { | |
2963 ATLASSERT(::IsWindow(m_hWnd)); | |
2964 LVITEM lvi = { 0 }; | |
2965 lvi.iSubItem = nSubItem; | |
2966 lvi.cchTextMax = nLen; | |
2967 lvi.pszText = lpszText; | |
2968 return (int)::SendMessage(m_hWnd, LVM_GETITEMTEXT, (WPARAM)nItem
, (LPARAM)&lvi); | |
2969 } | |
2970 | |
2971 BOOL SetItemText(int nItem, int nSubItem, LPCTSTR lpszText) | |
2972 { | |
2973 ATLASSERT(::IsWindow(m_hWnd)); | |
2974 return SetItem(nItem, nSubItem, LVIF_TEXT, lpszText, 0, 0, 0, 0)
; | |
2975 } | |
2976 | |
2977 DWORD_PTR GetItemData(int nItem) const | |
2978 { | |
2979 ATLASSERT(::IsWindow(m_hWnd)); | |
2980 LVITEM lvi = { 0 }; | |
2981 lvi.iItem = nItem; | |
2982 lvi.mask = LVIF_PARAM; | |
2983 BOOL bRet = (BOOL)::SendMessage(m_hWnd, LVM_GETITEM, 0, (LPARAM)
&lvi); | |
2984 return (DWORD_PTR)(bRet ? lvi.lParam : NULL); | |
2985 } | |
2986 | |
2987 BOOL SetItemData(int nItem, DWORD_PTR dwData) | |
2988 { | |
2989 ATLASSERT(::IsWindow(m_hWnd)); | |
2990 return SetItem(nItem, 0, LVIF_PARAM, NULL, 0, 0, 0, (LPARAM)dwDa
ta); | |
2991 } | |
2992 | |
2993 UINT GetCallbackMask() const | |
2994 { | |
2995 ATLASSERT(::IsWindow(m_hWnd)); | |
2996 return (UINT)::SendMessage(m_hWnd, LVM_GETCALLBACKMASK, 0, 0L); | |
2997 } | |
2998 | |
2999 BOOL SetCallbackMask(UINT nMask) | |
3000 { | |
3001 ATLASSERT(::IsWindow(m_hWnd)); | |
3002 return (BOOL)::SendMessage(m_hWnd, LVM_SETCALLBACKMASK, nMask, 0
L); | |
3003 } | |
3004 | |
3005 BOOL GetItemPosition(int nItem, LPPOINT lpPoint) const | |
3006 { | |
3007 ATLASSERT(::IsWindow(m_hWnd)); | |
3008 return (BOOL)::SendMessage(m_hWnd, LVM_GETITEMPOSITION, nItem, (
LPARAM)lpPoint); | |
3009 } | |
3010 | |
3011 BOOL SetItemPosition(int nItem, POINT pt) | |
3012 { | |
3013 ATLASSERT(::IsWindow(m_hWnd)); | |
3014 ATLASSERT(((GetStyle() & LVS_TYPEMASK) == LVS_ICON) || ((GetStyl
e() & LVS_TYPEMASK) == LVS_SMALLICON)); | |
3015 return (BOOL)::SendMessage(m_hWnd, LVM_SETITEMPOSITION32, nItem,
(LPARAM)&pt); | |
3016 } | |
3017 | |
3018 BOOL SetItemPosition(int nItem, int x, int y) | |
3019 { | |
3020 ATLASSERT(::IsWindow(m_hWnd)); | |
3021 ATLASSERT(((GetStyle() & LVS_TYPEMASK) == LVS_ICON) || ((GetStyl
e() & LVS_TYPEMASK) == LVS_SMALLICON)); | |
3022 POINT pt = { x, y }; | |
3023 return (BOOL)::SendMessage(m_hWnd, LVM_SETITEMPOSITION32, nItem,
(LPARAM)&pt); | |
3024 } | |
3025 | |
3026 int GetStringWidth(LPCTSTR lpsz) const | |
3027 { | |
3028 ATLASSERT(::IsWindow(m_hWnd)); | |
3029 return (int)::SendMessage(m_hWnd, LVM_GETSTRINGWIDTH, 0, (LPARAM
)lpsz); | |
3030 } | |
3031 | |
3032 CEdit GetEditControl() const | |
3033 { | |
3034 ATLASSERT(::IsWindow(m_hWnd)); | |
3035 return CEdit((HWND)::SendMessage(m_hWnd, LVM_GETEDITCONTROL, 0,
0L)); | |
3036 } | |
3037 | |
3038 BOOL GetColumn(int nCol, LVCOLUMN* pColumn) const | |
3039 { | |
3040 ATLASSERT(::IsWindow(m_hWnd)); | |
3041 return (BOOL)::SendMessage(m_hWnd, LVM_GETCOLUMN, nCol, (LPARAM)
pColumn); | |
3042 } | |
3043 | |
3044 BOOL SetColumn(int nCol, const LVCOLUMN* pColumn) | |
3045 { | |
3046 ATLASSERT(::IsWindow(m_hWnd)); | |
3047 return (BOOL)::SendMessage(m_hWnd, LVM_SETCOLUMN, nCol, (LPARAM)
pColumn); | |
3048 } | |
3049 | |
3050 int GetColumnWidth(int nCol) const | |
3051 { | |
3052 ATLASSERT(::IsWindow(m_hWnd)); | |
3053 return (int)::SendMessage(m_hWnd, LVM_GETCOLUMNWIDTH, nCol, 0L); | |
3054 } | |
3055 | |
3056 BOOL SetColumnWidth(int nCol, int cx) | |
3057 { | |
3058 ATLASSERT(::IsWindow(m_hWnd)); | |
3059 return (BOOL)::SendMessage(m_hWnd, LVM_SETCOLUMNWIDTH, nCol, MAK
ELPARAM(cx, 0)); | |
3060 } | |
3061 | |
3062 BOOL GetViewRect(LPRECT lpRect) const | |
3063 { | |
3064 ATLASSERT(::IsWindow(m_hWnd)); | |
3065 return (BOOL)::SendMessage(m_hWnd, LVM_GETVIEWRECT, 0, (LPARAM)l
pRect); | |
3066 } | |
3067 | |
3068 COLORREF GetTextColor() const | |
3069 { | |
3070 ATLASSERT(::IsWindow(m_hWnd)); | |
3071 return (COLORREF)::SendMessage(m_hWnd, LVM_GETTEXTCOLOR, 0, 0L); | |
3072 } | |
3073 | |
3074 BOOL SetTextColor(COLORREF cr) | |
3075 { | |
3076 ATLASSERT(::IsWindow(m_hWnd)); | |
3077 return (BOOL)::SendMessage(m_hWnd, LVM_SETTEXTCOLOR, 0, cr); | |
3078 } | |
3079 | |
3080 COLORREF GetTextBkColor() const | |
3081 { | |
3082 ATLASSERT(::IsWindow(m_hWnd)); | |
3083 return (COLORREF)::SendMessage(m_hWnd, LVM_GETTEXTBKCOLOR, 0, 0L
); | |
3084 } | |
3085 | |
3086 BOOL SetTextBkColor(COLORREF cr) | |
3087 { | |
3088 ATLASSERT(::IsWindow(m_hWnd)); | |
3089 return (BOOL)::SendMessage(m_hWnd, LVM_SETTEXTBKCOLOR, 0, cr); | |
3090 } | |
3091 | |
3092 int GetTopIndex() const | |
3093 { | |
3094 ATLASSERT(::IsWindow(m_hWnd)); | |
3095 return (int)::SendMessage(m_hWnd, LVM_GETTOPINDEX, 0, 0L); | |
3096 } | |
3097 | |
3098 int GetCountPerPage() const | |
3099 { | |
3100 ATLASSERT(::IsWindow(m_hWnd)); | |
3101 return (int)::SendMessage(m_hWnd, LVM_GETCOUNTPERPAGE, 0, 0L); | |
3102 } | |
3103 | |
3104 BOOL GetOrigin(LPPOINT lpPoint) const | |
3105 { | |
3106 ATLASSERT(::IsWindow(m_hWnd)); | |
3107 return (BOOL)::SendMessage(m_hWnd, LVM_GETORIGIN, 0, (LPARAM)lpP
oint); | |
3108 } | |
3109 | |
3110 UINT GetSelectedCount() const | |
3111 { | |
3112 ATLASSERT(::IsWindow(m_hWnd)); | |
3113 return (UINT)::SendMessage(m_hWnd, LVM_GETSELECTEDCOUNT, 0, 0L); | |
3114 } | |
3115 | |
3116 BOOL GetItemRect(int nItem, LPRECT lpRect, UINT nCode) const | |
3117 { | |
3118 ATLASSERT(::IsWindow(m_hWnd)); | |
3119 lpRect->left = nCode; | |
3120 return (BOOL)::SendMessage(m_hWnd, LVM_GETITEMRECT, (WPARAM)nIte
m, (LPARAM)lpRect); | |
3121 } | |
3122 | |
3123 #ifndef _WIN32_WCE | |
3124 HCURSOR GetHotCursor() const | |
3125 { | |
3126 ATLASSERT(::IsWindow(m_hWnd)); | |
3127 return (HCURSOR)::SendMessage(m_hWnd, LVM_GETHOTCURSOR, 0, 0L); | |
3128 } | |
3129 | |
3130 HCURSOR SetHotCursor(HCURSOR hHotCursor) | |
3131 { | |
3132 ATLASSERT(::IsWindow(m_hWnd)); | |
3133 return (HCURSOR)::SendMessage(m_hWnd, LVM_SETHOTCURSOR, 0, (LPAR
AM)hHotCursor); | |
3134 } | |
3135 | |
3136 int GetHotItem() const | |
3137 { | |
3138 ATLASSERT(::IsWindow(m_hWnd)); | |
3139 return (int)::SendMessage(m_hWnd, LVM_GETHOTITEM, 0, 0L); | |
3140 } | |
3141 | |
3142 int SetHotItem(int nIndex) | |
3143 { | |
3144 ATLASSERT(::IsWindow(m_hWnd)); | |
3145 return (int)::SendMessage(m_hWnd, LVM_SETHOTITEM, nIndex, 0L); | |
3146 } | |
3147 #endif // !_WIN32_WCE | |
3148 | |
3149 BOOL GetColumnOrderArray(int nCount, int* lpnArray) const | |
3150 { | |
3151 ATLASSERT(::IsWindow(m_hWnd)); | |
3152 return (BOOL)::SendMessage(m_hWnd, LVM_GETCOLUMNORDERARRAY, nCou
nt, (LPARAM)lpnArray); | |
3153 } | |
3154 | |
3155 BOOL SetColumnOrderArray(int nCount, int* lpnArray) | |
3156 { | |
3157 ATLASSERT(::IsWindow(m_hWnd)); | |
3158 return (BOOL)::SendMessage(m_hWnd, LVM_SETCOLUMNORDERARRAY, nCou
nt, (LPARAM)lpnArray); | |
3159 } | |
3160 | |
3161 CHeaderCtrl GetHeader() const | |
3162 { | |
3163 ATLASSERT(::IsWindow(m_hWnd)); | |
3164 return CHeaderCtrl((HWND)::SendMessage(m_hWnd, LVM_GETHEADER, 0,
0L)); | |
3165 } | |
3166 | |
3167 BOOL GetSubItemRect(int nItem, int nSubItem, int nFlag, LPRECT lpRect) c
onst | |
3168 { | |
3169 ATLASSERT(::IsWindow(m_hWnd)); | |
3170 ATLASSERT((GetStyle() & LVS_TYPEMASK) == LVS_REPORT); | |
3171 ATLASSERT(lpRect != NULL); | |
3172 lpRect->top = nSubItem; | |
3173 lpRect->left = nFlag; | |
3174 return (BOOL)::SendMessage(m_hWnd, LVM_GETSUBITEMRECT, nItem, (L
PARAM)lpRect); | |
3175 } | |
3176 | |
3177 DWORD SetIconSpacing(int cx, int cy) | |
3178 { | |
3179 ATLASSERT(::IsWindow(m_hWnd)); | |
3180 ATLASSERT((GetStyle() & LVS_TYPEMASK) == LVS_ICON); | |
3181 return (DWORD)::SendMessage(m_hWnd, LVM_SETICONSPACING, 0, MAKEL
PARAM(cx, cy)); | |
3182 } | |
3183 | |
3184 int GetISearchString(LPTSTR lpstr) const | |
3185 { | |
3186 ATLASSERT(::IsWindow(m_hWnd)); | |
3187 return (int)::SendMessage(m_hWnd, LVM_GETISEARCHSTRING, 0, (LPAR
AM)lpstr); | |
3188 } | |
3189 | |
3190 void GetItemSpacing(SIZE& sizeSpacing, BOOL bSmallIconView = FALSE) cons
t | |
3191 { | |
3192 ATLASSERT(::IsWindow(m_hWnd)); | |
3193 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, LVM_GETITEMSPACING, b
SmallIconView, 0L); | |
3194 sizeSpacing.cx = GET_X_LPARAM(dwRet); | |
3195 sizeSpacing.cy = GET_Y_LPARAM(dwRet); | |
3196 } | |
3197 | |
3198 #if (_WIN32_WCE >= 410) | |
3199 void SetItemSpacing(INT cySpacing) | |
3200 { | |
3201 ATLASSERT(::IsWindow(m_hWnd)); | |
3202 ListView_SetItemSpacing(m_hWnd, cySpacing); | |
3203 } | |
3204 #endif // (_WIN32_WCE >= 410) | |
3205 | |
3206 // single-selection only | |
3207 int GetSelectedIndex() const | |
3208 { | |
3209 ATLASSERT(::IsWindow(m_hWnd)); | |
3210 ATLASSERT((GetStyle() & LVS_SINGLESEL) != 0); | |
3211 return (int)::SendMessage(m_hWnd, LVM_GETNEXTITEM, (WPARAM)-1, M
AKELPARAM(LVNI_ALL | LVNI_SELECTED, 0)); | |
3212 } | |
3213 | |
3214 BOOL GetSelectedItem(LPLVITEM pItem) const | |
3215 { | |
3216 ATLASSERT(::IsWindow(m_hWnd)); | |
3217 ATLASSERT((GetStyle() & LVS_SINGLESEL) != 0); | |
3218 ATLASSERT(pItem != NULL); | |
3219 pItem->iItem = (int)::SendMessage(m_hWnd, LVM_GETNEXTITEM, (WPAR
AM)-1, MAKELPARAM(LVNI_ALL | LVNI_SELECTED, 0)); | |
3220 if(pItem->iItem == -1) | |
3221 return FALSE; | |
3222 return (BOOL)::SendMessage(m_hWnd, LVM_GETITEM, 0, (LPARAM)pItem
); | |
3223 } | |
3224 | |
3225 // extended list view styles | |
3226 DWORD GetExtendedListViewStyle() const | |
3227 { | |
3228 ATLASSERT(::IsWindow(m_hWnd)); | |
3229 return (DWORD)::SendMessage(m_hWnd, LVM_GETEXTENDEDLISTVIEWSTYLE
, 0, 0L); | |
3230 } | |
3231 | |
3232 // dwExMask = 0 means all styles | |
3233 DWORD SetExtendedListViewStyle(DWORD dwExStyle, DWORD dwExMask = 0) | |
3234 { | |
3235 ATLASSERT(::IsWindow(m_hWnd)); | |
3236 return (DWORD)::SendMessage(m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE
, dwExMask, dwExStyle); | |
3237 } | |
3238 | |
3239 // checkboxes only | |
3240 BOOL GetCheckState(int nIndex) const | |
3241 { | |
3242 ATLASSERT(::IsWindow(m_hWnd)); | |
3243 ATLASSERT((GetExtendedListViewStyle() & LVS_EX_CHECKBOXES) != 0)
; | |
3244 UINT uRet = GetItemState(nIndex, LVIS_STATEIMAGEMASK); | |
3245 return (uRet >> 12) - 1; | |
3246 } | |
3247 | |
3248 BOOL SetCheckState(int nItem, BOOL bCheck) | |
3249 { | |
3250 int nCheck = bCheck ? 2 : 1; // one based index | |
3251 return SetItemState(nItem, INDEXTOSTATEIMAGEMASK(nCheck), LVIS_S
TATEIMAGEMASK); | |
3252 } | |
3253 | |
3254 // view type | |
3255 DWORD GetViewType() const | |
3256 { | |
3257 ATLASSERT(::IsWindow(m_hWnd)); | |
3258 return (GetStyle() & LVS_TYPEMASK); | |
3259 } | |
3260 | |
3261 DWORD SetViewType(DWORD dwType) | |
3262 { | |
3263 ATLASSERT(::IsWindow(m_hWnd)); | |
3264 ATLASSERT(dwType == LVS_ICON || dwType == LVS_SMALLICON || dwTyp
e == LVS_LIST || dwType == LVS_REPORT); | |
3265 DWORD dwOldType = GetViewType(); | |
3266 if(dwType != dwOldType) | |
3267 ModifyStyle(LVS_TYPEMASK, (dwType & LVS_TYPEMASK)); | |
3268 return dwOldType; | |
3269 } | |
3270 | |
3271 #if (_WIN32_IE >= 0x0400) | |
3272 #ifndef _WIN32_WCE | |
3273 BOOL GetBkImage(LPLVBKIMAGE plvbki) const | |
3274 { | |
3275 ATLASSERT(::IsWindow(m_hWnd)); | |
3276 return (BOOL)::SendMessage(m_hWnd, LVM_GETBKIMAGE, 0, (LPARAM)pl
vbki); | |
3277 } | |
3278 | |
3279 BOOL SetBkImage(LPLVBKIMAGE plvbki) | |
3280 { | |
3281 ATLASSERT(::IsWindow(m_hWnd)); | |
3282 return (BOOL)::SendMessage(m_hWnd, LVM_SETBKIMAGE, 0, (LPARAM)pl
vbki); | |
3283 } | |
3284 #endif // !_WIN32_WCE | |
3285 | |
3286 int GetSelectionMark() const | |
3287 { | |
3288 ATLASSERT(::IsWindow(m_hWnd)); | |
3289 return (int)::SendMessage(m_hWnd, LVM_GETSELECTIONMARK, 0, 0L); | |
3290 } | |
3291 | |
3292 int SetSelectionMark(int nIndex) | |
3293 { | |
3294 ATLASSERT(::IsWindow(m_hWnd)); | |
3295 return (int)::SendMessage(m_hWnd, LVM_SETSELECTIONMARK, 0, nInde
x); | |
3296 } | |
3297 | |
3298 #ifndef _WIN32_WCE | |
3299 BOOL GetWorkAreas(int nWorkAreas, LPRECT lpRect) const | |
3300 { | |
3301 ATLASSERT(::IsWindow(m_hWnd)); | |
3302 return (BOOL)::SendMessage(m_hWnd, LVM_GETWORKAREAS, nWorkAreas,
(LPARAM)lpRect); | |
3303 } | |
3304 | |
3305 BOOL SetWorkAreas(int nWorkAreas, LPRECT lpRect) | |
3306 { | |
3307 ATLASSERT(::IsWindow(m_hWnd)); | |
3308 return (BOOL)::SendMessage(m_hWnd, LVM_SETWORKAREAS, nWorkAreas,
(LPARAM)lpRect); | |
3309 } | |
3310 | |
3311 DWORD GetHoverTime() const | |
3312 { | |
3313 ATLASSERT(::IsWindow(m_hWnd)); | |
3314 ATLASSERT((GetExtendedListViewStyle() & (LVS_EX_TRACKSELECT | LV
S_EX_ONECLICKACTIVATE | LVS_EX_TWOCLICKACTIVATE)) != 0); | |
3315 return (DWORD)::SendMessage(m_hWnd, LVM_GETHOVERTIME, 0, 0L); | |
3316 } | |
3317 | |
3318 DWORD SetHoverTime(DWORD dwHoverTime) | |
3319 { | |
3320 ATLASSERT(::IsWindow(m_hWnd)); | |
3321 ATLASSERT((GetExtendedListViewStyle() & (LVS_EX_TRACKSELECT | LV
S_EX_ONECLICKACTIVATE | LVS_EX_TWOCLICKACTIVATE)) != 0); | |
3322 return (DWORD)::SendMessage(m_hWnd, LVM_SETHOVERTIME, 0, dwHover
Time); | |
3323 } | |
3324 | |
3325 BOOL GetNumberOfWorkAreas(int* pnWorkAreas) const | |
3326 { | |
3327 ATLASSERT(::IsWindow(m_hWnd)); | |
3328 return (BOOL)::SendMessage(m_hWnd, LVM_GETNUMBEROFWORKAREAS, 0,
(LPARAM)pnWorkAreas); | |
3329 } | |
3330 #endif // !_WIN32_WCE | |
3331 | |
3332 BOOL SetItemCountEx(int nItems, DWORD dwFlags) | |
3333 { | |
3334 ATLASSERT(::IsWindow(m_hWnd)); | |
3335 ATLASSERT(((GetStyle() & LVS_OWNERDATA) != 0) && (((GetStyle() &
LVS_TYPEMASK) == LVS_REPORT) || ((GetStyle() & LVS_TYPEMASK) == LVS_LIST))); | |
3336 return (BOOL)::SendMessage(m_hWnd, LVM_SETITEMCOUNT, nItems, dwF
lags); | |
3337 } | |
3338 | |
3339 #ifndef _WIN32_WCE | |
3340 CToolTipCtrl GetToolTips() const | |
3341 { | |
3342 ATLASSERT(::IsWindow(m_hWnd)); | |
3343 return CToolTipCtrl((HWND)::SendMessage(m_hWnd, LVM_GETTOOLTIPS,
0, 0L)); | |
3344 } | |
3345 | |
3346 CToolTipCtrl SetToolTips(HWND hWndTT) | |
3347 { | |
3348 ATLASSERT(::IsWindow(m_hWnd)); | |
3349 return CToolTipCtrl((HWND)::SendMessage(m_hWnd, LVM_SETTOOLTIPS,
(WPARAM)hWndTT, 0L)); | |
3350 } | |
3351 | |
3352 BOOL GetUnicodeFormat() const | |
3353 { | |
3354 ATLASSERT(::IsWindow(m_hWnd)); | |
3355 return (BOOL)::SendMessage(m_hWnd, LVM_GETUNICODEFORMAT, 0, 0L); | |
3356 } | |
3357 | |
3358 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE) | |
3359 { | |
3360 ATLASSERT(::IsWindow(m_hWnd)); | |
3361 return (BOOL)::SendMessage(m_hWnd, LVM_SETUNICODEFORMAT, bUnicod
e, 0L); | |
3362 } | |
3363 #endif // !_WIN32_WCE | |
3364 #endif // (_WIN32_IE >= 0x0400) | |
3365 | |
3366 #if (_WIN32_WINNT >= 0x0501) | |
3367 int GetSelectedColumn() const | |
3368 { | |
3369 ATLASSERT(::IsWindow(m_hWnd)); | |
3370 return (int)::SendMessage(m_hWnd, LVM_GETSELECTEDCOLUMN, 0, 0L); | |
3371 } | |
3372 | |
3373 void SetSelectedColumn(int nColumn) | |
3374 { | |
3375 ATLASSERT(::IsWindow(m_hWnd)); | |
3376 ::SendMessage(m_hWnd, LVM_SETSELECTEDCOLUMN, nColumn, 0L); | |
3377 } | |
3378 | |
3379 DWORD GetView() const | |
3380 { | |
3381 ATLASSERT(::IsWindow(m_hWnd)); | |
3382 return (DWORD)::SendMessage(m_hWnd, LVM_GETVIEW, 0, 0L); | |
3383 } | |
3384 | |
3385 int SetView(DWORD dwView) | |
3386 { | |
3387 ATLASSERT(::IsWindow(m_hWnd)); | |
3388 return (int)::SendMessage(m_hWnd, LVM_SETVIEW, dwView, 0L); | |
3389 } | |
3390 | |
3391 BOOL IsGroupViewEnabled() const | |
3392 { | |
3393 ATLASSERT(::IsWindow(m_hWnd)); | |
3394 return (BOOL)::SendMessage(m_hWnd, LVM_ISGROUPVIEWENABLED, 0, 0L
); | |
3395 } | |
3396 | |
3397 int GetGroupInfo(int nGroupID, PLVGROUP pGroup) const | |
3398 { | |
3399 ATLASSERT(::IsWindow(m_hWnd)); | |
3400 return (int)::SendMessage(m_hWnd, LVM_GETGROUPINFO, nGroupID, (L
PARAM)pGroup); | |
3401 } | |
3402 | |
3403 int SetGroupInfo(int nGroupID, PLVGROUP pGroup) | |
3404 { | |
3405 ATLASSERT(::IsWindow(m_hWnd)); | |
3406 return (int)::SendMessage(m_hWnd, LVM_SETGROUPINFO, nGroupID, (L
PARAM)pGroup); | |
3407 } | |
3408 | |
3409 void GetGroupMetrics(PLVGROUPMETRICS pGroupMetrics) const | |
3410 { | |
3411 ATLASSERT(::IsWindow(m_hWnd)); | |
3412 ::SendMessage(m_hWnd, LVM_GETGROUPMETRICS, 0, (LPARAM)pGroupMetr
ics); | |
3413 } | |
3414 | |
3415 void SetGroupMetrics(PLVGROUPMETRICS pGroupMetrics) | |
3416 { | |
3417 ATLASSERT(::IsWindow(m_hWnd)); | |
3418 ::SendMessage(m_hWnd, LVM_SETGROUPMETRICS, 0, (LPARAM)pGroupMetr
ics); | |
3419 } | |
3420 | |
3421 void GetTileViewInfo(PLVTILEVIEWINFO pTileViewInfo) const | |
3422 { | |
3423 ATLASSERT(::IsWindow(m_hWnd)); | |
3424 ::SendMessage(m_hWnd, LVM_GETTILEVIEWINFO, 0, (LPARAM)pTileViewI
nfo); | |
3425 } | |
3426 | |
3427 BOOL SetTileViewInfo(PLVTILEVIEWINFO pTileViewInfo) | |
3428 { | |
3429 ATLASSERT(::IsWindow(m_hWnd)); | |
3430 return (BOOL)::SendMessage(m_hWnd, LVM_SETTILEVIEWINFO, 0, (LPAR
AM)pTileViewInfo); | |
3431 } | |
3432 | |
3433 void GetTileInfo(PLVTILEINFO pTileInfo) const | |
3434 { | |
3435 ATLASSERT(::IsWindow(m_hWnd)); | |
3436 ::SendMessage(m_hWnd, LVM_GETTILEINFO, 0, (LPARAM)pTileInfo); | |
3437 } | |
3438 | |
3439 BOOL SetTileInfo(PLVTILEINFO pTileInfo) | |
3440 { | |
3441 ATLASSERT(::IsWindow(m_hWnd)); | |
3442 return (BOOL)::SendMessage(m_hWnd, LVM_SETTILEINFO, 0, (LPARAM)p
TileInfo); | |
3443 } | |
3444 | |
3445 BOOL GetInsertMark(LPLVINSERTMARK pInsertMark) const | |
3446 { | |
3447 ATLASSERT(::IsWindow(m_hWnd)); | |
3448 return (BOOL)::SendMessage(m_hWnd, LVM_GETINSERTMARK, 0, (LPARAM
)pInsertMark); | |
3449 } | |
3450 | |
3451 BOOL SetInsertMark(LPLVINSERTMARK pInsertMark) | |
3452 { | |
3453 ATLASSERT(::IsWindow(m_hWnd)); | |
3454 return (BOOL)::SendMessage(m_hWnd, LVM_SETINSERTMARK, 0, (LPARAM
)pInsertMark); | |
3455 } | |
3456 | |
3457 int GetInsertMarkRect(LPRECT lpRect) const | |
3458 { | |
3459 ATLASSERT(::IsWindow(m_hWnd)); | |
3460 return (int)::SendMessage(m_hWnd, LVM_GETINSERTMARKRECT, 0, (LPA
RAM)lpRect); | |
3461 } | |
3462 | |
3463 COLORREF GetInsertMarkColor() const | |
3464 { | |
3465 ATLASSERT(::IsWindow(m_hWnd)); | |
3466 return (COLORREF)::SendMessage(m_hWnd, LVM_GETINSERTMARKCOLOR, 0
, 0L); | |
3467 } | |
3468 | |
3469 COLORREF SetInsertMarkColor(COLORREF clr) | |
3470 { | |
3471 ATLASSERT(::IsWindow(m_hWnd)); | |
3472 return (COLORREF)::SendMessage(m_hWnd, LVM_SETINSERTMARKCOLOR, 0
, clr); | |
3473 } | |
3474 | |
3475 COLORREF GetOutlineColor() const | |
3476 { | |
3477 ATLASSERT(::IsWindow(m_hWnd)); | |
3478 return (COLORREF)::SendMessage(m_hWnd, LVM_GETOUTLINECOLOR, 0, 0
L); | |
3479 } | |
3480 | |
3481 COLORREF SetOutlineColor(COLORREF clr) | |
3482 { | |
3483 ATLASSERT(::IsWindow(m_hWnd)); | |
3484 return (COLORREF)::SendMessage(m_hWnd, LVM_SETOUTLINECOLOR, 0, c
lr); | |
3485 } | |
3486 #endif // (_WIN32_WINNT >= 0x0501) | |
3487 | |
3488 #if (_WIN32_WINNT >= 0x0600) | |
3489 int GetGroupCount() const | |
3490 { | |
3491 ATLASSERT(::IsWindow(m_hWnd)); | |
3492 return (int)::SendMessage(m_hWnd, LVM_GETGROUPCOUNT, 0, 0L); | |
3493 } | |
3494 | |
3495 BOOL GetGroupInfoByIndex(int nIndex, PLVGROUP pGroup) const | |
3496 { | |
3497 ATLASSERT(::IsWindow(m_hWnd)); | |
3498 return (BOOL)::SendMessage(m_hWnd, LVM_GETGROUPINFOBYINDEX, nInd
ex, (LPARAM)pGroup); | |
3499 } | |
3500 | |
3501 BOOL GetGroupRect(int nGroupID, int nType, LPRECT lpRect) const | |
3502 { | |
3503 ATLASSERT(::IsWindow(m_hWnd)); | |
3504 ATLASSERT(lpRect != NULL); | |
3505 if(lpRect != NULL) | |
3506 lpRect->top = nType; | |
3507 return (BOOL)::SendMessage(m_hWnd, LVM_GETGROUPRECT, nGroupID, (
LPARAM)lpRect); | |
3508 } | |
3509 | |
3510 UINT GetGroupState(int nGroupID, UINT uMask) const | |
3511 { | |
3512 ATLASSERT(::IsWindow(m_hWnd)); | |
3513 return (UINT)::SendMessage(m_hWnd, LVM_GETGROUPSTATE, nGroupID,
(LPARAM)uMask); | |
3514 } | |
3515 | |
3516 int GetFocusedGroup() const | |
3517 { | |
3518 ATLASSERT(::IsWindow(m_hWnd)); | |
3519 return (int)::SendMessage(m_hWnd, LVM_GETFOCUSEDGROUP, 0, 0L); | |
3520 } | |
3521 | |
3522 BOOL GetEmptyText(LPWSTR lpstrText, int cchText) const | |
3523 { | |
3524 ATLASSERT(::IsWindow(m_hWnd)); | |
3525 return (BOOL)::SendMessage(m_hWnd, LVM_GETEMPTYTEXT, cchText, (L
PARAM)lpstrText); | |
3526 } | |
3527 | |
3528 BOOL GetFooterRect(LPRECT lpRect) const | |
3529 { | |
3530 ATLASSERT(::IsWindow(m_hWnd)); | |
3531 return (BOOL)::SendMessage(m_hWnd, LVM_GETFOOTERRECT, 0, (LPARAM
)lpRect); | |
3532 } | |
3533 | |
3534 BOOL GetFooterInfo(LPLVFOOTERINFO lpFooterInfo) const | |
3535 { | |
3536 ATLASSERT(::IsWindow(m_hWnd)); | |
3537 return (BOOL)::SendMessage(m_hWnd, LVM_GETFOOTERINFO, 0, (LPARAM
)lpFooterInfo); | |
3538 } | |
3539 | |
3540 BOOL GetFooterItemRect(int nItem, LPRECT lpRect) const | |
3541 { | |
3542 ATLASSERT(::IsWindow(m_hWnd)); | |
3543 return (BOOL)::SendMessage(m_hWnd, LVM_GETFOOTERITEMRECT, nItem,
(LPARAM)lpRect); | |
3544 } | |
3545 | |
3546 BOOL GetFooterItem(int nItem, LPLVFOOTERITEM lpFooterItem) const | |
3547 { | |
3548 ATLASSERT(::IsWindow(m_hWnd)); | |
3549 return (BOOL)::SendMessage(m_hWnd, LVM_GETFOOTERITEM, nItem, (LP
ARAM)lpFooterItem); | |
3550 } | |
3551 | |
3552 BOOL GetItemIndexRect(PLVITEMINDEX pItemIndex, int nSubItem, int nType,
LPRECT lpRect) const | |
3553 { | |
3554 ATLASSERT(::IsWindow(m_hWnd)); | |
3555 ATLASSERT(pItemIndex != NULL); | |
3556 ATLASSERT(lpRect != NULL); | |
3557 if(lpRect != NULL) | |
3558 { | |
3559 lpRect->top = nSubItem; | |
3560 lpRect->left = nType; | |
3561 } | |
3562 return (BOOL)::SendMessage(m_hWnd, LVM_GETITEMINDEXRECT, (WPARAM
)pItemIndex, (LPARAM)lpRect); | |
3563 } | |
3564 | |
3565 BOOL SetItemIndexState(PLVITEMINDEX pItemIndex, UINT uState, UINT dwMask
) | |
3566 { | |
3567 ATLASSERT(::IsWindow(m_hWnd)); | |
3568 LVITEM lvi = { 0 }; | |
3569 lvi.state = uState; | |
3570 lvi.stateMask = dwMask; | |
3571 return (BOOL)::SendMessage(m_hWnd, LVM_SETITEMINDEXSTATE, (WPARA
M)pItemIndex, (LPARAM)&lvi); | |
3572 } | |
3573 | |
3574 BOOL GetNextItemIndex(PLVITEMINDEX pItemIndex, WORD wFlags) const | |
3575 { | |
3576 ATLASSERT(::IsWindow(m_hWnd)); | |
3577 return (BOOL)::SendMessage(m_hWnd, LVM_GETNEXTITEMINDEX, (WPARAM
)pItemIndex, MAKELPARAM(wFlags, 0)); | |
3578 } | |
3579 #endif // (_WIN32_WINNT >= 0x0600) | |
3580 | |
3581 // Operations | |
3582 int InsertColumn(int nCol, const LVCOLUMN* pColumn) | |
3583 { | |
3584 ATLASSERT(::IsWindow(m_hWnd)); | |
3585 return (int)::SendMessage(m_hWnd, LVM_INSERTCOLUMN, nCol, (LPARA
M)pColumn); | |
3586 } | |
3587 | |
3588 int InsertColumn(int nCol, LPCTSTR lpszColumnHeading, int nFormat = LVCF
MT_LEFT, | |
3589 int nWidth = -1, int nSubItem = -1, int iImage = -1, int
iOrder = -1) | |
3590 { | |
3591 LVCOLUMN column = { 0 }; | |
3592 column.mask = LVCF_TEXT|LVCF_FMT; | |
3593 column.pszText = (LPTSTR)lpszColumnHeading; | |
3594 column.fmt = nFormat; | |
3595 if (nWidth != -1) | |
3596 { | |
3597 column.mask |= LVCF_WIDTH; | |
3598 column.cx = nWidth; | |
3599 } | |
3600 if (nSubItem != -1) | |
3601 { | |
3602 column.mask |= LVCF_SUBITEM; | |
3603 column.iSubItem = nSubItem; | |
3604 } | |
3605 if (iImage != -1) | |
3606 { | |
3607 column.mask |= LVCF_IMAGE; | |
3608 column.iImage = iImage; | |
3609 } | |
3610 if (iOrder != -1) | |
3611 { | |
3612 column.mask |= LVCF_ORDER; | |
3613 column.iOrder = iOrder; | |
3614 } | |
3615 return InsertColumn(nCol, &column); | |
3616 } | |
3617 | |
3618 BOOL DeleteColumn(int nCol) | |
3619 { | |
3620 ATLASSERT(::IsWindow(m_hWnd)); | |
3621 return (BOOL)::SendMessage(m_hWnd, LVM_DELETECOLUMN, nCol, 0L); | |
3622 } | |
3623 | |
3624 int InsertItem(UINT nMask, int nItem, LPCTSTR lpszItem, UINT nState, UIN
T nStateMask, int nImage, LPARAM lParam) | |
3625 { | |
3626 ATLASSERT(::IsWindow(m_hWnd)); | |
3627 LVITEM item = { 0 }; | |
3628 item.mask = nMask; | |
3629 item.iItem = nItem; | |
3630 item.iSubItem = 0; | |
3631 item.pszText = (LPTSTR)lpszItem; | |
3632 item.state = nState; | |
3633 item.stateMask = nStateMask; | |
3634 item.iImage = nImage; | |
3635 item.lParam = lParam; | |
3636 return InsertItem(&item); | |
3637 } | |
3638 | |
3639 int InsertItem(const LVITEM* pItem) | |
3640 { | |
3641 ATLASSERT(::IsWindow(m_hWnd)); | |
3642 return (int)::SendMessage(m_hWnd, LVM_INSERTITEM, 0, (LPARAM)pIt
em); | |
3643 } | |
3644 | |
3645 int InsertItem(int nItem, LPCTSTR lpszItem) | |
3646 { | |
3647 ATLASSERT(::IsWindow(m_hWnd)); | |
3648 return InsertItem(LVIF_TEXT, nItem, lpszItem, 0, 0, 0, 0); | |
3649 } | |
3650 | |
3651 int InsertItem(int nItem, LPCTSTR lpszItem, int nImage) | |
3652 { | |
3653 ATLASSERT(::IsWindow(m_hWnd)); | |
3654 return InsertItem(LVIF_TEXT|LVIF_IMAGE, nItem, lpszItem, 0, 0, n
Image, 0); | |
3655 } | |
3656 | |
3657 int GetNextItem(int nItem, int nFlags) const | |
3658 { | |
3659 ATLASSERT(::IsWindow(m_hWnd)); | |
3660 return (int)::SendMessage(m_hWnd, LVM_GETNEXTITEM, nItem, MAKELP
ARAM(nFlags, 0)); | |
3661 } | |
3662 | |
3663 BOOL DeleteItem(int nItem) | |
3664 { | |
3665 ATLASSERT(::IsWindow(m_hWnd)); | |
3666 return (BOOL)::SendMessage(m_hWnd, LVM_DELETEITEM, nItem, 0L); | |
3667 } | |
3668 | |
3669 BOOL DeleteAllItems() | |
3670 { | |
3671 ATLASSERT(::IsWindow(m_hWnd)); | |
3672 return (BOOL)::SendMessage(m_hWnd, LVM_DELETEALLITEMS, 0, 0L); | |
3673 } | |
3674 | |
3675 int FindItem(LVFINDINFO* pFindInfo, int nStart) const | |
3676 { | |
3677 ATLASSERT(::IsWindow(m_hWnd)); | |
3678 return (int)::SendMessage(m_hWnd, LVM_FINDITEM, nStart, (LPARAM)
pFindInfo); | |
3679 } | |
3680 | |
3681 int HitTest(LVHITTESTINFO* pHitTestInfo) const | |
3682 { | |
3683 ATLASSERT(::IsWindow(m_hWnd)); | |
3684 return (int)::SendMessage(m_hWnd, LVM_HITTEST, 0, (LPARAM)pHitTe
stInfo); | |
3685 } | |
3686 | |
3687 int HitTest(POINT pt, UINT* pFlags) const | |
3688 { | |
3689 ATLASSERT(::IsWindow(m_hWnd)); | |
3690 LVHITTESTINFO hti = { 0 }; | |
3691 hti.pt = pt; | |
3692 int nRes = (int)::SendMessage(m_hWnd, LVM_HITTEST, 0, (LPARAM)&h
ti); | |
3693 if (pFlags != NULL) | |
3694 *pFlags = hti.flags; | |
3695 return nRes; | |
3696 } | |
3697 | |
3698 BOOL EnsureVisible(int nItem, BOOL bPartialOK) | |
3699 { | |
3700 ATLASSERT(::IsWindow(m_hWnd)); | |
3701 return (BOOL)::SendMessage(m_hWnd, LVM_ENSUREVISIBLE, nItem, MAK
ELPARAM(bPartialOK, 0)); | |
3702 } | |
3703 | |
3704 BOOL Scroll(SIZE size) | |
3705 { | |
3706 ATLASSERT(::IsWindow(m_hWnd)); | |
3707 return (BOOL)::SendMessage(m_hWnd, LVM_SCROLL, size.cx, size.cy)
; | |
3708 } | |
3709 | |
3710 BOOL RedrawItems(int nFirst, int nLast) | |
3711 { | |
3712 ATLASSERT(::IsWindow(m_hWnd)); | |
3713 return (BOOL)::SendMessage(m_hWnd, LVM_REDRAWITEMS, nFirst, nLas
t); | |
3714 } | |
3715 | |
3716 BOOL Arrange(UINT nCode) | |
3717 { | |
3718 ATLASSERT(::IsWindow(m_hWnd)); | |
3719 return (BOOL)::SendMessage(m_hWnd, LVM_ARRANGE, nCode, 0L); | |
3720 } | |
3721 | |
3722 CEdit EditLabel(int nItem) | |
3723 { | |
3724 ATLASSERT(::IsWindow(m_hWnd)); | |
3725 return CEdit((HWND)::SendMessage(m_hWnd, LVM_EDITLABEL, nItem, 0
L)); | |
3726 } | |
3727 | |
3728 BOOL Update(int nItem) | |
3729 { | |
3730 ATLASSERT(::IsWindow(m_hWnd)); | |
3731 return (BOOL)::SendMessage(m_hWnd, LVM_UPDATE, nItem, 0L); | |
3732 } | |
3733 | |
3734 BOOL SortItems(PFNLVCOMPARE pfnCompare, LPARAM lParamSort) | |
3735 { | |
3736 ATLASSERT(::IsWindow(m_hWnd)); | |
3737 return (BOOL)::SendMessage(m_hWnd, LVM_SORTITEMS, (WPARAM)lParam
Sort, (LPARAM)pfnCompare); | |
3738 } | |
3739 | |
3740 CImageList RemoveImageList(int nImageList) | |
3741 { | |
3742 ATLASSERT(::IsWindow(m_hWnd)); | |
3743 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, LVM_SETIMAGE
LIST, (WPARAM)nImageList, NULL)); | |
3744 } | |
3745 | |
3746 CImageList CreateDragImage(int nItem, LPPOINT lpPoint) | |
3747 { | |
3748 ATLASSERT(::IsWindow(m_hWnd)); | |
3749 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, LVM_CREATEDR
AGIMAGE, nItem, (LPARAM)lpPoint)); | |
3750 } | |
3751 | |
3752 DWORD ApproximateViewRect(int cx = -1, int cy = -1, int nCount = -1) | |
3753 { | |
3754 ATLASSERT(::IsWindow(m_hWnd)); | |
3755 return (DWORD)::SendMessage(m_hWnd, LVM_APPROXIMATEVIEWRECT, nCo
unt, MAKELPARAM(cx, cy)); | |
3756 } | |
3757 | |
3758 int SubItemHitTest(LPLVHITTESTINFO lpInfo) const | |
3759 { | |
3760 ATLASSERT(::IsWindow(m_hWnd)); | |
3761 return (int)::SendMessage(m_hWnd, LVM_SUBITEMHITTEST, 0, (LPARAM
)lpInfo); | |
3762 } | |
3763 | |
3764 int AddColumn(LPCTSTR strItem, int nItem, int nSubItem = -1, | |
3765 int nMask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUB
ITEM, | |
3766 int nFmt = LVCFMT_LEFT) | |
3767 { | |
3768 const int cxOffset = 15; | |
3769 ATLASSERT(::IsWindow(m_hWnd)); | |
3770 LVCOLUMN lvc = { 0 }; | |
3771 lvc.mask = nMask; | |
3772 lvc.fmt = nFmt; | |
3773 lvc.pszText = (LPTSTR)strItem; | |
3774 lvc.cx = GetStringWidth(lvc.pszText) + cxOffset; | |
3775 if(nMask & LVCF_SUBITEM) | |
3776 lvc.iSubItem = (nSubItem != -1) ? nSubItem : nItem; | |
3777 return InsertColumn(nItem, &lvc); | |
3778 } | |
3779 | |
3780 int AddItem(int nItem, int nSubItem, LPCTSTR strItem, int nImageIndex =
-1) | |
3781 { | |
3782 ATLASSERT(::IsWindow(m_hWnd)); | |
3783 LVITEM lvItem = { 0 }; | |
3784 lvItem.mask = LVIF_TEXT; | |
3785 lvItem.iItem = nItem; | |
3786 lvItem.iSubItem = nSubItem; | |
3787 lvItem.pszText = (LPTSTR)strItem; | |
3788 if(nImageIndex != -1) | |
3789 { | |
3790 lvItem.mask |= LVIF_IMAGE; | |
3791 lvItem.iImage = nImageIndex; | |
3792 } | |
3793 if(nSubItem == 0) | |
3794 return InsertItem(&lvItem); | |
3795 return SetItem(&lvItem) ? nItem : -1; | |
3796 } | |
3797 | |
3798 #if (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE) | |
3799 BOOL SortItemsEx(PFNLVCOMPARE pfnCompare, LPARAM lParamSort) | |
3800 { | |
3801 ATLASSERT(::IsWindow(m_hWnd)); | |
3802 return (BOOL)::SendMessage(m_hWnd, LVM_SORTITEMSEX, (WPARAM)lPar
amSort, (LPARAM)pfnCompare); | |
3803 } | |
3804 #endif // (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE) | |
3805 | |
3806 #if (_WIN32_WINNT >= 0x0501) | |
3807 int InsertGroup(int nItem, PLVGROUP pGroup) | |
3808 { | |
3809 ATLASSERT(::IsWindow(m_hWnd)); | |
3810 return (int)::SendMessage(m_hWnd, LVM_INSERTGROUP, nItem, (LPARA
M)pGroup); | |
3811 } | |
3812 | |
3813 int AddGroup(PLVGROUP pGroup) | |
3814 { | |
3815 return InsertGroup(-1, pGroup); | |
3816 } | |
3817 | |
3818 int RemoveGroup(int nGroupID) | |
3819 { | |
3820 ATLASSERT(::IsWindow(m_hWnd)); | |
3821 return (int)::SendMessage(m_hWnd, LVM_REMOVEGROUP, nGroupID, 0L)
; | |
3822 } | |
3823 | |
3824 void MoveGroup(int nGroupID, int nItem) | |
3825 { | |
3826 ATLASSERT(::IsWindow(m_hWnd)); | |
3827 ::SendMessage(m_hWnd, LVM_MOVEGROUP, nGroupID, nItem); | |
3828 } | |
3829 | |
3830 void MoveItemToGroup(int nItem, int nGroupID) | |
3831 { | |
3832 ATLASSERT(::IsWindow(m_hWnd)); | |
3833 ::SendMessage(m_hWnd, LVM_MOVEITEMTOGROUP, nItem, nGroupID); | |
3834 } | |
3835 | |
3836 int EnableGroupView(BOOL bEnable) | |
3837 { | |
3838 ATLASSERT(::IsWindow(m_hWnd)); | |
3839 return (int)::SendMessage(m_hWnd, LVM_ENABLEGROUPVIEW, bEnable,
0L); | |
3840 } | |
3841 | |
3842 int SortGroups(PFNLVGROUPCOMPARE pCompareFunc, LPVOID lpVoid = NULL) | |
3843 { | |
3844 ATLASSERT(::IsWindow(m_hWnd)); | |
3845 return (int)::SendMessage(m_hWnd, LVM_SORTGROUPS, (WPARAM)pCompa
reFunc, (LPARAM)lpVoid); | |
3846 } | |
3847 | |
3848 void InsertGroupSorted(PLVINSERTGROUPSORTED pInsertGroupSorted) | |
3849 { | |
3850 ATLASSERT(::IsWindow(m_hWnd)); | |
3851 ::SendMessage(m_hWnd, LVM_INSERTGROUPSORTED, (WPARAM)pInsertGrou
pSorted, 0L); | |
3852 } | |
3853 | |
3854 void RemoveAllGroups() | |
3855 { | |
3856 ATLASSERT(::IsWindow(m_hWnd)); | |
3857 ::SendMessage(m_hWnd, LVM_REMOVEALLGROUPS, 0, 0L); | |
3858 } | |
3859 | |
3860 BOOL HasGroup(int nGroupID) | |
3861 { | |
3862 ATLASSERT(::IsWindow(m_hWnd)); | |
3863 return (BOOL)::SendMessage(m_hWnd, LVM_HASGROUP, nGroupID, 0L); | |
3864 } | |
3865 | |
3866 BOOL InsertMarkHitTest(LPPOINT lpPoint, LPLVINSERTMARK pInsertMark) cons
t | |
3867 { | |
3868 ATLASSERT(::IsWindow(m_hWnd)); | |
3869 return (BOOL)::SendMessage(m_hWnd, LVM_INSERTMARKHITTEST, (WPARA
M)lpPoint, (LPARAM)pInsertMark); | |
3870 } | |
3871 | |
3872 BOOL SetInfoTip(PLVSETINFOTIP pSetInfoTip) | |
3873 { | |
3874 ATLASSERT(::IsWindow(m_hWnd)); | |
3875 return (BOOL)::SendMessage(m_hWnd, LVM_SETINFOTIP, 0, (LPARAM)pS
etInfoTip); | |
3876 } | |
3877 | |
3878 void CancelEditLabel() | |
3879 { | |
3880 ATLASSERT(::IsWindow(m_hWnd)); | |
3881 ::SendMessage(m_hWnd, LVM_CANCELEDITLABEL, 0, 0L); | |
3882 } | |
3883 | |
3884 UINT MapIndexToID(int nIndex) const | |
3885 { | |
3886 ATLASSERT(::IsWindow(m_hWnd)); | |
3887 return (UINT)::SendMessage(m_hWnd, LVM_MAPINDEXTOID, nIndex, 0L)
; | |
3888 } | |
3889 | |
3890 int MapIDToIndex(UINT uID) const | |
3891 { | |
3892 ATLASSERT(::IsWindow(m_hWnd)); | |
3893 return (int)::SendMessage(m_hWnd, LVM_MAPIDTOINDEX, uID, 0L); | |
3894 } | |
3895 #endif // (_WIN32_WINNT >= 0x0501) | |
3896 | |
3897 #if (_WIN32_WINNT >= 0x0600) | |
3898 int HitTestEx(LPLVHITTESTINFO lpHitTestInfo) const | |
3899 { | |
3900 ATLASSERT(::IsWindow(m_hWnd)); | |
3901 return (int)::SendMessage(m_hWnd, LVM_HITTEST, (WPARAM)-1, (LPAR
AM)lpHitTestInfo); | |
3902 } | |
3903 | |
3904 int HitTestEx(POINT pt, UINT* pFlags) const | |
3905 { | |
3906 ATLASSERT(::IsWindow(m_hWnd)); | |
3907 LVHITTESTINFO hti = { 0 }; | |
3908 hti.pt = pt; | |
3909 int nRes = (int)::SendMessage(m_hWnd, LVM_HITTEST, (WPARAM)-1, (
LPARAM)&hti); | |
3910 if (pFlags != NULL) | |
3911 *pFlags = hti.flags; | |
3912 return nRes; | |
3913 } | |
3914 | |
3915 int SubItemHitTestEx(LPLVHITTESTINFO lpHitTestInfo) const | |
3916 { | |
3917 ATLASSERT(::IsWindow(m_hWnd)); | |
3918 return (int)::SendMessage(m_hWnd, LVM_SUBITEMHITTEST, (WPARAM)-1
, (LPARAM)lpHitTestInfo); | |
3919 } | |
3920 #endif // (_WIN32_WINNT >= 0x0600) | |
3921 | |
3922 // single-selection only | |
3923 BOOL SelectItem(int nIndex) | |
3924 { | |
3925 ATLASSERT(::IsWindow(m_hWnd)); | |
3926 ATLASSERT((GetStyle() & LVS_SINGLESEL) != 0); | |
3927 | |
3928 BOOL bRet = SetItemState(nIndex, LVIS_SELECTED | LVIS_FOCUSED, L
VIS_SELECTED | LVIS_FOCUSED); | |
3929 if(bRet) | |
3930 bRet = EnsureVisible(nIndex, FALSE); | |
3931 return bRet; | |
3932 } | |
3933 }; | |
3934 | |
3935 typedef CListViewCtrlT<ATL::CWindow> CListViewCtrl; | |
3936 | |
3937 | |
3938 /////////////////////////////////////////////////////////////////////////////// | |
3939 // CTreeViewCtrl | |
3940 | |
3941 template <class TBase> | |
3942 class CTreeViewCtrlT : public TBase | |
3943 { | |
3944 public: | |
3945 // Constructors | |
3946 CTreeViewCtrlT(HWND hWnd = NULL) : TBase(hWnd) | |
3947 { } | |
3948 | |
3949 CTreeViewCtrlT< TBase >& operator =(HWND hWnd) | |
3950 { | |
3951 m_hWnd = hWnd; | |
3952 return *this; | |
3953 } | |
3954 | |
3955 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
3956 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
3957 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
3958 { | |
3959 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
3960 } | |
3961 | |
3962 // Attributes | |
3963 static LPCTSTR GetWndClassName() | |
3964 { | |
3965 return WC_TREEVIEW; | |
3966 } | |
3967 | |
3968 UINT GetCount() const | |
3969 { | |
3970 ATLASSERT(::IsWindow(m_hWnd)); | |
3971 return (UINT)::SendMessage(m_hWnd, TVM_GETCOUNT, 0, 0L); | |
3972 } | |
3973 | |
3974 UINT GetIndent() const | |
3975 { | |
3976 ATLASSERT(::IsWindow(m_hWnd)); | |
3977 return (UINT)::SendMessage(m_hWnd, TVM_GETINDENT, 0, 0L); | |
3978 } | |
3979 | |
3980 void SetIndent(UINT nIndent) | |
3981 { | |
3982 ATLASSERT(::IsWindow(m_hWnd)); | |
3983 ::SendMessage(m_hWnd, TVM_SETINDENT, nIndent, 0L); | |
3984 } | |
3985 | |
3986 CImageList GetImageList(int nImageListType = TVSIL_NORMAL) const | |
3987 { | |
3988 ATLASSERT(::IsWindow(m_hWnd)); | |
3989 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TVM_GETIMAGE
LIST, (WPARAM)nImageListType, 0L)); | |
3990 } | |
3991 | |
3992 CImageList SetImageList(HIMAGELIST hImageList, int nImageListType = TVSI
L_NORMAL) | |
3993 { | |
3994 ATLASSERT(::IsWindow(m_hWnd)); | |
3995 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TVM_SETIMAGE
LIST, (WPARAM)nImageListType, (LPARAM)hImageList)); | |
3996 } | |
3997 | |
3998 BOOL GetItem(LPTVITEM pItem) const | |
3999 { | |
4000 ATLASSERT(::IsWindow(m_hWnd)); | |
4001 return (BOOL)::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPARAM)pItem
); | |
4002 } | |
4003 | |
4004 BOOL SetItem(LPTVITEM pItem) | |
4005 { | |
4006 ATLASSERT(::IsWindow(m_hWnd)); | |
4007 return (BOOL)::SendMessage(m_hWnd, TVM_SETITEM, 0, (LPARAM)pItem
); | |
4008 } | |
4009 | |
4010 BOOL SetItem(HTREEITEM hItem, UINT nMask, LPCTSTR lpszItem, int nImage, | |
4011 int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam) | |
4012 { | |
4013 ATLASSERT(::IsWindow(m_hWnd)); | |
4014 TVITEM item = { 0 }; | |
4015 item.hItem = hItem; | |
4016 item.mask = nMask; | |
4017 item.pszText = (LPTSTR) lpszItem; | |
4018 item.iImage = nImage; | |
4019 item.iSelectedImage = nSelectedImage; | |
4020 item.state = nState; | |
4021 item.stateMask = nStateMask; | |
4022 item.lParam = lParam; | |
4023 return (BOOL)::SendMessage(m_hWnd, TVM_SETITEM, 0, (LPARAM)&item
); | |
4024 } | |
4025 | |
4026 BOOL GetItemText(HTREEITEM hItem, LPTSTR lpstrText, int nLen) const | |
4027 { | |
4028 ATLASSERT(::IsWindow(m_hWnd)); | |
4029 ATLASSERT(lpstrText != NULL); | |
4030 | |
4031 TVITEM item = { 0 }; | |
4032 item.hItem = hItem; | |
4033 item.mask = TVIF_TEXT; | |
4034 item.pszText = lpstrText; | |
4035 item.cchTextMax = nLen; | |
4036 | |
4037 return (BOOL)::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPARAM)&item
); | |
4038 } | |
4039 | |
4040 #ifndef _ATL_NO_COM | |
4041 BOOL GetItemText(HTREEITEM hItem, BSTR& bstrText) const | |
4042 { | |
4043 USES_CONVERSION; | |
4044 ATLASSERT(::IsWindow(m_hWnd)); | |
4045 ATLASSERT(bstrText == NULL); | |
4046 TVITEM item = { 0 }; | |
4047 item.hItem = hItem; | |
4048 item.mask = TVIF_TEXT; | |
4049 | |
4050 LPTSTR lpstrText = NULL; | |
4051 BOOL bRet = FALSE; | |
4052 for(int nLen = 256; ; nLen *= 2) | |
4053 { | |
4054 ATLTRY(lpstrText = new TCHAR[nLen]); | |
4055 if(lpstrText == NULL) | |
4056 break; | |
4057 lpstrText[0] = NULL; | |
4058 item.pszText = lpstrText; | |
4059 item.cchTextMax = nLen; | |
4060 bRet = (BOOL)::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPAR
AM)&item); | |
4061 if(!bRet || (lstrlen(item.pszText) < nLen - 1)) | |
4062 break; | |
4063 delete [] lpstrText; | |
4064 lpstrText = NULL; | |
4065 } | |
4066 | |
4067 if(lpstrText != NULL) | |
4068 { | |
4069 if(bRet) | |
4070 bstrText = ::SysAllocString(T2OLE(lpstrText)); | |
4071 delete [] lpstrText; | |
4072 } | |
4073 | |
4074 return (bstrText != NULL) ? TRUE : FALSE; | |
4075 } | |
4076 #endif // !_ATL_NO_COM | |
4077 | |
4078 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) | |
4079 BOOL GetItemText(HTREEITEM hItem, _CSTRING_NS::CString& strText) const | |
4080 { | |
4081 ATLASSERT(::IsWindow(m_hWnd)); | |
4082 TVITEM item = { 0 }; | |
4083 item.hItem = hItem; | |
4084 item.mask = TVIF_TEXT; | |
4085 | |
4086 strText.Empty(); | |
4087 BOOL bRet = FALSE; | |
4088 for(int nLen = 256; ; nLen *= 2) | |
4089 { | |
4090 item.pszText = strText.GetBufferSetLength(nLen); | |
4091 if(item.pszText == NULL) | |
4092 { | |
4093 bRet = FALSE; | |
4094 break; | |
4095 } | |
4096 item.cchTextMax = nLen; | |
4097 bRet = (BOOL)::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPAR
AM)&item); | |
4098 if(!bRet || (lstrlen(item.pszText) < nLen - 1)) | |
4099 break; | |
4100 } | |
4101 strText.ReleaseBuffer(); | |
4102 return bRet; | |
4103 } | |
4104 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) | |
4105 | |
4106 BOOL SetItemText(HTREEITEM hItem, LPCTSTR lpszItem) | |
4107 { | |
4108 ATLASSERT(::IsWindow(m_hWnd)); | |
4109 return SetItem(hItem, TVIF_TEXT, lpszItem, 0, 0, 0, 0, NULL); | |
4110 } | |
4111 | |
4112 BOOL GetItemImage(HTREEITEM hItem, int& nImage, int& nSelectedImage) con
st | |
4113 { | |
4114 ATLASSERT(::IsWindow(m_hWnd)); | |
4115 TVITEM item = { 0 }; | |
4116 item.hItem = hItem; | |
4117 item.mask = TVIF_IMAGE|TVIF_SELECTEDIMAGE; | |
4118 BOOL bRes = (BOOL)::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPARAM)
&item); | |
4119 if (bRes) | |
4120 { | |
4121 nImage = item.iImage; | |
4122 nSelectedImage = item.iSelectedImage; | |
4123 } | |
4124 return bRes; | |
4125 } | |
4126 | |
4127 BOOL SetItemImage(HTREEITEM hItem, int nImage, int nSelectedImage) | |
4128 { | |
4129 ATLASSERT(::IsWindow(m_hWnd)); | |
4130 return SetItem(hItem, TVIF_IMAGE|TVIF_SELECTEDIMAGE, NULL, nImag
e, nSelectedImage, 0, 0, NULL); | |
4131 } | |
4132 | |
4133 UINT GetItemState(HTREEITEM hItem, UINT nStateMask) const | |
4134 { | |
4135 ATLASSERT(::IsWindow(m_hWnd)); | |
4136 #if (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE) | |
4137 return (((UINT)::SendMessage(m_hWnd, TVM_GETITEMSTATE, (WPARAM)h
Item, (LPARAM)nStateMask)) & nStateMask); | |
4138 #else // !((_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)) | |
4139 TVITEM item = { 0 }; | |
4140 item.hItem = hItem; | |
4141 item.mask = TVIF_STATE; | |
4142 item.state = 0; | |
4143 item.stateMask = nStateMask; | |
4144 ::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPARAM)&item); | |
4145 return (item.state & nStateMask); | |
4146 #endif // !((_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)) | |
4147 } | |
4148 | |
4149 BOOL SetItemState(HTREEITEM hItem, UINT nState, UINT nStateMask) | |
4150 { | |
4151 ATLASSERT(::IsWindow(m_hWnd)); | |
4152 return SetItem(hItem, TVIF_STATE, NULL, 0, 0, nState, nStateMask
, NULL); | |
4153 } | |
4154 | |
4155 DWORD_PTR GetItemData(HTREEITEM hItem) const | |
4156 { | |
4157 ATLASSERT(::IsWindow(m_hWnd)); | |
4158 TVITEM item = { 0 }; | |
4159 item.hItem = hItem; | |
4160 item.mask = TVIF_PARAM; | |
4161 BOOL bRet = (BOOL)::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPARAM)
&item); | |
4162 return (DWORD_PTR)(bRet ? item.lParam : NULL); | |
4163 } | |
4164 | |
4165 BOOL SetItemData(HTREEITEM hItem, DWORD_PTR dwData) | |
4166 { | |
4167 ATLASSERT(::IsWindow(m_hWnd)); | |
4168 return SetItem(hItem, TVIF_PARAM, NULL, 0, 0, 0, 0, (LPARAM)dwDa
ta); | |
4169 } | |
4170 | |
4171 CEdit GetEditControl() const | |
4172 { | |
4173 ATLASSERT(::IsWindow(m_hWnd)); | |
4174 return CEdit((HWND)::SendMessage(m_hWnd, TVM_GETEDITCONTROL, 0,
0L)); | |
4175 } | |
4176 | |
4177 UINT GetVisibleCount() const | |
4178 { | |
4179 ATLASSERT(::IsWindow(m_hWnd)); | |
4180 return (UINT)::SendMessage(m_hWnd, TVM_GETVISIBLECOUNT, 0, 0L); | |
4181 } | |
4182 | |
4183 BOOL GetItemRect(HTREEITEM hItem, LPRECT lpRect, BOOL bTextOnly) const | |
4184 { | |
4185 ATLASSERT(::IsWindow(m_hWnd)); | |
4186 *(HTREEITEM*)lpRect = hItem; | |
4187 return (BOOL)::SendMessage(m_hWnd, TVM_GETITEMRECT, (WPARAM)bTex
tOnly, (LPARAM)lpRect); | |
4188 } | |
4189 | |
4190 BOOL ItemHasChildren(HTREEITEM hItem) const | |
4191 { | |
4192 ATLASSERT(::IsWindow(m_hWnd)); | |
4193 TVITEM item = { 0 }; | |
4194 item.hItem = hItem; | |
4195 item.mask = TVIF_CHILDREN; | |
4196 ::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPARAM)&item); | |
4197 return item.cChildren; | |
4198 } | |
4199 | |
4200 #ifndef _WIN32_WCE | |
4201 CToolTipCtrl GetToolTips() const | |
4202 { | |
4203 ATLASSERT(::IsWindow(m_hWnd)); | |
4204 return CToolTipCtrl((HWND)::SendMessage(m_hWnd, TVM_GETTOOLTIPS,
0, 0L)); | |
4205 } | |
4206 | |
4207 CToolTipCtrl SetToolTips(HWND hWndTT) | |
4208 { | |
4209 ATLASSERT(::IsWindow(m_hWnd)); | |
4210 return CToolTipCtrl((HWND)::SendMessage(m_hWnd, TVM_SETTOOLTIPS,
(WPARAM)hWndTT, 0L)); | |
4211 } | |
4212 #endif // !_WIN32_WCE | |
4213 | |
4214 int GetISearchString(LPTSTR lpstr) const | |
4215 { | |
4216 ATLASSERT(::IsWindow(m_hWnd)); | |
4217 return (int)::SendMessage(m_hWnd, TVM_GETISEARCHSTRING, 0, (LPAR
AM)lpstr); | |
4218 } | |
4219 | |
4220 // checkboxes only | |
4221 BOOL GetCheckState(HTREEITEM hItem) const | |
4222 { | |
4223 ATLASSERT(::IsWindow(m_hWnd)); | |
4224 ATLASSERT((GetStyle() & TVS_CHECKBOXES) != 0); | |
4225 UINT uRet = GetItemState(hItem, TVIS_STATEIMAGEMASK); | |
4226 return (uRet >> 12) - 1; | |
4227 } | |
4228 | |
4229 BOOL SetCheckState(HTREEITEM hItem, BOOL bCheck) | |
4230 { | |
4231 int nCheck = bCheck ? 2 : 1; // one based index | |
4232 return SetItemState(hItem, INDEXTOSTATEIMAGEMASK(nCheck), TVIS_S
TATEIMAGEMASK); | |
4233 } | |
4234 | |
4235 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
4236 COLORREF GetBkColor() const | |
4237 { | |
4238 ATLASSERT(::IsWindow(m_hWnd)); | |
4239 return (COLORREF)::SendMessage(m_hWnd, TVM_GETBKCOLOR, 0, 0L); | |
4240 } | |
4241 | |
4242 COLORREF SetBkColor(COLORREF clr) | |
4243 { | |
4244 ATLASSERT(::IsWindow(m_hWnd)); | |
4245 return (COLORREF)::SendMessage(m_hWnd, TVM_SETBKCOLOR, 0, (LPARA
M)clr); | |
4246 } | |
4247 | |
4248 COLORREF GetInsertMarkColor() const | |
4249 { | |
4250 ATLASSERT(::IsWindow(m_hWnd)); | |
4251 return (COLORREF)::SendMessage(m_hWnd, TVM_GETINSERTMARKCOLOR, 0
, 0L); | |
4252 } | |
4253 | |
4254 COLORREF SetInsertMarkColor(COLORREF clr) | |
4255 { | |
4256 ATLASSERT(::IsWindow(m_hWnd)); | |
4257 return (COLORREF)::SendMessage(m_hWnd, TVM_SETINSERTMARKCOLOR, 0
, (LPARAM)clr); | |
4258 } | |
4259 | |
4260 int GetItemHeight() const | |
4261 { | |
4262 ATLASSERT(::IsWindow(m_hWnd)); | |
4263 return (int)::SendMessage(m_hWnd, TVM_GETITEMHEIGHT, 0, 0L); | |
4264 } | |
4265 | |
4266 int SetItemHeight(int cyHeight) | |
4267 { | |
4268 ATLASSERT(::IsWindow(m_hWnd)); | |
4269 return (int)::SendMessage(m_hWnd, TVM_SETITEMHEIGHT, cyHeight, 0
L); | |
4270 } | |
4271 | |
4272 int GetScrollTime() const | |
4273 { | |
4274 ATLASSERT(::IsWindow(m_hWnd)); | |
4275 return (int)::SendMessage(m_hWnd, TVM_GETSCROLLTIME, 0, 0L); | |
4276 } | |
4277 | |
4278 int SetScrollTime(int nScrollTime) | |
4279 { | |
4280 ATLASSERT(::IsWindow(m_hWnd)); | |
4281 return (int)::SendMessage(m_hWnd, TVM_SETSCROLLTIME, nScrollTime
, 0L); | |
4282 } | |
4283 | |
4284 COLORREF GetTextColor() const | |
4285 { | |
4286 ATLASSERT(::IsWindow(m_hWnd)); | |
4287 return (COLORREF)::SendMessage(m_hWnd, TVM_GETTEXTCOLOR, 0, 0L); | |
4288 } | |
4289 | |
4290 COLORREF SetTextColor(COLORREF clr) | |
4291 { | |
4292 ATLASSERT(::IsWindow(m_hWnd)); | |
4293 return (COLORREF)::SendMessage(m_hWnd, TVM_SETTEXTCOLOR, 0, (LPA
RAM)clr); | |
4294 } | |
4295 | |
4296 BOOL GetUnicodeFormat() const | |
4297 { | |
4298 ATLASSERT(::IsWindow(m_hWnd)); | |
4299 return (BOOL)::SendMessage(m_hWnd, TVM_GETUNICODEFORMAT, 0, 0L); | |
4300 } | |
4301 | |
4302 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE) | |
4303 { | |
4304 ATLASSERT(::IsWindow(m_hWnd)); | |
4305 return (BOOL)::SendMessage(m_hWnd, TVM_SETUNICODEFORMAT, bUnicod
e, 0L); | |
4306 } | |
4307 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
4308 | |
4309 #if (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE) | |
4310 COLORREF GetLineColor() const | |
4311 { | |
4312 ATLASSERT(::IsWindow(m_hWnd)); | |
4313 return (COLORREF)::SendMessage(m_hWnd, TVM_GETLINECOLOR, 0, 0L); | |
4314 } | |
4315 | |
4316 COLORREF SetLineColor(COLORREF clrNew /*= CLR_DEFAULT*/) | |
4317 { | |
4318 ATLASSERT(::IsWindow(m_hWnd)); | |
4319 return (COLORREF)::SendMessage(m_hWnd, TVM_SETLINECOLOR, 0, (LPA
RAM)clrNew); | |
4320 } | |
4321 #endif // (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE) | |
4322 | |
4323 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
4324 BOOL GetItem(LPTVITEMEX pItem) const | |
4325 { | |
4326 ATLASSERT(::IsWindow(m_hWnd)); | |
4327 return (BOOL)::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPARAM)pItem
); | |
4328 } | |
4329 | |
4330 BOOL SetItem(LPTVITEMEX pItem) | |
4331 { | |
4332 ATLASSERT(::IsWindow(m_hWnd)); | |
4333 return (BOOL)::SendMessage(m_hWnd, TVM_SETITEM, 0, (LPARAM)pItem
); | |
4334 } | |
4335 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
4336 | |
4337 DWORD GetExtendedStyle() const | |
4338 { | |
4339 #ifndef TVM_GETEXTENDEDSTYLE | |
4340 const UINT TVM_GETEXTENDEDSTYLE = (TV_FIRST + 45); | |
4341 #endif | |
4342 ATLASSERT(::IsWindow(m_hWnd)); | |
4343 return (DWORD)::SendMessage(m_hWnd, TVM_GETEXTENDEDSTYLE, 0, 0L)
; | |
4344 } | |
4345 | |
4346 DWORD SetExtendedStyle(DWORD dwStyle, DWORD dwMask) | |
4347 { | |
4348 #ifndef TVM_SETEXTENDEDSTYLE | |
4349 const UINT TVM_SETEXTENDEDSTYLE = (TV_FIRST + 44); | |
4350 #endif | |
4351 ATLASSERT(::IsWindow(m_hWnd)); | |
4352 return (DWORD)::SendMessage(m_hWnd, TVM_SETEXTENDEDSTYLE, dwMask
, dwStyle); | |
4353 } | |
4354 | |
4355 #if (_WIN32_WINNT >= 0x0600) | |
4356 BOOL SetAutoScrollInfo(UINT uPixPerSec, UINT uUpdateTime) | |
4357 { | |
4358 ATLASSERT(::IsWindow(m_hWnd)); | |
4359 return (BOOL)::SendMessage(m_hWnd, TVM_SETAUTOSCROLLINFO, (WPARA
M)uPixPerSec, (LPARAM)uUpdateTime); | |
4360 } | |
4361 | |
4362 DWORD GetSelectedCount() const | |
4363 { | |
4364 ATLASSERT(::IsWindow(m_hWnd)); | |
4365 return (DWORD)::SendMessage(m_hWnd, TVM_GETSELECTEDCOUNT, 0, 0L)
; | |
4366 } | |
4367 | |
4368 BOOL GetItemPartRect(HTREEITEM hItem, TVITEMPART partID, LPRECT lpRect)
const | |
4369 { | |
4370 ATLASSERT(::IsWindow(m_hWnd)); | |
4371 TVGETITEMPARTRECTINFO gipri = { hItem, lpRect, partID }; | |
4372 return (BOOL)::SendMessage(m_hWnd, TVM_GETITEMPARTRECT, 0, (LPAR
AM)&gipri); | |
4373 } | |
4374 #endif // (_WIN32_WINNT >= 0x0600) | |
4375 | |
4376 // Operations | |
4377 HTREEITEM InsertItem(LPTVINSERTSTRUCT lpInsertStruct) | |
4378 { | |
4379 ATLASSERT(::IsWindow(m_hWnd)); | |
4380 return (HTREEITEM)::SendMessage(m_hWnd, TVM_INSERTITEM, 0, (LPAR
AM)lpInsertStruct); | |
4381 } | |
4382 | |
4383 HTREEITEM InsertItem(LPCTSTR lpszItem, int nImage, | |
4384 int nSelectedImage, HTREEITEM hParent, HTREEITEM hInsertAfter) | |
4385 { | |
4386 ATLASSERT(::IsWindow(m_hWnd)); | |
4387 return InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE, l
pszItem, nImage, nSelectedImage, 0, 0, 0, hParent, hInsertAfter); | |
4388 } | |
4389 | |
4390 HTREEITEM InsertItem(LPCTSTR lpszItem, HTREEITEM hParent, HTREEITEM hIns
ertAfter) | |
4391 { | |
4392 ATLASSERT(::IsWindow(m_hWnd)); | |
4393 return InsertItem(TVIF_TEXT, lpszItem, 0, 0, 0, 0, 0, hParent, h
InsertAfter); | |
4394 } | |
4395 | |
4396 HTREEITEM InsertItem(UINT nMask, LPCTSTR lpszItem, int nImage, | |
4397 int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam, | |
4398 HTREEITEM hParent, HTREEITEM hInsertAfter) | |
4399 { | |
4400 ATLASSERT(::IsWindow(m_hWnd)); | |
4401 TVINSERTSTRUCT tvis = { 0 }; | |
4402 tvis.hParent = hParent; | |
4403 tvis.hInsertAfter = hInsertAfter; | |
4404 tvis.item.mask = nMask; | |
4405 tvis.item.pszText = (LPTSTR) lpszItem; | |
4406 tvis.item.iImage = nImage; | |
4407 tvis.item.iSelectedImage = nSelectedImage; | |
4408 tvis.item.state = nState; | |
4409 tvis.item.stateMask = nStateMask; | |
4410 tvis.item.lParam = lParam; | |
4411 return (HTREEITEM)::SendMessage(m_hWnd, TVM_INSERTITEM, 0, (LPAR
AM)&tvis); | |
4412 } | |
4413 | |
4414 BOOL DeleteItem(HTREEITEM hItem) | |
4415 { | |
4416 ATLASSERT(::IsWindow(m_hWnd)); | |
4417 return (BOOL)::SendMessage(m_hWnd, TVM_DELETEITEM, 0, (LPARAM)hI
tem); | |
4418 } | |
4419 | |
4420 BOOL DeleteAllItems() | |
4421 { | |
4422 ATLASSERT(::IsWindow(m_hWnd)); | |
4423 return (BOOL)::SendMessage(m_hWnd, TVM_DELETEITEM, 0, (LPARAM)TV
I_ROOT); | |
4424 } | |
4425 | |
4426 BOOL Expand(HTREEITEM hItem, UINT nCode = TVE_EXPAND) | |
4427 { | |
4428 ATLASSERT(::IsWindow(m_hWnd)); | |
4429 return (BOOL)::SendMessage(m_hWnd, TVM_EXPAND, nCode, (LPARAM)hI
tem); | |
4430 } | |
4431 | |
4432 HTREEITEM GetNextItem(HTREEITEM hItem, UINT nCode) const | |
4433 { | |
4434 ATLASSERT(::IsWindow(m_hWnd)); | |
4435 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, nCode,
(LPARAM)hItem); | |
4436 } | |
4437 | |
4438 HTREEITEM GetChildItem(HTREEITEM hItem) const | |
4439 { | |
4440 ATLASSERT(::IsWindow(m_hWnd)); | |
4441 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_CH
ILD, (LPARAM)hItem); | |
4442 } | |
4443 | |
4444 HTREEITEM GetNextSiblingItem(HTREEITEM hItem) const | |
4445 { | |
4446 ATLASSERT(::IsWindow(m_hWnd)); | |
4447 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_NE
XT, (LPARAM)hItem); | |
4448 } | |
4449 | |
4450 HTREEITEM GetPrevSiblingItem(HTREEITEM hItem) const | |
4451 { | |
4452 ATLASSERT(::IsWindow(m_hWnd)); | |
4453 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_PR
EVIOUS, (LPARAM)hItem); | |
4454 } | |
4455 | |
4456 HTREEITEM GetParentItem(HTREEITEM hItem) const | |
4457 { | |
4458 ATLASSERT(::IsWindow(m_hWnd)); | |
4459 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_PA
RENT, (LPARAM)hItem); | |
4460 } | |
4461 | |
4462 HTREEITEM GetFirstVisibleItem() const | |
4463 { | |
4464 ATLASSERT(::IsWindow(m_hWnd)); | |
4465 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_FI
RSTVISIBLE, 0L); | |
4466 } | |
4467 | |
4468 HTREEITEM GetNextVisibleItem(HTREEITEM hItem) const | |
4469 { | |
4470 ATLASSERT(::IsWindow(m_hWnd)); | |
4471 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_NE
XTVISIBLE, (LPARAM)hItem); | |
4472 } | |
4473 | |
4474 HTREEITEM GetPrevVisibleItem(HTREEITEM hItem) const | |
4475 { | |
4476 ATLASSERT(::IsWindow(m_hWnd)); | |
4477 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_PR
EVIOUSVISIBLE, (LPARAM)hItem); | |
4478 } | |
4479 | |
4480 HTREEITEM GetSelectedItem() const | |
4481 { | |
4482 ATLASSERT(::IsWindow(m_hWnd)); | |
4483 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_CA
RET, 0L); | |
4484 } | |
4485 | |
4486 HTREEITEM GetDropHilightItem() const | |
4487 { | |
4488 ATLASSERT(::IsWindow(m_hWnd)); | |
4489 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_DR
OPHILITE, 0L); | |
4490 } | |
4491 | |
4492 HTREEITEM GetRootItem() const | |
4493 { | |
4494 ATLASSERT(::IsWindow(m_hWnd)); | |
4495 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_RO
OT, 0L); | |
4496 } | |
4497 | |
4498 #if !defined(_WIN32_WCE) && (_WIN32_IE >= 0x0400) | |
4499 HTREEITEM GetLastVisibleItem() const | |
4500 { | |
4501 ATLASSERT(::IsWindow(m_hWnd)); | |
4502 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_LA
STVISIBLE, 0L); | |
4503 } | |
4504 #endif // !defined(_WIN32_WCE) && (_WIN32_IE >= 0x0400) | |
4505 | |
4506 #if (_WIN32_IE >= 0x0600) | |
4507 HTREEITEM GetNextSelectedItem() const | |
4508 { | |
4509 ATLASSERT(::IsWindow(m_hWnd)); | |
4510 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_NE
XTSELECTED, 0L); | |
4511 } | |
4512 #endif // (_WIN32_IE >= 0x0600) | |
4513 | |
4514 BOOL Select(HTREEITEM hItem, UINT nCode) | |
4515 { | |
4516 ATLASSERT(::IsWindow(m_hWnd)); | |
4517 return (BOOL)::SendMessage(m_hWnd, TVM_SELECTITEM, nCode, (LPARA
M)hItem); | |
4518 } | |
4519 | |
4520 BOOL SelectItem(HTREEITEM hItem) | |
4521 { | |
4522 ATLASSERT(::IsWindow(m_hWnd)); | |
4523 return (BOOL)::SendMessage(m_hWnd, TVM_SELECTITEM, TVGN_CARET, (
LPARAM)hItem); | |
4524 } | |
4525 | |
4526 BOOL SelectDropTarget(HTREEITEM hItem) | |
4527 { | |
4528 ATLASSERT(::IsWindow(m_hWnd)); | |
4529 return (BOOL)::SendMessage(m_hWnd, TVM_SELECTITEM, TVGN_DROPHILI
TE, (LPARAM)hItem); | |
4530 } | |
4531 | |
4532 BOOL SelectSetFirstVisible(HTREEITEM hItem) | |
4533 { | |
4534 ATLASSERT(::IsWindow(m_hWnd)); | |
4535 return (BOOL)::SendMessage(m_hWnd, TVM_SELECTITEM, TVGN_FIRSTVIS
IBLE, (LPARAM)hItem); | |
4536 } | |
4537 | |
4538 CEdit EditLabel(HTREEITEM hItem) | |
4539 { | |
4540 ATLASSERT(::IsWindow(m_hWnd)); | |
4541 return CEdit((HWND)::SendMessage(m_hWnd, TVM_EDITLABEL, 0, (LPAR
AM)hItem)); | |
4542 } | |
4543 | |
4544 BOOL EndEditLabelNow(BOOL bCancel) | |
4545 { | |
4546 ATLASSERT(::IsWindow(m_hWnd)); | |
4547 return (BOOL)::SendMessage(m_hWnd, TVM_ENDEDITLABELNOW, bCancel,
0L); | |
4548 } | |
4549 | |
4550 HTREEITEM HitTest(TVHITTESTINFO* pHitTestInfo) const | |
4551 { | |
4552 ATLASSERT(::IsWindow(m_hWnd)); | |
4553 return (HTREEITEM)::SendMessage(m_hWnd, TVM_HITTEST, 0, (LPARAM)
pHitTestInfo); | |
4554 } | |
4555 | |
4556 HTREEITEM HitTest(POINT pt, UINT* pFlags) const | |
4557 { | |
4558 ATLASSERT(::IsWindow(m_hWnd)); | |
4559 TVHITTESTINFO hti = { 0 }; | |
4560 hti.pt = pt; | |
4561 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_HITTE
ST, 0, (LPARAM)&hti); | |
4562 if (pFlags != NULL) | |
4563 *pFlags = hti.flags; | |
4564 return hTreeItem; | |
4565 } | |
4566 | |
4567 BOOL SortChildren(HTREEITEM hItem, BOOL bRecurse = FALSE) | |
4568 { | |
4569 ATLASSERT(::IsWindow(m_hWnd)); | |
4570 return (BOOL)::SendMessage(m_hWnd, TVM_SORTCHILDREN, (WPARAM)bRe
curse, (LPARAM)hItem); | |
4571 } | |
4572 | |
4573 BOOL EnsureVisible(HTREEITEM hItem) | |
4574 { | |
4575 ATLASSERT(::IsWindow(m_hWnd)); | |
4576 return (BOOL)::SendMessage(m_hWnd, TVM_ENSUREVISIBLE, 0, (LPARAM
)hItem); | |
4577 } | |
4578 | |
4579 BOOL SortChildrenCB(LPTVSORTCB pSort, BOOL bRecurse = FALSE) | |
4580 { | |
4581 ATLASSERT(::IsWindow(m_hWnd)); | |
4582 return (BOOL)::SendMessage(m_hWnd, TVM_SORTCHILDRENCB, (WPARAM)b
Recurse, (LPARAM)pSort); | |
4583 } | |
4584 | |
4585 CImageList RemoveImageList(int nImageList) | |
4586 { | |
4587 ATLASSERT(::IsWindow(m_hWnd)); | |
4588 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TVM_SETIMAGE
LIST, (WPARAM)nImageList, NULL)); | |
4589 } | |
4590 | |
4591 CImageList CreateDragImage(HTREEITEM hItem) | |
4592 { | |
4593 ATLASSERT(::IsWindow(m_hWnd)); | |
4594 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TVM_CREATEDR
AGIMAGE, 0, (LPARAM)hItem)); | |
4595 } | |
4596 | |
4597 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
4598 BOOL SetInsertMark(HTREEITEM hTreeItem, BOOL bAfter) | |
4599 { | |
4600 ATLASSERT(::IsWindow(m_hWnd)); | |
4601 return (BOOL)::SendMessage(m_hWnd, TVM_SETINSERTMARK, bAfter, (L
PARAM)hTreeItem); | |
4602 } | |
4603 | |
4604 BOOL RemoveInsertMark() | |
4605 { | |
4606 ATLASSERT(::IsWindow(m_hWnd)); | |
4607 return (BOOL)::SendMessage(m_hWnd, TVM_SETINSERTMARK, 0, 0L); | |
4608 } | |
4609 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
4610 | |
4611 #if (_WIN32_WINNT >= 0x0501) | |
4612 HTREEITEM MapAccIDToHTREEITEM(UINT uID) const | |
4613 { | |
4614 ATLASSERT(::IsWindow(m_hWnd)); | |
4615 return (HTREEITEM)::SendMessage(m_hWnd, TVM_MAPACCIDTOHTREEITEM,
uID, 0L); | |
4616 } | |
4617 | |
4618 UINT MapHTREEITEMToAccID(HTREEITEM hTreeItem) const | |
4619 { | |
4620 ATLASSERT(::IsWindow(m_hWnd)); | |
4621 return (UINT)::SendMessage(m_hWnd, TVM_MAPHTREEITEMTOACCID, (WPA
RAM)hTreeItem, 0L); | |
4622 } | |
4623 #endif // (_WIN32_WINNT >= 0x0501) | |
4624 | |
4625 #if (_WIN32_WINNT >= 0x0600) | |
4626 void ShowInfoTip(HTREEITEM hItem) | |
4627 { | |
4628 ATLASSERT(::IsWindow(m_hWnd)); | |
4629 ::SendMessage(m_hWnd, TVM_SHOWINFOTIP, 0, (LPARAM)hItem); | |
4630 } | |
4631 #endif // (_WIN32_WINNT >= 0x0600) | |
4632 }; | |
4633 | |
4634 typedef CTreeViewCtrlT<ATL::CWindow> CTreeViewCtrl; | |
4635 | |
4636 | |
4637 /////////////////////////////////////////////////////////////////////////////// | |
4638 // CTreeViewCtrlEx | |
4639 | |
4640 // forward declaration | |
4641 template <class TBase> class CTreeViewCtrlExT; | |
4642 | |
4643 // Note: TBase here is for CTreeViewCtrlExT, and not for CTreeItemT itself | |
4644 template <class TBase> | |
4645 class CTreeItemT | |
4646 { | |
4647 public: | |
4648 HTREEITEM m_hTreeItem; | |
4649 CTreeViewCtrlExT<TBase>* m_pTreeView; | |
4650 | |
4651 // Construction | |
4652 CTreeItemT(HTREEITEM hTreeItem = NULL, CTreeViewCtrlExT<TBase>* pTreeVie
w = NULL) : m_hTreeItem(hTreeItem), m_pTreeView(pTreeView) | |
4653 { } | |
4654 | |
4655 CTreeItemT(const CTreeItemT<TBase>& posSrc) | |
4656 { | |
4657 *this = posSrc; | |
4658 } | |
4659 | |
4660 operator HTREEITEM() { return m_hTreeItem; } | |
4661 | |
4662 CTreeItemT<TBase>& operator =(const CTreeItemT<TBase>& itemSrc) | |
4663 { | |
4664 m_hTreeItem = itemSrc.m_hTreeItem; | |
4665 m_pTreeView = itemSrc.m_pTreeView; | |
4666 return *this; | |
4667 } | |
4668 | |
4669 // Attributes | |
4670 CTreeViewCtrlExT<TBase>* GetTreeView() const { return m_pTreeView; } | |
4671 | |
4672 BOOL operator !() const { return m_hTreeItem == NULL; } | |
4673 | |
4674 BOOL IsNull() const { return m_hTreeItem == NULL; } | |
4675 | |
4676 BOOL GetRect(LPRECT lpRect, BOOL bTextOnly) const; | |
4677 BOOL GetText(LPTSTR lpstrText, int nLen) const; | |
4678 #ifndef _ATL_NO_COM | |
4679 BOOL GetText(BSTR& bstrText) const; | |
4680 #endif // !_ATL_NO_COM | |
4681 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) | |
4682 BOOL GetText(_CSTRING_NS::CString& strText) const; | |
4683 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) | |
4684 BOOL SetText(LPCTSTR lpszItem); | |
4685 BOOL GetImage(int& nImage, int& nSelectedImage) const; | |
4686 BOOL SetImage(int nImage, int nSelectedImage); | |
4687 UINT GetState(UINT nStateMask) const; | |
4688 BOOL SetState(UINT nState, UINT nStateMask); | |
4689 DWORD_PTR GetData() const; | |
4690 BOOL SetData(DWORD_PTR dwData); | |
4691 BOOL SetItem(UINT nMask, LPCTSTR lpszItem, int nImage, int nSelectedImag
e, UINT nState, UINT nStateMask, LPARAM lParam); | |
4692 | |
4693 // Operations | |
4694 CTreeItemT<TBase> InsertAfter(LPCTSTR lpstrItem, HTREEITEM hItemAfter, i
nt nImageIndex) | |
4695 { | |
4696 return _Insert(lpstrItem, nImageIndex, hItemAfter); | |
4697 } | |
4698 | |
4699 CTreeItemT<TBase> AddHead(LPCTSTR lpstrItem, int nImageIndex) | |
4700 { | |
4701 return _Insert(lpstrItem, nImageIndex, TVI_FIRST); | |
4702 } | |
4703 | |
4704 CTreeItemT<TBase> AddTail(LPCTSTR lpstrItem, int nImageIndex) | |
4705 { | |
4706 return _Insert(lpstrItem, nImageIndex, TVI_LAST); | |
4707 } | |
4708 | |
4709 CTreeItemT<TBase> GetChild() const; | |
4710 CTreeItemT<TBase> GetNext(UINT nCode) const; | |
4711 CTreeItemT<TBase> GetNextSibling() const; | |
4712 CTreeItemT<TBase> GetPrevSibling() const; | |
4713 CTreeItemT<TBase> GetParent() const; | |
4714 CTreeItemT<TBase> GetFirstVisible() const; | |
4715 CTreeItemT<TBase> GetNextVisible() const; | |
4716 CTreeItemT<TBase> GetPrevVisible() const; | |
4717 CTreeItemT<TBase> GetSelected() const; | |
4718 CTreeItemT<TBase> GetDropHilight() const; | |
4719 CTreeItemT<TBase> GetRoot() const; | |
4720 #if !defined(_WIN32_WCE) && (_WIN32_IE >= 0x0400) | |
4721 CTreeItemT<TBase> GetLastVisible() const; | |
4722 #endif // !defined(_WIN32_WCE) && (_WIN32_IE >= 0x0400) | |
4723 #if (_WIN32_IE >= 0x0600) | |
4724 CTreeItemT<TBase> GetNextSelected() const; | |
4725 #endif // (_WIN32_IE >= 0x0600) | |
4726 BOOL HasChildren() const; | |
4727 BOOL Delete(); | |
4728 BOOL Expand(UINT nCode = TVE_EXPAND); | |
4729 BOOL Select(UINT nCode); | |
4730 BOOL Select(); | |
4731 BOOL SelectDropTarget(); | |
4732 BOOL SelectSetFirstVisible(); | |
4733 HWND EditLabel(); | |
4734 HIMAGELIST CreateDragImage(); | |
4735 BOOL SortChildren(BOOL bRecurse = FALSE); | |
4736 BOOL EnsureVisible(); | |
4737 CTreeItemT<TBase> _Insert(LPCTSTR lpstrItem, int nImageIndex, HTREEITEM
hItemAfter); | |
4738 int GetImageIndex() const; | |
4739 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
4740 BOOL SetInsertMark(BOOL bAfter); | |
4741 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
4742 #if (_WIN32_WINNT >= 0x0501) | |
4743 UINT MapHTREEITEMToAccID() const; | |
4744 #endif // (_WIN32_WINNT >= 0x0501) | |
4745 #if (_WIN32_WINNT >= 0x0600) | |
4746 void ShowInfoTip(); | |
4747 BOOL GetPartRect(TVITEMPART partID, LPRECT lpRect) const; | |
4748 #endif // (_WIN32_WINNT >= 0x0600) | |
4749 }; | |
4750 | |
4751 typedef CTreeItemT<ATL::CWindow> CTreeItem; | |
4752 | |
4753 | |
4754 template <class TBase> | |
4755 class CTreeViewCtrlExT : public CTreeViewCtrlT< TBase > | |
4756 { | |
4757 public: | |
4758 // Constructors | |
4759 CTreeViewCtrlExT(HWND hWnd = NULL) : CTreeViewCtrlT< TBase >(hWnd) | |
4760 { } | |
4761 | |
4762 CTreeViewCtrlExT< TBase >& operator =(HWND hWnd) | |
4763 { | |
4764 m_hWnd = hWnd; | |
4765 return *this; | |
4766 } | |
4767 | |
4768 // Operations (overides that return CTreeItem) | |
4769 CTreeItemT<TBase> InsertItem(LPTVINSERTSTRUCT lpInsertStruct) | |
4770 { | |
4771 ATLASSERT(::IsWindow(m_hWnd)); | |
4772 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_INSER
TITEM, 0, (LPARAM)lpInsertStruct); | |
4773 return CTreeItemT<TBase>(hTreeItem, this); | |
4774 } | |
4775 | |
4776 CTreeItemT<TBase> InsertItem(LPCTSTR lpszItem, int nImage, | |
4777 int nSelectedImage, HTREEITEM hParent, HTREEITEM hInsertAfter) | |
4778 { | |
4779 ATLASSERT(::IsWindow(m_hWnd)); | |
4780 return InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE, l
pszItem, nImage, nSelectedImage, 0, 0, 0, hParent, hInsertAfter); | |
4781 } | |
4782 | |
4783 CTreeItemT<TBase> InsertItem(LPCTSTR lpszItem, HTREEITEM hParent, HTREEI
TEM hInsertAfter) | |
4784 { | |
4785 ATLASSERT(::IsWindow(m_hWnd)); | |
4786 return InsertItem(TVIF_TEXT, lpszItem, 0, 0, 0, 0, 0, hParent, h
InsertAfter); | |
4787 } | |
4788 | |
4789 CTreeItemT<TBase> GetNextItem(HTREEITEM hItem, UINT nCode) const | |
4790 { | |
4791 ATLASSERT(::IsWindow(m_hWnd)); | |
4792 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNE
XTITEM, nCode, (LPARAM)hItem); | |
4793 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)th
is); | |
4794 } | |
4795 | |
4796 CTreeItemT<TBase> GetChildItem(HTREEITEM hItem) const | |
4797 { | |
4798 ATLASSERT(::IsWindow(m_hWnd)); | |
4799 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNE
XTITEM, TVGN_CHILD, (LPARAM)hItem); | |
4800 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)th
is); | |
4801 } | |
4802 | |
4803 CTreeItemT<TBase> GetNextSiblingItem(HTREEITEM hItem) const | |
4804 { | |
4805 ATLASSERT(::IsWindow(m_hWnd)); | |
4806 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNE
XTITEM, TVGN_NEXT, (LPARAM)hItem); | |
4807 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)th
is); | |
4808 } | |
4809 | |
4810 CTreeItemT<TBase> GetPrevSiblingItem(HTREEITEM hItem) const | |
4811 { | |
4812 ATLASSERT(::IsWindow(m_hWnd)); | |
4813 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNE
XTITEM, TVGN_PREVIOUS, (LPARAM)hItem); | |
4814 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)th
is); | |
4815 } | |
4816 | |
4817 CTreeItemT<TBase> GetParentItem(HTREEITEM hItem) const | |
4818 { | |
4819 ATLASSERT(::IsWindow(m_hWnd)); | |
4820 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNE
XTITEM, TVGN_PARENT, (LPARAM)hItem); | |
4821 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)th
is); | |
4822 } | |
4823 | |
4824 CTreeItemT<TBase> GetFirstVisibleItem() const | |
4825 { | |
4826 ATLASSERT(::IsWindow(m_hWnd)); | |
4827 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNE
XTITEM, TVGN_FIRSTVISIBLE, 0L); | |
4828 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)th
is); | |
4829 } | |
4830 | |
4831 CTreeItemT<TBase> GetNextVisibleItem(HTREEITEM hItem) const | |
4832 { | |
4833 ATLASSERT(::IsWindow(m_hWnd)); | |
4834 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNE
XTITEM, TVGN_NEXTVISIBLE, (LPARAM)hItem); | |
4835 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)th
is); | |
4836 } | |
4837 | |
4838 CTreeItemT<TBase> GetPrevVisibleItem(HTREEITEM hItem) const | |
4839 { | |
4840 ATLASSERT(::IsWindow(m_hWnd)); | |
4841 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNE
XTITEM, TVGN_PREVIOUSVISIBLE, (LPARAM)hItem); | |
4842 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)th
is); | |
4843 } | |
4844 | |
4845 CTreeItemT<TBase> GetSelectedItem() const | |
4846 { | |
4847 ATLASSERT(::IsWindow(m_hWnd)); | |
4848 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNE
XTITEM, TVGN_CARET, 0L); | |
4849 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)th
is); | |
4850 } | |
4851 | |
4852 CTreeItemT<TBase> GetDropHilightItem() const | |
4853 { | |
4854 ATLASSERT(::IsWindow(m_hWnd)); | |
4855 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNE
XTITEM, TVGN_DROPHILITE, 0L); | |
4856 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)th
is); | |
4857 } | |
4858 | |
4859 CTreeItemT<TBase> GetRootItem() const | |
4860 { | |
4861 ATLASSERT(::IsWindow(m_hWnd)); | |
4862 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNE
XTITEM, TVGN_ROOT, 0L); | |
4863 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)th
is); | |
4864 } | |
4865 | |
4866 #if !defined(_WIN32_WCE) && (_WIN32_IE >= 0x0400) | |
4867 CTreeItemT<TBase> GetLastVisibleItem() const | |
4868 { | |
4869 ATLASSERT(::IsWindow(m_hWnd)); | |
4870 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNE
XTITEM, TVGN_LASTVISIBLE, 0L); | |
4871 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)th
is); | |
4872 } | |
4873 #endif // !defined(_WIN32_WCE) && (_WIN32_IE >= 0x0400) | |
4874 | |
4875 #if (_WIN32_IE >= 0x0600) | |
4876 CTreeItemT<TBase> GetNextSelectedItem() const | |
4877 { | |
4878 ATLASSERT(::IsWindow(m_hWnd)); | |
4879 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNE
XTITEM, TVGN_NEXTSELECTED, 0L); | |
4880 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)th
is); | |
4881 } | |
4882 #endif // (_WIN32_IE >= 0x0600) | |
4883 | |
4884 CTreeItemT<TBase> HitTest(TVHITTESTINFO* pHitTestInfo) const | |
4885 { | |
4886 ATLASSERT(::IsWindow(m_hWnd)); | |
4887 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_HITTE
ST, 0, (LPARAM)pHitTestInfo); | |
4888 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)th
is); | |
4889 } | |
4890 | |
4891 CTreeItemT<TBase> InsertItem(UINT nMask, LPCTSTR lpszItem, int nImage, | |
4892 int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam, | |
4893 HTREEITEM hParent, HTREEITEM hInsertAfter) | |
4894 { | |
4895 ATLASSERT(::IsWindow(m_hWnd)); | |
4896 TVINSERTSTRUCT tvis = { 0 }; | |
4897 tvis.hParent = hParent; | |
4898 tvis.hInsertAfter = hInsertAfter; | |
4899 tvis.item.mask = nMask; | |
4900 tvis.item.pszText = (LPTSTR) lpszItem; | |
4901 tvis.item.iImage = nImage; | |
4902 tvis.item.iSelectedImage = nSelectedImage; | |
4903 tvis.item.state = nState; | |
4904 tvis.item.stateMask = nStateMask; | |
4905 tvis.item.lParam = lParam; | |
4906 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_INSER
TITEM, 0, (LPARAM)&tvis); | |
4907 return CTreeItemT<TBase>(hTreeItem, this); | |
4908 } | |
4909 | |
4910 CTreeItemT<TBase> HitTest(POINT pt, UINT* pFlags) const | |
4911 { | |
4912 ATLASSERT(::IsWindow(m_hWnd)); | |
4913 TVHITTESTINFO hti = { 0 }; | |
4914 hti.pt = pt; | |
4915 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_HITTE
ST, 0, (LPARAM)&hti); | |
4916 if (pFlags != NULL) | |
4917 *pFlags = hti.flags; | |
4918 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)th
is); | |
4919 } | |
4920 | |
4921 #if (_WIN32_WINNT >= 0x0501) | |
4922 CTreeItemT<TBase> MapAccIDToHTREEITEM(UINT uID) const | |
4923 { | |
4924 ATLASSERT(::IsWindow(m_hWnd)); | |
4925 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_MAPAC
CIDTOHTREEITEM, uID, 0L); | |
4926 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)th
is); | |
4927 } | |
4928 #endif // (_WIN32_WINNT >= 0x0501) | |
4929 }; | |
4930 | |
4931 typedef CTreeViewCtrlExT<ATL::CWindow> CTreeViewCtrlEx; | |
4932 | |
4933 | |
4934 // CTreeItem inline methods | |
4935 template <class TBase> | |
4936 inline BOOL CTreeItemT<TBase>::GetRect(LPRECT lpRect, BOOL bTextOnly) const | |
4937 { | |
4938 ATLASSERT(m_pTreeView != NULL); | |
4939 return m_pTreeView->GetItemRect(m_hTreeItem,lpRect,bTextOnly); | |
4940 } | |
4941 | |
4942 template <class TBase> | |
4943 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetNext(UINT nCode) const | |
4944 { | |
4945 ATLASSERT(m_pTreeView != NULL); | |
4946 return m_pTreeView->GetNextItem(m_hTreeItem,nCode); | |
4947 } | |
4948 | |
4949 template <class TBase> | |
4950 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetChild() const | |
4951 { | |
4952 ATLASSERT(m_pTreeView != NULL); | |
4953 return m_pTreeView->GetChildItem(m_hTreeItem); | |
4954 } | |
4955 | |
4956 template <class TBase> | |
4957 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetNextSibling() const | |
4958 { | |
4959 ATLASSERT(m_pTreeView != NULL); | |
4960 return m_pTreeView->GetNextSiblingItem(m_hTreeItem); | |
4961 } | |
4962 | |
4963 template <class TBase> | |
4964 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetPrevSibling() const | |
4965 { | |
4966 ATLASSERT(m_pTreeView != NULL); | |
4967 return m_pTreeView->GetPrevSiblingItem(m_hTreeItem); | |
4968 } | |
4969 | |
4970 template <class TBase> | |
4971 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetParent() const | |
4972 { | |
4973 ATLASSERT(m_pTreeView != NULL); | |
4974 return m_pTreeView->GetParentItem(m_hTreeItem); | |
4975 } | |
4976 | |
4977 template <class TBase> | |
4978 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetFirstVisible() const | |
4979 { | |
4980 ATLASSERT(m_pTreeView != NULL); | |
4981 return m_pTreeView->GetFirstVisibleItem(); | |
4982 } | |
4983 | |
4984 template <class TBase> | |
4985 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetNextVisible() const | |
4986 { | |
4987 ATLASSERT(m_pTreeView != NULL); | |
4988 return m_pTreeView->GetNextVisibleItem(m_hTreeItem); | |
4989 } | |
4990 | |
4991 template <class TBase> | |
4992 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetPrevVisible() const | |
4993 { | |
4994 ATLASSERT(m_pTreeView != NULL); | |
4995 return m_pTreeView->GetPrevVisibleItem(m_hTreeItem); | |
4996 } | |
4997 | |
4998 template <class TBase> | |
4999 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetSelected() const | |
5000 { | |
5001 ATLASSERT(m_pTreeView != NULL); | |
5002 return m_pTreeView->GetSelectedItem(); | |
5003 } | |
5004 | |
5005 template <class TBase> | |
5006 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetDropHilight() const | |
5007 { | |
5008 ATLASSERT(m_pTreeView != NULL); | |
5009 return m_pTreeView->GetDropHilightItem(); | |
5010 } | |
5011 | |
5012 template <class TBase> | |
5013 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetRoot() const | |
5014 { | |
5015 ATLASSERT(m_pTreeView != NULL); | |
5016 return m_pTreeView->GetRootItem(); | |
5017 } | |
5018 | |
5019 #if !defined(_WIN32_WCE) && (_WIN32_IE >= 0x0400) | |
5020 template <class TBase> | |
5021 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetLastVisible() const | |
5022 { | |
5023 ATLASSERT(m_pTreeView != NULL); | |
5024 return m_pTreeView->GetLastVisibleItem(); | |
5025 } | |
5026 #endif // !defined(_WIN32_WCE) && (_WIN32_IE >= 0x0400) | |
5027 | |
5028 #if (_WIN32_IE >= 0x0600) | |
5029 template <class TBase> | |
5030 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetNextSelected() const | |
5031 { | |
5032 ATLASSERT(m_pTreeView != NULL); | |
5033 return m_pTreeView->GetNextSelectedItem(); | |
5034 } | |
5035 #endif // (_WIN32_IE >= 0x0600) | |
5036 | |
5037 template <class TBase> | |
5038 inline BOOL CTreeItemT<TBase>::GetText(LPTSTR lpstrText, int nLen) const | |
5039 { | |
5040 ATLASSERT(m_pTreeView != NULL); | |
5041 return m_pTreeView->GetItemText(m_hTreeItem, lpstrText, nLen); | |
5042 } | |
5043 | |
5044 #ifndef _ATL_NO_COM | |
5045 #ifdef _OLEAUTO_H_ | |
5046 template <class TBase> | |
5047 inline BOOL CTreeItemT<TBase>::GetText(BSTR& bstrText) const | |
5048 { | |
5049 ATLASSERT(m_pTreeView != NULL); | |
5050 return m_pTreeView->GetItemText(m_hTreeItem, bstrText); | |
5051 } | |
5052 #endif // _OLEAUTO_H_ | |
5053 #endif // !_ATL_NO_COM | |
5054 | |
5055 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) | |
5056 template <class TBase> | |
5057 inline BOOL CTreeItemT<TBase>::GetText(_CSTRING_NS::CString& strText) const | |
5058 { | |
5059 ATLASSERT(m_pTreeView != NULL); | |
5060 return m_pTreeView->GetItemText(m_hTreeItem, strText); | |
5061 } | |
5062 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) | |
5063 | |
5064 template <class TBase> | |
5065 inline BOOL CTreeItemT<TBase>::GetImage(int& nImage, int& nSelectedImage) const | |
5066 { | |
5067 ATLASSERT(m_pTreeView != NULL); | |
5068 return m_pTreeView->GetItemImage(m_hTreeItem,nImage,nSelectedImage); | |
5069 } | |
5070 | |
5071 template <class TBase> | |
5072 inline UINT CTreeItemT<TBase>::GetState(UINT nStateMask) const | |
5073 { | |
5074 ATLASSERT(m_pTreeView != NULL); | |
5075 return m_pTreeView->GetItemState(m_hTreeItem,nStateMask); | |
5076 } | |
5077 | |
5078 template <class TBase> | |
5079 inline DWORD_PTR CTreeItemT<TBase>::GetData() const | |
5080 { | |
5081 ATLASSERT(m_pTreeView != NULL); | |
5082 return m_pTreeView->GetItemData(m_hTreeItem); | |
5083 } | |
5084 | |
5085 template <class TBase> | |
5086 inline BOOL CTreeItemT<TBase>::SetItem(UINT nMask, LPCTSTR lpszItem, int nImage, | |
5087 int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam) | |
5088 { | |
5089 ATLASSERT(m_pTreeView != NULL); | |
5090 return m_pTreeView->SetItem(m_hTreeItem, nMask, lpszItem, nImage, nSelec
tedImage, nState, nStateMask, lParam); | |
5091 } | |
5092 | |
5093 template <class TBase> | |
5094 inline BOOL CTreeItemT<TBase>::SetText(LPCTSTR lpszItem) | |
5095 { | |
5096 ATLASSERT(m_pTreeView != NULL); | |
5097 return m_pTreeView->SetItemText(m_hTreeItem,lpszItem); | |
5098 } | |
5099 | |
5100 template <class TBase> | |
5101 inline BOOL CTreeItemT<TBase>::SetImage(int nImage, int nSelectedImage) | |
5102 { | |
5103 ATLASSERT(m_pTreeView != NULL); | |
5104 return m_pTreeView->SetItemImage(m_hTreeItem,nImage,nSelectedImage); | |
5105 } | |
5106 | |
5107 template <class TBase> | |
5108 inline BOOL CTreeItemT<TBase>::SetState(UINT nState, UINT nStateMask) | |
5109 { | |
5110 ATLASSERT(m_pTreeView != NULL); | |
5111 return m_pTreeView->SetItemState(m_hTreeItem,nState,nStateMask); | |
5112 } | |
5113 | |
5114 template <class TBase> | |
5115 inline BOOL CTreeItemT<TBase>::SetData(DWORD_PTR dwData) | |
5116 { | |
5117 ATLASSERT(m_pTreeView != NULL); | |
5118 return m_pTreeView->SetItemData(m_hTreeItem,dwData); | |
5119 } | |
5120 | |
5121 template <class TBase> | |
5122 inline BOOL CTreeItemT<TBase>::HasChildren() const | |
5123 { | |
5124 ATLASSERT(m_pTreeView != NULL); | |
5125 return m_pTreeView->ItemHasChildren(m_hTreeItem); | |
5126 } | |
5127 | |
5128 template <class TBase> | |
5129 inline BOOL CTreeItemT<TBase>::Delete() | |
5130 { | |
5131 ATLASSERT(m_pTreeView != NULL); | |
5132 return m_pTreeView->DeleteItem(m_hTreeItem); | |
5133 } | |
5134 | |
5135 template <class TBase> | |
5136 inline BOOL CTreeItemT<TBase>::Expand(UINT nCode /*= TVE_EXPAND*/) | |
5137 { | |
5138 ATLASSERT(m_pTreeView != NULL); | |
5139 return m_pTreeView->Expand(m_hTreeItem,nCode); | |
5140 } | |
5141 | |
5142 template <class TBase> | |
5143 inline BOOL CTreeItemT<TBase>::Select(UINT nCode) | |
5144 { | |
5145 ATLASSERT(m_pTreeView != NULL); | |
5146 return m_pTreeView->Select(m_hTreeItem,nCode); | |
5147 } | |
5148 | |
5149 template <class TBase> | |
5150 inline BOOL CTreeItemT<TBase>::Select() | |
5151 { | |
5152 ATLASSERT(m_pTreeView != NULL); | |
5153 return m_pTreeView->SelectItem(m_hTreeItem); | |
5154 } | |
5155 | |
5156 template <class TBase> | |
5157 inline BOOL CTreeItemT<TBase>::SelectDropTarget() | |
5158 { | |
5159 ATLASSERT(m_pTreeView != NULL); | |
5160 return m_pTreeView->SelectDropTarget(m_hTreeItem); | |
5161 } | |
5162 | |
5163 template <class TBase> | |
5164 inline BOOL CTreeItemT<TBase>::SelectSetFirstVisible() | |
5165 { | |
5166 ATLASSERT(m_pTreeView != NULL); | |
5167 return m_pTreeView->SelectSetFirstVisible(m_hTreeItem); | |
5168 } | |
5169 | |
5170 template <class TBase> | |
5171 inline HWND CTreeItemT<TBase>::EditLabel() | |
5172 { | |
5173 ATLASSERT(m_pTreeView != NULL); | |
5174 return m_pTreeView->EditLabel(m_hTreeItem); | |
5175 } | |
5176 | |
5177 template <class TBase> | |
5178 inline HIMAGELIST CTreeItemT<TBase>::CreateDragImage() | |
5179 { | |
5180 ATLASSERT(m_pTreeView != NULL); | |
5181 return m_pTreeView->CreateDragImage(m_hTreeItem); | |
5182 } | |
5183 | |
5184 template <class TBase> | |
5185 inline BOOL CTreeItemT<TBase>::SortChildren(BOOL bRecurse /*= FALSE*/) | |
5186 { | |
5187 ATLASSERT(m_pTreeView != NULL); | |
5188 return m_pTreeView->SortChildren(m_hTreeItem, bRecurse); | |
5189 } | |
5190 | |
5191 template <class TBase> | |
5192 inline BOOL CTreeItemT<TBase>::EnsureVisible() | |
5193 { | |
5194 ATLASSERT(m_pTreeView != NULL); | |
5195 return m_pTreeView->EnsureVisible(m_hTreeItem); | |
5196 } | |
5197 | |
5198 template <class TBase> | |
5199 inline CTreeItemT<TBase> CTreeItemT<TBase>::_Insert(LPCTSTR lpstrItem, int nImag
eIndex, HTREEITEM hItemAfter) | |
5200 { | |
5201 ATLASSERT(m_pTreeView != NULL); | |
5202 TVINSERTSTRUCT ins = { 0 }; | |
5203 ins.hParent = m_hTreeItem; | |
5204 ins.hInsertAfter = hItemAfter; | |
5205 ins.item.mask = TVIF_TEXT; | |
5206 ins.item.pszText = (LPTSTR)lpstrItem; | |
5207 if(nImageIndex != -1) | |
5208 { | |
5209 ins.item.mask |= TVIF_IMAGE | TVIF_SELECTEDIMAGE; | |
5210 ins.item.iImage = nImageIndex; | |
5211 ins.item.iSelectedImage = nImageIndex; | |
5212 } | |
5213 return CTreeItemT<TBase>(m_pTreeView->InsertItem(&ins), m_pTreeView); | |
5214 } | |
5215 | |
5216 template <class TBase> | |
5217 inline int CTreeItemT<TBase>::GetImageIndex() const | |
5218 { | |
5219 ATLASSERT(m_pTreeView != NULL); | |
5220 TVITEM item = { 0 }; | |
5221 item.mask = TVIF_HANDLE | TVIF_IMAGE; | |
5222 item.hItem = m_hTreeItem; | |
5223 m_pTreeView->GetItem(&item); | |
5224 return item.iImage; | |
5225 } | |
5226 | |
5227 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
5228 template <class TBase> | |
5229 inline BOOL CTreeItemT<TBase>::SetInsertMark(BOOL bAfter) | |
5230 { | |
5231 ATLASSERT(m_pTreeView != NULL); | |
5232 return m_pTreeView->SetInsertMark(m_hTreeItem, bAfter); | |
5233 } | |
5234 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
5235 | |
5236 #if (_WIN32_WINNT >= 0x0501) | |
5237 template <class TBase> | |
5238 inline UINT CTreeItemT<TBase>::MapHTREEITEMToAccID() const | |
5239 { | |
5240 ATLASSERT(m_pTreeView != NULL); | |
5241 return m_pTreeView->MapHTREEITEMToAccID(m_hTreeItem); | |
5242 } | |
5243 #endif // (_WIN32_WINNT >= 0x0501) | |
5244 | |
5245 #if (_WIN32_WINNT >= 0x0600) | |
5246 template <class TBase> | |
5247 inline void CTreeItemT<TBase>::ShowInfoTip() | |
5248 { | |
5249 ATLASSERT(m_pTreeView != NULL); | |
5250 m_pTreeView->ShowInfoTip(m_hTreeItem); | |
5251 } | |
5252 | |
5253 template <class TBase> | |
5254 inline BOOL CTreeItemT<TBase>::GetPartRect(TVITEMPART partID, LPRECT lpRect) con
st | |
5255 { | |
5256 ATLASSERT(m_pTreeView != NULL); | |
5257 return m_pTreeView->GetItemPartRect(m_hTreeItem, partID, lpRect); | |
5258 } | |
5259 #endif // (_WIN32_WINNT >= 0x0600) | |
5260 | |
5261 | |
5262 /////////////////////////////////////////////////////////////////////////////// | |
5263 // CToolBarCtrl | |
5264 | |
5265 template <class TBase> | |
5266 class CToolBarCtrlT : public TBase | |
5267 { | |
5268 public: | |
5269 // Construction | |
5270 CToolBarCtrlT(HWND hWnd = NULL) : TBase(hWnd) | |
5271 { } | |
5272 | |
5273 CToolBarCtrlT< TBase >& operator =(HWND hWnd) | |
5274 { | |
5275 m_hWnd = hWnd; | |
5276 return *this; | |
5277 } | |
5278 | |
5279 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
5280 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
5281 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
5282 { | |
5283 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
5284 } | |
5285 | |
5286 // Attributes | |
5287 static LPCTSTR GetWndClassName() | |
5288 { | |
5289 return TOOLBARCLASSNAME; | |
5290 } | |
5291 | |
5292 BOOL IsButtonEnabled(int nID) const | |
5293 { | |
5294 ATLASSERT(::IsWindow(m_hWnd)); | |
5295 return (BOOL)::SendMessage(m_hWnd, TB_ISBUTTONENABLED, nID, 0L); | |
5296 } | |
5297 | |
5298 BOOL IsButtonChecked(int nID) const | |
5299 { | |
5300 ATLASSERT(::IsWindow(m_hWnd)); | |
5301 return (BOOL)::SendMessage(m_hWnd, TB_ISBUTTONCHECKED, nID, 0L); | |
5302 } | |
5303 | |
5304 BOOL IsButtonPressed(int nID) const | |
5305 { | |
5306 ATLASSERT(::IsWindow(m_hWnd)); | |
5307 return (BOOL)::SendMessage(m_hWnd, TB_ISBUTTONPRESSED, nID, 0L); | |
5308 } | |
5309 | |
5310 BOOL IsButtonHidden(int nID) const | |
5311 { | |
5312 ATLASSERT(::IsWindow(m_hWnd)); | |
5313 return(BOOL) ::SendMessage(m_hWnd, TB_ISBUTTONHIDDEN, nID, 0L); | |
5314 } | |
5315 | |
5316 BOOL IsButtonIndeterminate(int nID) const | |
5317 { | |
5318 ATLASSERT(::IsWindow(m_hWnd)); | |
5319 return (BOOL)::SendMessage(m_hWnd, TB_ISBUTTONINDETERMINATE, nID
, 0L); | |
5320 } | |
5321 | |
5322 int GetState(int nID) const | |
5323 { | |
5324 ATLASSERT(::IsWindow(m_hWnd)); | |
5325 return (int)::SendMessage(m_hWnd, TB_GETSTATE, nID, 0L); | |
5326 } | |
5327 | |
5328 BOOL SetState(int nID, UINT nState) | |
5329 { | |
5330 ATLASSERT(::IsWindow(m_hWnd)); | |
5331 return (BOOL)::SendMessage(m_hWnd, TB_SETSTATE, nID, MAKELPARAM(
nState, 0)); | |
5332 } | |
5333 | |
5334 BOOL GetButton(int nIndex, LPTBBUTTON lpButton) const | |
5335 { | |
5336 ATLASSERT(::IsWindow(m_hWnd)); | |
5337 return (BOOL)::SendMessage(m_hWnd, TB_GETBUTTON, nIndex, (LPARAM
)lpButton); | |
5338 } | |
5339 | |
5340 int GetButtonCount() const | |
5341 { | |
5342 ATLASSERT(::IsWindow(m_hWnd)); | |
5343 return (int)::SendMessage(m_hWnd, TB_BUTTONCOUNT, 0, 0L); | |
5344 } | |
5345 | |
5346 BOOL GetItemRect(int nIndex, LPRECT lpRect) const | |
5347 { | |
5348 ATLASSERT(::IsWindow(m_hWnd)); | |
5349 return (BOOL)::SendMessage(m_hWnd, TB_GETITEMRECT, nIndex, (LPAR
AM)lpRect); | |
5350 } | |
5351 | |
5352 void SetButtonStructSize(int nSize = sizeof(TBBUTTON)) | |
5353 { | |
5354 ATLASSERT(::IsWindow(m_hWnd)); | |
5355 ::SendMessage(m_hWnd, TB_BUTTONSTRUCTSIZE, nSize, 0L); | |
5356 } | |
5357 | |
5358 BOOL SetButtonSize(SIZE size) | |
5359 { | |
5360 ATLASSERT(::IsWindow(m_hWnd)); | |
5361 return (BOOL)::SendMessage(m_hWnd, TB_SETBUTTONSIZE, 0, MAKELPAR
AM(size.cx, size.cy)); | |
5362 } | |
5363 | |
5364 BOOL SetButtonSize(int cx, int cy) | |
5365 { | |
5366 ATLASSERT(::IsWindow(m_hWnd)); | |
5367 return (BOOL)::SendMessage(m_hWnd, TB_SETBUTTONSIZE, 0, MAKELPAR
AM(cx, cy)); | |
5368 } | |
5369 | |
5370 BOOL SetBitmapSize(SIZE size) | |
5371 { | |
5372 ATLASSERT(::IsWindow(m_hWnd)); | |
5373 return (BOOL)::SendMessage(m_hWnd, TB_SETBITMAPSIZE, 0, MAKELPAR
AM(size.cx, size.cy)); | |
5374 } | |
5375 | |
5376 BOOL SetBitmapSize(int cx, int cy) | |
5377 { | |
5378 ATLASSERT(::IsWindow(m_hWnd)); | |
5379 return (BOOL)::SendMessage(m_hWnd, TB_SETBITMAPSIZE, 0, MAKELPAR
AM(cx, cy)); | |
5380 } | |
5381 | |
5382 #ifndef _WIN32_WCE | |
5383 CToolTipCtrl GetToolTips() const | |
5384 { | |
5385 ATLASSERT(::IsWindow(m_hWnd)); | |
5386 return CToolTipCtrl((HWND)::SendMessage(m_hWnd, TB_GETTOOLTIPS,
0, 0L)); | |
5387 } | |
5388 | |
5389 void SetToolTips(HWND hWndToolTip) | |
5390 { | |
5391 ATLASSERT(::IsWindow(m_hWnd)); | |
5392 ::SendMessage(m_hWnd, TB_SETTOOLTIPS, (WPARAM)hWndToolTip, 0L); | |
5393 } | |
5394 #endif // !_WIN32_WCE | |
5395 | |
5396 void SetNotifyWnd(HWND hWnd) | |
5397 { | |
5398 ATLASSERT(::IsWindow(m_hWnd)); | |
5399 ::SendMessage(m_hWnd, TB_SETPARENT, (WPARAM)hWnd, 0L); | |
5400 } | |
5401 | |
5402 int GetRows() const | |
5403 { | |
5404 ATLASSERT(::IsWindow(m_hWnd)); | |
5405 return (int)::SendMessage(m_hWnd, TB_GETROWS, 0, 0L); | |
5406 } | |
5407 | |
5408 void SetRows(int nRows, BOOL bLarger, LPRECT lpRect) | |
5409 { | |
5410 ATLASSERT(::IsWindow(m_hWnd)); | |
5411 ::SendMessage(m_hWnd, TB_SETROWS, MAKELPARAM(nRows, bLarger), (L
PARAM)lpRect); | |
5412 } | |
5413 | |
5414 BOOL SetCmdID(int nIndex, UINT nID) | |
5415 { | |
5416 ATLASSERT(::IsWindow(m_hWnd)); | |
5417 return (BOOL)::SendMessage(m_hWnd, TB_SETCMDID, nIndex, nID); | |
5418 } | |
5419 | |
5420 DWORD GetBitmapFlags() const | |
5421 { | |
5422 ATLASSERT(::IsWindow(m_hWnd)); | |
5423 return (DWORD)::SendMessage(m_hWnd, TB_GETBITMAPFLAGS, 0, 0L); | |
5424 } | |
5425 | |
5426 int GetBitmap(int nID) const | |
5427 { | |
5428 ATLASSERT(::IsWindow(m_hWnd)); | |
5429 return (int)::SendMessage(m_hWnd, TB_GETBITMAP, nID, 0L); | |
5430 } | |
5431 | |
5432 int GetButtonText(int nID, LPTSTR lpstrText) const | |
5433 { | |
5434 ATLASSERT(::IsWindow(m_hWnd)); | |
5435 return (int)::SendMessage(m_hWnd, TB_GETBUTTONTEXT, nID, (LPARAM
)lpstrText); | |
5436 } | |
5437 | |
5438 // nIndex - IE5 or higher only | |
5439 CImageList GetImageList(int nIndex = 0) const | |
5440 { | |
5441 ATLASSERT(::IsWindow(m_hWnd)); | |
5442 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TB_GETIMAGEL
IST, nIndex, 0L)); | |
5443 } | |
5444 | |
5445 // nIndex - IE5 or higher only | |
5446 CImageList SetImageList(HIMAGELIST hImageList, int nIndex = 0) | |
5447 { | |
5448 ATLASSERT(::IsWindow(m_hWnd)); | |
5449 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TB_SETIMAGEL
IST, nIndex, (LPARAM)hImageList)); | |
5450 } | |
5451 | |
5452 // nIndex - IE5 or higher only | |
5453 CImageList GetDisabledImageList(int nIndex = 0) const | |
5454 { | |
5455 ATLASSERT(::IsWindow(m_hWnd)); | |
5456 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TB_GETDISABL
EDIMAGELIST, nIndex, 0L)); | |
5457 } | |
5458 | |
5459 // nIndex - IE5 or higher only | |
5460 CImageList SetDisabledImageList(HIMAGELIST hImageList, int nIndex = 0) | |
5461 { | |
5462 ATLASSERT(::IsWindow(m_hWnd)); | |
5463 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TB_SETDISABL
EDIMAGELIST, nIndex, (LPARAM)hImageList)); | |
5464 } | |
5465 | |
5466 #ifndef _WIN32_WCE | |
5467 // nIndex - IE5 or higher only | |
5468 CImageList GetHotImageList(int nIndex = 0) const | |
5469 { | |
5470 ATLASSERT(::IsWindow(m_hWnd)); | |
5471 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TB_GETHOTIMA
GELIST, nIndex, 0L)); | |
5472 } | |
5473 | |
5474 // nIndex - IE5 or higher only | |
5475 CImageList SetHotImageList(HIMAGELIST hImageList, int nIndex = 0) | |
5476 { | |
5477 ATLASSERT(::IsWindow(m_hWnd)); | |
5478 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TB_SETHOTIMA
GELIST, nIndex, (LPARAM)hImageList)); | |
5479 } | |
5480 #endif // !_WIN32_WCE | |
5481 | |
5482 DWORD GetStyle() const | |
5483 { | |
5484 ATLASSERT(::IsWindow(m_hWnd)); | |
5485 return (DWORD)::SendMessage(m_hWnd, TB_GETSTYLE, 0, 0L); | |
5486 } | |
5487 | |
5488 void SetStyle(DWORD dwStyle) | |
5489 { | |
5490 ATLASSERT(::IsWindow(m_hWnd)); | |
5491 ::SendMessage(m_hWnd, TB_SETSTYLE, 0, dwStyle); | |
5492 } | |
5493 | |
5494 DWORD GetButtonSize() const | |
5495 { | |
5496 ATLASSERT(::IsWindow(m_hWnd)); | |
5497 return (DWORD)::SendMessage(m_hWnd, TB_GETBUTTONSIZE, 0, 0L); | |
5498 } | |
5499 | |
5500 void GetButtonSize(SIZE& size) const | |
5501 { | |
5502 ATLASSERT(::IsWindow(m_hWnd)); | |
5503 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, TB_GETBUTTONSIZE, 0,
0L); | |
5504 size.cx = LOWORD(dwRet); | |
5505 size.cy = HIWORD(dwRet); | |
5506 } | |
5507 | |
5508 BOOL GetRect(int nID, LPRECT lpRect) const | |
5509 { | |
5510 ATLASSERT(::IsWindow(m_hWnd)); | |
5511 return (BOOL)::SendMessage(m_hWnd, TB_GETRECT, nID, (LPARAM)lpRe
ct); | |
5512 } | |
5513 | |
5514 int GetTextRows() const | |
5515 { | |
5516 ATLASSERT(::IsWindow(m_hWnd)); | |
5517 return (int)::SendMessage(m_hWnd, TB_GETTEXTROWS, 0, 0L); | |
5518 } | |
5519 | |
5520 BOOL SetButtonWidth(int cxMin, int cxMax) | |
5521 { | |
5522 ATLASSERT(::IsWindow(m_hWnd)); | |
5523 return (BOOL)::SendMessage(m_hWnd, TB_SETBUTTONWIDTH, 0, MAKELPA
RAM(cxMin, cxMax)); | |
5524 } | |
5525 | |
5526 BOOL SetIndent(int nIndent) | |
5527 { | |
5528 ATLASSERT(::IsWindow(m_hWnd)); | |
5529 return (BOOL)::SendMessage(m_hWnd, TB_SETINDENT, nIndent, 0L); | |
5530 } | |
5531 | |
5532 BOOL SetMaxTextRows(int nMaxTextRows) | |
5533 { | |
5534 ATLASSERT(::IsWindow(m_hWnd)); | |
5535 return (BOOL)::SendMessage(m_hWnd, TB_SETMAXTEXTROWS, nMaxTextRo
ws, 0L); | |
5536 } | |
5537 | |
5538 #if (_WIN32_IE >= 0x0400) | |
5539 #ifndef _WIN32_WCE | |
5540 BOOL GetAnchorHighlight() const | |
5541 { | |
5542 ATLASSERT(::IsWindow(m_hWnd)); | |
5543 return (BOOL)::SendMessage(m_hWnd, TB_GETANCHORHIGHLIGHT, 0, 0L)
; | |
5544 } | |
5545 | |
5546 BOOL SetAnchorHighlight(BOOL bEnable = TRUE) | |
5547 { | |
5548 ATLASSERT(::IsWindow(m_hWnd)); | |
5549 return (BOOL)::SendMessage(m_hWnd, TB_SETANCHORHIGHLIGHT, bEnabl
e, 0L); | |
5550 } | |
5551 #endif // !_WIN32_WCE | |
5552 | |
5553 int GetButtonInfo(int nID, LPTBBUTTONINFO lptbbi) const | |
5554 { | |
5555 ATLASSERT(::IsWindow(m_hWnd)); | |
5556 return (int)::SendMessage(m_hWnd, TB_GETBUTTONINFO, nID, (LPARAM
)lptbbi); | |
5557 } | |
5558 | |
5559 BOOL SetButtonInfo(int nID, LPTBBUTTONINFO lptbbi) | |
5560 { | |
5561 ATLASSERT(::IsWindow(m_hWnd)); | |
5562 return (BOOL)::SendMessage(m_hWnd, TB_SETBUTTONINFO, nID, (LPARA
M)lptbbi); | |
5563 } | |
5564 | |
5565 BOOL SetButtonInfo(int nID, DWORD dwMask, BYTE Style, BYTE State, LPCTST
R lpszItem, | |
5566 int iImage, WORD cx, int iCommand, DWORD_PTR lParam) | |
5567 { | |
5568 ATLASSERT(::IsWindow(m_hWnd)); | |
5569 TBBUTTONINFO tbbi = { 0 }; | |
5570 tbbi.cbSize = sizeof(TBBUTTONINFO); | |
5571 tbbi.dwMask = dwMask; | |
5572 tbbi.idCommand = iCommand; | |
5573 tbbi.iImage = iImage; | |
5574 tbbi.fsState = State; | |
5575 tbbi.fsStyle = Style; | |
5576 tbbi.cx = cx; | |
5577 tbbi.pszText = (LPTSTR) lpszItem; | |
5578 tbbi.lParam = lParam; | |
5579 return (BOOL)::SendMessage(m_hWnd, TB_SETBUTTONINFO, nID, (LPARA
M)&tbbi); | |
5580 } | |
5581 | |
5582 #ifndef _WIN32_WCE | |
5583 int GetHotItem() const | |
5584 { | |
5585 ATLASSERT(::IsWindow(m_hWnd)); | |
5586 return (int)::SendMessage(m_hWnd, TB_GETHOTITEM, 0, 0L); | |
5587 } | |
5588 | |
5589 int SetHotItem(int nItem) | |
5590 { | |
5591 ATLASSERT(::IsWindow(m_hWnd)); | |
5592 return (int)::SendMessage(m_hWnd, TB_SETHOTITEM, nItem, 0L); | |
5593 } | |
5594 #endif // !_WIN32_WCE | |
5595 | |
5596 BOOL IsButtonHighlighted(int nButtonID) const | |
5597 { | |
5598 ATLASSERT(::IsWindow(m_hWnd)); | |
5599 return (BOOL)::SendMessage(m_hWnd, TB_ISBUTTONHIGHLIGHTED, nButt
onID, 0L); | |
5600 } | |
5601 | |
5602 DWORD SetDrawTextFlags(DWORD dwMask, DWORD dwFlags) | |
5603 { | |
5604 ATLASSERT(::IsWindow(m_hWnd)); | |
5605 return (DWORD)::SendMessage(m_hWnd, TB_SETDRAWTEXTFLAGS, dwMask,
dwFlags); | |
5606 } | |
5607 | |
5608 #ifndef _WIN32_WCE | |
5609 BOOL GetColorScheme(LPCOLORSCHEME lpcs) const | |
5610 { | |
5611 ATLASSERT(::IsWindow(m_hWnd)); | |
5612 return (BOOL)::SendMessage(m_hWnd, TB_GETCOLORSCHEME, 0, (LPARAM
)lpcs); | |
5613 } | |
5614 | |
5615 void SetColorScheme(LPCOLORSCHEME lpcs) | |
5616 { | |
5617 ATLASSERT(::IsWindow(m_hWnd)); | |
5618 ::SendMessage(m_hWnd, TB_SETCOLORSCHEME, 0, (LPARAM)lpcs); | |
5619 } | |
5620 | |
5621 DWORD GetExtendedStyle() const | |
5622 { | |
5623 ATLASSERT(::IsWindow(m_hWnd)); | |
5624 return (DWORD)::SendMessage(m_hWnd, TB_GETEXTENDEDSTYLE, 0, 0L); | |
5625 } | |
5626 | |
5627 DWORD SetExtendedStyle(DWORD dwStyle) | |
5628 { | |
5629 ATLASSERT(::IsWindow(m_hWnd)); | |
5630 return (DWORD)::SendMessage(m_hWnd, TB_SETEXTENDEDSTYLE, 0, dwSt
yle); | |
5631 } | |
5632 | |
5633 void GetInsertMark(LPTBINSERTMARK lptbim) const | |
5634 { | |
5635 ATLASSERT(::IsWindow(m_hWnd)); | |
5636 ::SendMessage(m_hWnd, TB_GETINSERTMARK, 0, (LPARAM)lptbim); | |
5637 } | |
5638 | |
5639 void SetInsertMark(LPTBINSERTMARK lptbim) | |
5640 { | |
5641 ATLASSERT(::IsWindow(m_hWnd)); | |
5642 ::SendMessage(m_hWnd, TB_SETINSERTMARK, 0, (LPARAM)lptbim); | |
5643 } | |
5644 | |
5645 COLORREF GetInsertMarkColor() const | |
5646 { | |
5647 ATLASSERT(::IsWindow(m_hWnd)); | |
5648 return (COLORREF)::SendMessage(m_hWnd, TB_GETINSERTMARKCOLOR, 0,
0L); | |
5649 } | |
5650 | |
5651 COLORREF SetInsertMarkColor(COLORREF clr) | |
5652 { | |
5653 ATLASSERT(::IsWindow(m_hWnd)); | |
5654 return (COLORREF)::SendMessage(m_hWnd, TB_SETINSERTMARKCOLOR, 0,
(LPARAM)clr); | |
5655 } | |
5656 | |
5657 BOOL GetMaxSize(LPSIZE lpSize) const | |
5658 { | |
5659 ATLASSERT(::IsWindow(m_hWnd)); | |
5660 return (BOOL)::SendMessage(m_hWnd, TB_GETMAXSIZE, 0, (LPARAM)lpS
ize); | |
5661 } | |
5662 | |
5663 void GetPadding(LPSIZE lpSizePadding) const | |
5664 { | |
5665 ATLASSERT(::IsWindow(m_hWnd)); | |
5666 ATLASSERT(lpSizePadding != NULL); | |
5667 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, TB_GETPADDING, 0, 0L)
; | |
5668 lpSizePadding->cx = GET_X_LPARAM(dwRet); | |
5669 lpSizePadding->cy = GET_Y_LPARAM(dwRet); | |
5670 } | |
5671 | |
5672 void SetPadding(int cx, int cy, LPSIZE lpSizePadding = NULL) | |
5673 { | |
5674 ATLASSERT(::IsWindow(m_hWnd)); | |
5675 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, TB_SETPADDING, 0, MAK
ELPARAM(cx, cy)); | |
5676 if(lpSizePadding != NULL) | |
5677 { | |
5678 lpSizePadding->cx = GET_X_LPARAM(dwRet); | |
5679 lpSizePadding->cy = GET_Y_LPARAM(dwRet); | |
5680 } | |
5681 } | |
5682 | |
5683 BOOL GetUnicodeFormat() const | |
5684 { | |
5685 ATLASSERT(::IsWindow(m_hWnd)); | |
5686 return (BOOL)::SendMessage(m_hWnd, TB_GETUNICODEFORMAT, 0, 0L); | |
5687 } | |
5688 | |
5689 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE) | |
5690 { | |
5691 ATLASSERT(::IsWindow(m_hWnd)); | |
5692 return (BOOL)::SendMessage(m_hWnd, TB_SETUNICODEFORMAT, bUnicode
, 0L); | |
5693 } | |
5694 #endif // !_WIN32_WCE | |
5695 #endif // (_WIN32_IE >= 0x0400) | |
5696 | |
5697 #if (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE) | |
5698 int GetString(int nString, LPTSTR lpstrString, int cchMaxLen) const | |
5699 { | |
5700 ATLASSERT(::IsWindow(m_hWnd)); | |
5701 return (int)::SendMessage(m_hWnd, TB_GETSTRING, MAKEWPARAM(cchMa
xLen, nString), (LPARAM)lpstrString); | |
5702 } | |
5703 | |
5704 int GetStringBSTR(int nString, BSTR& bstrString) const | |
5705 { | |
5706 USES_CONVERSION; | |
5707 ATLASSERT(::IsWindow(m_hWnd)); | |
5708 ATLASSERT(bstrString == NULL); | |
5709 int nLength = (int)(short)LOWORD(::SendMessage(m_hWnd, TB_GETSTR
ING, MAKEWPARAM(0, nString), NULL)); | |
5710 if(nLength != -1) | |
5711 { | |
5712 CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff; | |
5713 LPTSTR lpstrText = buff.Allocate(nLength + 1); | |
5714 if(lpstrText != NULL) | |
5715 { | |
5716 nLength = (int)::SendMessage(m_hWnd, TB_GETSTRIN
G, MAKEWPARAM(nLength + 1, nString), (LPARAM)lpstrText); | |
5717 if(nLength != -1) | |
5718 bstrString = ::SysAllocString(T2OLE(lpst
rText)); | |
5719 } | |
5720 else | |
5721 { | |
5722 nLength = -1; | |
5723 } | |
5724 } | |
5725 | |
5726 return nLength; | |
5727 } | |
5728 | |
5729 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) | |
5730 int GetString(int nString, _CSTRING_NS::CString& str) const | |
5731 { | |
5732 ATLASSERT(::IsWindow(m_hWnd)); | |
5733 int nLength = (int)(short)LOWORD(::SendMessage(m_hWnd, TB_GETSTR
ING, MAKEWPARAM(0, nString), NULL)); | |
5734 if(nLength != -1) | |
5735 { | |
5736 LPTSTR lpstr = str.GetBufferSetLength(nLength + 1); | |
5737 if(lpstr != NULL) | |
5738 nLength = (int)::SendMessage(m_hWnd, TB_GETSTRIN
G, MAKEWPARAM(nLength + 1, nString), (LPARAM)lpstr); | |
5739 else | |
5740 nLength = -1; | |
5741 str.ReleaseBuffer(); | |
5742 } | |
5743 return nLength; | |
5744 } | |
5745 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) | |
5746 #endif // (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE) | |
5747 | |
5748 #if (_WIN32_WINNT >= 0x0501) | |
5749 void GetMetrics(LPTBMETRICS lptbm) const | |
5750 { | |
5751 ATLASSERT(::IsWindow(m_hWnd)); | |
5752 ::SendMessage(m_hWnd, TB_GETMETRICS, 0, (LPARAM)lptbm); | |
5753 } | |
5754 | |
5755 void SetMetrics(LPTBMETRICS lptbm) | |
5756 { | |
5757 ATLASSERT(::IsWindow(m_hWnd)); | |
5758 ::SendMessage(m_hWnd, TB_SETMETRICS, 0, (LPARAM)lptbm); | |
5759 } | |
5760 | |
5761 void SetWindowTheme(LPCWSTR lpstrTheme) | |
5762 { | |
5763 ATLASSERT(::IsWindow(m_hWnd)); | |
5764 ::SendMessage(m_hWnd, TB_SETWINDOWTHEME, 0, (LPARAM)lpstrTheme); | |
5765 } | |
5766 #endif // (_WIN32_WINNT >= 0x0501) | |
5767 | |
5768 #if (_WIN32_WINNT >= 0x0600) | |
5769 CImageList GetPressedImageList(int nIndex = 0) const | |
5770 { | |
5771 ATLASSERT(::IsWindow(m_hWnd)); | |
5772 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TB_GETPRESSE
DIMAGELIST, nIndex, 0L)); | |
5773 } | |
5774 | |
5775 CImageList SetPressedImageList(HIMAGELIST hImageList, int nIndex = 0) | |
5776 { | |
5777 ATLASSERT(::IsWindow(m_hWnd)); | |
5778 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TB_SETPRESSE
DIMAGELIST, nIndex, (LPARAM)hImageList)); | |
5779 } | |
5780 #endif // (_WIN32_WINNT >= 0x0600) | |
5781 | |
5782 // Operations | |
5783 BOOL EnableButton(int nID, BOOL bEnable = TRUE) | |
5784 { | |
5785 ATLASSERT(::IsWindow(m_hWnd)); | |
5786 return (BOOL)::SendMessage(m_hWnd, TB_ENABLEBUTTON, nID, MAKELPA
RAM(bEnable, 0)); | |
5787 } | |
5788 | |
5789 BOOL CheckButton(int nID, BOOL bCheck = TRUE) | |
5790 { | |
5791 ATLASSERT(::IsWindow(m_hWnd)); | |
5792 return (BOOL)::SendMessage(m_hWnd, TB_CHECKBUTTON, nID, MAKELPAR
AM(bCheck, 0)); | |
5793 } | |
5794 | |
5795 BOOL PressButton(int nID, BOOL bPress = TRUE) | |
5796 { | |
5797 ATLASSERT(::IsWindow(m_hWnd)); | |
5798 return (BOOL)::SendMessage(m_hWnd, TB_PRESSBUTTON, nID, MAKELPAR
AM(bPress, 0)); | |
5799 } | |
5800 | |
5801 BOOL HideButton(int nID, BOOL bHide = TRUE) | |
5802 { | |
5803 ATLASSERT(::IsWindow(m_hWnd)); | |
5804 return (BOOL)::SendMessage(m_hWnd, TB_HIDEBUTTON, nID, MAKELPARA
M(bHide, 0)); | |
5805 } | |
5806 | |
5807 BOOL Indeterminate(int nID, BOOL bIndeterminate = TRUE) | |
5808 { | |
5809 ATLASSERT(::IsWindow(m_hWnd)); | |
5810 return (BOOL)::SendMessage(m_hWnd, TB_INDETERMINATE, nID, MAKELP
ARAM(bIndeterminate, 0)); | |
5811 } | |
5812 | |
5813 int AddBitmap(int nNumButtons, UINT nBitmapID) | |
5814 { | |
5815 ATLASSERT(::IsWindow(m_hWnd)); | |
5816 TBADDBITMAP tbab = { 0 }; | |
5817 tbab.hInst = ModuleHelper::GetResourceInstance(); | |
5818 ATLASSERT(tbab.hInst != NULL); | |
5819 tbab.nID = nBitmapID; | |
5820 return (int)::SendMessage(m_hWnd, TB_ADDBITMAP, (WPARAM)nNumButt
ons, (LPARAM)&tbab); | |
5821 } | |
5822 | |
5823 int AddBitmap(int nNumButtons, HBITMAP hBitmap) | |
5824 { | |
5825 ATLASSERT(::IsWindow(m_hWnd)); | |
5826 TBADDBITMAP tbab = { 0 }; | |
5827 tbab.hInst = NULL; | |
5828 tbab.nID = (UINT_PTR)hBitmap; | |
5829 return (int)::SendMessage(m_hWnd, TB_ADDBITMAP, (WPARAM)nNumButt
ons, (LPARAM)&tbab); | |
5830 } | |
5831 | |
5832 BOOL AddButtons(int nNumButtons, LPTBBUTTON lpButtons) | |
5833 { | |
5834 ATLASSERT(::IsWindow(m_hWnd)); | |
5835 return (BOOL)::SendMessage(m_hWnd, TB_ADDBUTTONS, nNumButtons, (
LPARAM)lpButtons); | |
5836 } | |
5837 | |
5838 BOOL InsertButton(int nIndex, LPTBBUTTON lpButton) | |
5839 { | |
5840 ATLASSERT(::IsWindow(m_hWnd)); | |
5841 return (BOOL)::SendMessage(m_hWnd, TB_INSERTBUTTON, nIndex, (LPA
RAM)lpButton); | |
5842 } | |
5843 | |
5844 BOOL InsertButton(int nIndex, int iCommand, BYTE Style, BYTE State, int
iBitmap, | |
5845 INT_PTR iString, DWORD_PTR lParam) | |
5846 { | |
5847 ATLASSERT(::IsWindow(m_hWnd)); | |
5848 TBBUTTON tbb = { 0 }; | |
5849 tbb.fsStyle = Style; | |
5850 tbb.fsState = State; | |
5851 tbb.idCommand = iCommand; | |
5852 tbb.iBitmap = iBitmap; | |
5853 tbb.iString = iString; | |
5854 tbb.dwData = lParam; | |
5855 return (BOOL)::SendMessage(m_hWnd, TB_INSERTBUTTON, nIndex, (LPA
RAM)&tbb); | |
5856 } | |
5857 | |
5858 BOOL InsertButton(int nIndex, int iCommand, BYTE Style, BYTE State, int
iBitmap, | |
5859 LPCTSTR lpszItem, DWORD_PTR lParam) | |
5860 { | |
5861 return InsertButton(nIndex, iCommand, Style, State, iBitmap, (IN
T_PTR)lpszItem, lParam); | |
5862 } | |
5863 | |
5864 BOOL AddButton(LPTBBUTTON lpButton) | |
5865 { | |
5866 return InsertButton(-1, lpButton); | |
5867 } | |
5868 | |
5869 BOOL AddButton(int iCommand, BYTE Style, BYTE State, int iBitmap, INT_PT
R iString, DWORD_PTR lParam) | |
5870 { | |
5871 return InsertButton(-1, iCommand, Style, State, iBitmap, iString
, lParam); | |
5872 } | |
5873 | |
5874 BOOL AddButton(int iCommand, BYTE Style, BYTE State, int iBitmap, LPCTST
R lpszItem, DWORD_PTR lParam) | |
5875 { | |
5876 return InsertButton(-1, iCommand, Style, State, iBitmap, lpszIte
m, lParam); | |
5877 } | |
5878 | |
5879 BOOL DeleteButton(int nIndex) | |
5880 { | |
5881 ATLASSERT(::IsWindow(m_hWnd)); | |
5882 return (BOOL)::SendMessage(m_hWnd, TB_DELETEBUTTON, nIndex, 0L); | |
5883 } | |
5884 | |
5885 UINT CommandToIndex(UINT nID) const | |
5886 { | |
5887 ATLASSERT(::IsWindow(m_hWnd)); | |
5888 return (UINT)::SendMessage(m_hWnd, TB_COMMANDTOINDEX, nID, 0L); | |
5889 } | |
5890 | |
5891 #ifndef _WIN32_WCE | |
5892 void SaveState(HKEY hKeyRoot, LPCTSTR lpszSubKey, LPCTSTR lpszValueName) | |
5893 { | |
5894 ATLASSERT(::IsWindow(m_hWnd)); | |
5895 TBSAVEPARAMS tbs = { 0 }; | |
5896 tbs.hkr = hKeyRoot; | |
5897 tbs.pszSubKey = lpszSubKey; | |
5898 tbs.pszValueName = lpszValueName; | |
5899 ::SendMessage(m_hWnd, TB_SAVERESTORE, (WPARAM)TRUE, (LPARAM)&tbs
); | |
5900 } | |
5901 | |
5902 void RestoreState(HKEY hKeyRoot, LPCTSTR lpszSubKey, LPCTSTR lpszValueNa
me) | |
5903 { | |
5904 ATLASSERT(::IsWindow(m_hWnd)); | |
5905 TBSAVEPARAMS tbs = { 0 }; | |
5906 tbs.hkr = hKeyRoot; | |
5907 tbs.pszSubKey = lpszSubKey; | |
5908 tbs.pszValueName = lpszValueName; | |
5909 ::SendMessage(m_hWnd, TB_SAVERESTORE, (WPARAM)FALSE, (LPARAM)&tb
s); | |
5910 } | |
5911 | |
5912 void Customize() | |
5913 { | |
5914 ATLASSERT(::IsWindow(m_hWnd)); | |
5915 ::SendMessage(m_hWnd, TB_CUSTOMIZE, 0, 0L); | |
5916 } | |
5917 #endif // !_WIN32_WCE | |
5918 | |
5919 int AddString(UINT nStringID) | |
5920 { | |
5921 ATLASSERT(::IsWindow(m_hWnd)); | |
5922 return (int)::SendMessage(m_hWnd, TB_ADDSTRING, (WPARAM)ModuleHe
lper::GetResourceInstance(), (LPARAM)nStringID); | |
5923 } | |
5924 | |
5925 int AddStrings(LPCTSTR lpszStrings) | |
5926 { | |
5927 ATLASSERT(::IsWindow(m_hWnd)); | |
5928 return (int)::SendMessage(m_hWnd, TB_ADDSTRING, 0, (LPARAM)lpszS
trings); | |
5929 } | |
5930 | |
5931 void AutoSize() | |
5932 { | |
5933 ATLASSERT(::IsWindow(m_hWnd)); | |
5934 ::SendMessage(m_hWnd, TB_AUTOSIZE, 0, 0L); | |
5935 } | |
5936 | |
5937 BOOL ChangeBitmap(int nID, int nBitmap) | |
5938 { | |
5939 ATLASSERT(::IsWindow(m_hWnd)); | |
5940 return (BOOL)::SendMessage(m_hWnd, TB_CHANGEBITMAP, nID, MAKELPA
RAM(nBitmap, 0)); | |
5941 } | |
5942 | |
5943 int LoadImages(int nBitmapID) | |
5944 { | |
5945 ATLASSERT(::IsWindow(m_hWnd)); | |
5946 return (int)::SendMessage(m_hWnd, TB_LOADIMAGES, nBitmapID, (LPA
RAM)ModuleHelper::GetResourceInstance()); | |
5947 } | |
5948 | |
5949 int LoadStdImages(int nBitmapID) | |
5950 { | |
5951 ATLASSERT(::IsWindow(m_hWnd)); | |
5952 return (int)::SendMessage(m_hWnd, TB_LOADIMAGES, nBitmapID, (LPA
RAM)HINST_COMMCTRL); | |
5953 } | |
5954 | |
5955 BOOL ReplaceBitmap(LPTBREPLACEBITMAP ptbrb) | |
5956 { | |
5957 ATLASSERT(::IsWindow(m_hWnd)); | |
5958 return (BOOL)::SendMessage(m_hWnd, TB_REPLACEBITMAP, 0, (LPARAM)
ptbrb); | |
5959 } | |
5960 | |
5961 #if (_WIN32_IE >= 0x0400) | |
5962 int HitTest(LPPOINT lpPoint) const | |
5963 { | |
5964 ATLASSERT(::IsWindow(m_hWnd)); | |
5965 return (int)::SendMessage(m_hWnd, TB_HITTEST, 0, (LPARAM)lpPoint
); | |
5966 } | |
5967 | |
5968 #ifndef _WIN32_WCE | |
5969 BOOL InsertMarkHitTest(LPPOINT lpPoint, LPTBINSERTMARK lptbim) const | |
5970 { | |
5971 ATLASSERT(::IsWindow(m_hWnd)); | |
5972 return (BOOL)::SendMessage(m_hWnd, TB_INSERTMARKHITTEST, (WPARAM
)lpPoint, (LPARAM)lptbim); | |
5973 } | |
5974 | |
5975 BOOL InsertMarkHitTest(int x, int y, LPTBINSERTMARK lptbim) const | |
5976 { | |
5977 ATLASSERT(::IsWindow(m_hWnd)); | |
5978 POINT pt = { x, y }; | |
5979 return (BOOL)::SendMessage(m_hWnd, TB_INSERTMARKHITTEST, (WPARAM
)&pt, (LPARAM)lptbim); | |
5980 } | |
5981 | |
5982 BOOL MapAccelerator(TCHAR chAccel, int& nID) const | |
5983 { | |
5984 ATLASSERT(::IsWindow(m_hWnd)); | |
5985 return (BOOL)::SendMessage(m_hWnd, TB_MAPACCELERATOR, (WPARAM)ch
Accel, (LPARAM)&nID); | |
5986 } | |
5987 | |
5988 BOOL MarkButton(int nID, BOOL bHighlight = TRUE) | |
5989 { | |
5990 ATLASSERT(::IsWindow(m_hWnd)); | |
5991 return (BOOL)::SendMessage(m_hWnd, TB_MARKBUTTON, nID, MAKELPARA
M(bHighlight, 0)); | |
5992 } | |
5993 | |
5994 BOOL MoveButton(int nOldPos, int nNewPos) | |
5995 { | |
5996 ATLASSERT(::IsWindow(m_hWnd)); | |
5997 return (BOOL)::SendMessage(m_hWnd, TB_MOVEBUTTON, nOldPos, nNewP
os); | |
5998 } | |
5999 | |
6000 HRESULT GetObject(REFIID iid, LPVOID* ppvObject) | |
6001 { | |
6002 ATLASSERT(::IsWindow(m_hWnd)); | |
6003 return (HRESULT)::SendMessage(m_hWnd, TB_GETOBJECT, (WPARAM)&iid
, (LPARAM)ppvObject); | |
6004 } | |
6005 #endif // !_WIN32_WCE | |
6006 #endif // (_WIN32_IE >= 0x0400) | |
6007 }; | |
6008 | |
6009 typedef CToolBarCtrlT<ATL::CWindow> CToolBarCtrl; | |
6010 | |
6011 | |
6012 /////////////////////////////////////////////////////////////////////////////// | |
6013 // CStatusBarCtrl | |
6014 | |
6015 template <class TBase> | |
6016 class CStatusBarCtrlT : public TBase | |
6017 { | |
6018 public: | |
6019 // Constructors | |
6020 CStatusBarCtrlT(HWND hWnd = NULL) : TBase(hWnd) | |
6021 { } | |
6022 | |
6023 CStatusBarCtrlT< TBase >& operator =(HWND hWnd) | |
6024 { | |
6025 m_hWnd = hWnd; | |
6026 return *this; | |
6027 } | |
6028 | |
6029 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
6030 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
6031 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
6032 { | |
6033 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
6034 } | |
6035 | |
6036 // Methods | |
6037 static LPCTSTR GetWndClassName() | |
6038 { | |
6039 return STATUSCLASSNAME; | |
6040 } | |
6041 | |
6042 int GetParts(int nParts, int* pParts) const | |
6043 { | |
6044 ATLASSERT(::IsWindow(m_hWnd)); | |
6045 return (int)::SendMessage(m_hWnd, SB_GETPARTS, nParts, (LPARAM)p
Parts); | |
6046 } | |
6047 | |
6048 BOOL SetParts(int nParts, int* pWidths) | |
6049 { | |
6050 ATLASSERT(::IsWindow(m_hWnd)); | |
6051 return (BOOL)::SendMessage(m_hWnd, SB_SETPARTS, nParts, (LPARAM)
pWidths); | |
6052 } | |
6053 | |
6054 int GetTextLength(int nPane, int* pType = NULL) const | |
6055 { | |
6056 ATLASSERT(::IsWindow(m_hWnd)); | |
6057 ATLASSERT(nPane < 256); | |
6058 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, SB_GETTEXTLENGTH, (WP
ARAM)nPane, 0L); | |
6059 if (pType != NULL) | |
6060 *pType = (int)(short)HIWORD(dwRet); | |
6061 return (int)(short)LOWORD(dwRet); | |
6062 } | |
6063 | |
6064 int GetText(int nPane, LPTSTR lpszText, int* pType = NULL) const | |
6065 { | |
6066 ATLASSERT(::IsWindow(m_hWnd)); | |
6067 ATLASSERT(nPane < 256); | |
6068 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, SB_GETTEXT, (WPARAM)n
Pane, (LPARAM)lpszText); | |
6069 if(pType != NULL) | |
6070 *pType = (int)(short)HIWORD(dwRet); | |
6071 return (int)(short)LOWORD(dwRet); | |
6072 } | |
6073 | |
6074 #ifndef _ATL_NO_COM | |
6075 BOOL GetTextBSTR(int nPane, BSTR& bstrText, int* pType = NULL) const | |
6076 { | |
6077 USES_CONVERSION; | |
6078 ATLASSERT(::IsWindow(m_hWnd)); | |
6079 ATLASSERT(nPane < 256); | |
6080 ATLASSERT(bstrText == NULL); | |
6081 int nLength = (int)(short)LOWORD(::SendMessage(m_hWnd, SB_GETTEX
TLENGTH, (WPARAM)nPane, 0L)); | |
6082 if(nLength == 0) | |
6083 return FALSE; | |
6084 | |
6085 CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff; | |
6086 LPTSTR lpstrText = buff.Allocate(nLength + 1); | |
6087 if(lpstrText == NULL) | |
6088 return FALSE; | |
6089 | |
6090 if(!GetText(nPane, lpstrText, pType)) | |
6091 return FALSE; | |
6092 | |
6093 bstrText = ::SysAllocString(T2OLE(lpstrText)); | |
6094 return (bstrText != NULL) ? TRUE : FALSE; | |
6095 } | |
6096 #endif // !_ATL_NO_COM | |
6097 | |
6098 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) | |
6099 int GetText(int nPane, _CSTRING_NS::CString& strText, int* pType = NULL)
const | |
6100 { | |
6101 ATLASSERT(::IsWindow(m_hWnd)); | |
6102 ATLASSERT(nPane < 256); | |
6103 int nLength = (int)(short)LOWORD(::SendMessage(m_hWnd, SB_GETTEX
TLENGTH, (WPARAM)nPane, 0L)); | |
6104 if(nLength == 0) | |
6105 return 0; | |
6106 | |
6107 LPTSTR lpstr = strText.GetBufferSetLength(nLength); | |
6108 if(lpstr == NULL) | |
6109 return 0; | |
6110 return GetText(nPane, lpstr, pType); | |
6111 } | |
6112 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) | |
6113 | |
6114 BOOL SetText(int nPane, LPCTSTR lpszText, int nType = 0) | |
6115 { | |
6116 ATLASSERT(::IsWindow(m_hWnd)); | |
6117 ATLASSERT(nPane < 256); | |
6118 return (BOOL)::SendMessage(m_hWnd, SB_SETTEXT, (nPane | nType),
(LPARAM)lpszText); | |
6119 } | |
6120 | |
6121 BOOL GetRect(int nPane, LPRECT lpRect) const | |
6122 { | |
6123 ATLASSERT(::IsWindow(m_hWnd)); | |
6124 ATLASSERT(nPane < 256); | |
6125 return (BOOL)::SendMessage(m_hWnd, SB_GETRECT, nPane, (LPARAM)lp
Rect); | |
6126 } | |
6127 | |
6128 BOOL GetBorders(int* pBorders) const | |
6129 { | |
6130 ATLASSERT(::IsWindow(m_hWnd)); | |
6131 return (BOOL)::SendMessage(m_hWnd, SB_GETBORDERS, 0, (LPARAM)pBo
rders); | |
6132 } | |
6133 | |
6134 BOOL GetBorders(int& nHorz, int& nVert, int& nSpacing) const | |
6135 { | |
6136 ATLASSERT(::IsWindow(m_hWnd)); | |
6137 int borders[3] = { 0, 0, 0 }; | |
6138 BOOL bResult = (BOOL)::SendMessage(m_hWnd, SB_GETBORDERS, 0, (LP
ARAM)&borders); | |
6139 if(bResult) | |
6140 { | |
6141 nHorz = borders[0]; | |
6142 nVert = borders[1]; | |
6143 nSpacing = borders[2]; | |
6144 } | |
6145 return bResult; | |
6146 } | |
6147 | |
6148 void SetMinHeight(int nMin) | |
6149 { | |
6150 ATLASSERT(::IsWindow(m_hWnd)); | |
6151 ::SendMessage(m_hWnd, SB_SETMINHEIGHT, nMin, 0L); | |
6152 } | |
6153 | |
6154 BOOL SetSimple(BOOL bSimple = TRUE) | |
6155 { | |
6156 ATLASSERT(::IsWindow(m_hWnd)); | |
6157 return (BOOL)::SendMessage(m_hWnd, SB_SIMPLE, bSimple, 0L); | |
6158 } | |
6159 | |
6160 BOOL IsSimple() const | |
6161 { | |
6162 ATLASSERT(::IsWindow(m_hWnd)); | |
6163 return (BOOL)::SendMessage(m_hWnd, SB_ISSIMPLE, 0, 0L); | |
6164 } | |
6165 | |
6166 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
6167 BOOL GetUnicodeFormat() const | |
6168 { | |
6169 ATLASSERT(::IsWindow(m_hWnd)); | |
6170 return (BOOL)::SendMessage(m_hWnd, SB_GETUNICODEFORMAT, 0, 0L); | |
6171 } | |
6172 | |
6173 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE) | |
6174 { | |
6175 ATLASSERT(::IsWindow(m_hWnd)); | |
6176 return (BOOL)::SendMessage(m_hWnd, SB_SETUNICODEFORMAT, bUnicode
, 0L); | |
6177 } | |
6178 | |
6179 void GetTipText(int nPane, LPTSTR lpstrText, int nSize) const | |
6180 { | |
6181 ATLASSERT(::IsWindow(m_hWnd)); | |
6182 ATLASSERT(nPane < 256); | |
6183 ::SendMessage(m_hWnd, SB_GETTIPTEXT, MAKEWPARAM(nPane, nSize), (
LPARAM)lpstrText); | |
6184 } | |
6185 | |
6186 void SetTipText(int nPane, LPCTSTR lpstrText) | |
6187 { | |
6188 ATLASSERT(::IsWindow(m_hWnd)); | |
6189 ATLASSERT(nPane < 256); | |
6190 ::SendMessage(m_hWnd, SB_SETTIPTEXT, nPane, (LPARAM)lpstrText); | |
6191 } | |
6192 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
6193 | |
6194 #if ((_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)) || (defined(_WIN32_WCE) && (
_WIN32_WCE >= 0x0500)) | |
6195 COLORREF SetBkColor(COLORREF clrBk) | |
6196 { | |
6197 ATLASSERT(::IsWindow(m_hWnd)); | |
6198 return (COLORREF)::SendMessage(m_hWnd, SB_SETBKCOLOR, 0, (LPARAM
)clrBk); | |
6199 } | |
6200 | |
6201 HICON GetIcon(int nPane) const | |
6202 { | |
6203 ATLASSERT(::IsWindow(m_hWnd)); | |
6204 ATLASSERT(nPane < 256); | |
6205 return (HICON)::SendMessage(m_hWnd, SB_GETICON, nPane, 0L); | |
6206 } | |
6207 | |
6208 BOOL SetIcon(int nPane, HICON hIcon) | |
6209 { | |
6210 ATLASSERT(::IsWindow(m_hWnd)); | |
6211 ATLASSERT(nPane < 256); | |
6212 return (BOOL)::SendMessage(m_hWnd, SB_SETICON, nPane, (LPARAM)hI
con); | |
6213 } | |
6214 #endif // ((_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)) || (defined(_WIN32_WCE
) && (_WIN32_WCE >= 0x0500)) | |
6215 }; | |
6216 | |
6217 typedef CStatusBarCtrlT<ATL::CWindow> CStatusBarCtrl; | |
6218 | |
6219 | |
6220 /////////////////////////////////////////////////////////////////////////////// | |
6221 // CTabCtrl | |
6222 | |
6223 template <class TBase> | |
6224 class CTabCtrlT : public TBase | |
6225 { | |
6226 public: | |
6227 // Constructors | |
6228 CTabCtrlT(HWND hWnd = NULL) : TBase(hWnd) | |
6229 { } | |
6230 | |
6231 CTabCtrlT< TBase >& operator =(HWND hWnd) | |
6232 { | |
6233 m_hWnd = hWnd; | |
6234 return *this; | |
6235 } | |
6236 | |
6237 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
6238 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
6239 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
6240 { | |
6241 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
6242 } | |
6243 | |
6244 // Attributes | |
6245 static LPCTSTR GetWndClassName() | |
6246 { | |
6247 return WC_TABCONTROL; | |
6248 } | |
6249 | |
6250 CImageList GetImageList() const | |
6251 { | |
6252 ATLASSERT(::IsWindow(m_hWnd)); | |
6253 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TCM_GETIMAGE
LIST, 0, 0L)); | |
6254 } | |
6255 | |
6256 CImageList SetImageList(HIMAGELIST hImageList) | |
6257 { | |
6258 ATLASSERT(::IsWindow(m_hWnd)); | |
6259 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TCM_SETIMAGE
LIST, 0, (LPARAM)hImageList)); | |
6260 } | |
6261 | |
6262 int GetItemCount() const | |
6263 { | |
6264 ATLASSERT(::IsWindow(m_hWnd)); | |
6265 return (int)::SendMessage(m_hWnd, TCM_GETITEMCOUNT, 0, 0L); | |
6266 } | |
6267 | |
6268 BOOL GetItem(int nItem, LPTCITEM pTabCtrlItem) const | |
6269 { | |
6270 ATLASSERT(::IsWindow(m_hWnd)); | |
6271 return (BOOL)::SendMessage(m_hWnd, TCM_GETITEM, nItem, (LPARAM)p
TabCtrlItem); | |
6272 } | |
6273 | |
6274 BOOL SetItem(int nItem, LPTCITEM pTabCtrlItem) | |
6275 { | |
6276 ATLASSERT(::IsWindow(m_hWnd)); | |
6277 return (BOOL)::SendMessage(m_hWnd, TCM_SETITEM, nItem, (LPARAM)p
TabCtrlItem); | |
6278 } | |
6279 | |
6280 int SetItem(int nItem, UINT mask, LPCTSTR lpszItem, DWORD dwState, DWORD
dwStateMask, int iImage, LPARAM lParam) | |
6281 { | |
6282 ATLASSERT(::IsWindow(m_hWnd)); | |
6283 TCITEM tci = { 0 }; | |
6284 tci.mask = mask; | |
6285 tci.pszText = (LPTSTR) lpszItem; | |
6286 tci.dwState = dwState; | |
6287 tci.dwStateMask = dwStateMask; | |
6288 tci.iImage = iImage; | |
6289 tci.lParam = lParam; | |
6290 return (int)::SendMessage(m_hWnd, TCM_SETITEM, nItem, (LPARAM)&t
ci); | |
6291 } | |
6292 | |
6293 BOOL GetItemRect(int nItem, LPRECT lpRect) const | |
6294 { | |
6295 ATLASSERT(::IsWindow(m_hWnd)); | |
6296 return (BOOL)::SendMessage(m_hWnd, TCM_GETITEMRECT, nItem, (LPAR
AM)lpRect); | |
6297 } | |
6298 | |
6299 int GetCurSel() const | |
6300 { | |
6301 ATLASSERT(::IsWindow(m_hWnd)); | |
6302 return (int)::SendMessage(m_hWnd, TCM_GETCURSEL, 0, 0L); | |
6303 } | |
6304 | |
6305 int SetCurSel(int nItem) | |
6306 { | |
6307 ATLASSERT(::IsWindow(m_hWnd)); | |
6308 return (int)::SendMessage(m_hWnd, TCM_SETCURSEL, nItem, 0L); | |
6309 } | |
6310 | |
6311 SIZE SetItemSize(SIZE size) | |
6312 { | |
6313 ATLASSERT(::IsWindow(m_hWnd)); | |
6314 DWORD dwSize = (DWORD)::SendMessage(m_hWnd, TCM_SETITEMSIZE, 0,
MAKELPARAM(size.cx, size.cy)); | |
6315 SIZE sizeRet = { GET_X_LPARAM(dwSize), GET_Y_LPARAM(dwSize) }; | |
6316 return sizeRet; | |
6317 } | |
6318 | |
6319 void SetItemSize(int cx, int cy) | |
6320 { | |
6321 ATLASSERT(::IsWindow(m_hWnd)); | |
6322 ::SendMessage(m_hWnd, TCM_SETITEMSIZE, 0, MAKELPARAM(cx, cy)); | |
6323 } | |
6324 | |
6325 void SetPadding(SIZE size) | |
6326 { | |
6327 ATLASSERT(::IsWindow(m_hWnd)); | |
6328 ::SendMessage(m_hWnd, TCM_SETPADDING, 0, MAKELPARAM(size.cx, siz
e.cy)); | |
6329 } | |
6330 | |
6331 int GetRowCount() const | |
6332 { | |
6333 ATLASSERT(::IsWindow(m_hWnd)); | |
6334 return (int)::SendMessage(m_hWnd, TCM_GETROWCOUNT, 0, 0L); | |
6335 } | |
6336 | |
6337 #ifndef _WIN32_WCE | |
6338 CToolTipCtrl GetTooltips() const | |
6339 { | |
6340 ATLASSERT(::IsWindow(m_hWnd)); | |
6341 return CToolTipCtrl((HWND)::SendMessage(m_hWnd, TCM_GETTOOLTIPS,
0, 0L)); | |
6342 } | |
6343 | |
6344 void SetTooltips(HWND hWndToolTip) | |
6345 { | |
6346 ATLASSERT(::IsWindow(m_hWnd)); | |
6347 ::SendMessage(m_hWnd, TCM_SETTOOLTIPS, (WPARAM)hWndToolTip, 0L); | |
6348 } | |
6349 #endif // !_WIN32_WCE | |
6350 | |
6351 int GetCurFocus() const | |
6352 { | |
6353 ATLASSERT(::IsWindow(m_hWnd)); | |
6354 return (int)::SendMessage(m_hWnd, TCM_GETCURFOCUS, 0, 0L); | |
6355 } | |
6356 | |
6357 void SetCurFocus(int nItem) | |
6358 { | |
6359 ATLASSERT(::IsWindow(m_hWnd)); | |
6360 ::SendMessage(m_hWnd, TCM_SETCURFOCUS, nItem, 0L); | |
6361 } | |
6362 | |
6363 BOOL SetItemExtra(int cbExtra) | |
6364 { | |
6365 ATLASSERT(::IsWindow(m_hWnd)); | |
6366 ATLASSERT(GetItemCount() == 0); // must be empty | |
6367 return (BOOL)::SendMessage(m_hWnd, TCM_SETITEMEXTRA, cbExtra, 0L
); | |
6368 } | |
6369 | |
6370 int SetMinTabWidth(int nWidth = -1) | |
6371 { | |
6372 ATLASSERT(::IsWindow(m_hWnd)); | |
6373 return (int)::SendMessage(m_hWnd, TCM_SETMINTABWIDTH, 0, nWidth)
; | |
6374 } | |
6375 | |
6376 #if (_WIN32_IE >= 0x0400) | |
6377 DWORD GetExtendedStyle() const | |
6378 { | |
6379 ATLASSERT(::IsWindow(m_hWnd)); | |
6380 return (DWORD)::SendMessage(m_hWnd, TCM_GETEXTENDEDSTYLE, 0, 0L)
; | |
6381 } | |
6382 | |
6383 DWORD SetExtendedStyle(DWORD dwExMask, DWORD dwExStyle) | |
6384 { | |
6385 ATLASSERT(::IsWindow(m_hWnd)); | |
6386 return (DWORD)::SendMessage(m_hWnd, TCM_SETEXTENDEDSTYLE, dwExMa
sk, dwExStyle); | |
6387 } | |
6388 | |
6389 #ifndef _WIN32_WCE | |
6390 BOOL GetUnicodeFormat() const | |
6391 { | |
6392 ATLASSERT(::IsWindow(m_hWnd)); | |
6393 return (BOOL)::SendMessage(m_hWnd, TCM_GETUNICODEFORMAT, 0, 0L); | |
6394 } | |
6395 | |
6396 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE) | |
6397 { | |
6398 ATLASSERT(::IsWindow(m_hWnd)); | |
6399 return (BOOL)::SendMessage(m_hWnd, TCM_SETUNICODEFORMAT, bUnicod
e, 0L); | |
6400 } | |
6401 #endif // !_WIN32_WCE | |
6402 #endif // (_WIN32_IE >= 0x0400) | |
6403 | |
6404 // Operations | |
6405 int InsertItem(int nItem, LPTCITEM pTabCtrlItem) | |
6406 { | |
6407 ATLASSERT(::IsWindow(m_hWnd)); | |
6408 return (int)::SendMessage(m_hWnd, TCM_INSERTITEM, nItem, (LPARAM
)pTabCtrlItem); | |
6409 } | |
6410 | |
6411 int InsertItem(int nItem, UINT mask, LPCTSTR lpszItem, int iImage, LPARA
M lParam) | |
6412 { | |
6413 ATLASSERT(::IsWindow(m_hWnd)); | |
6414 TCITEM tci = { 0 }; | |
6415 tci.mask = mask; | |
6416 tci.pszText = (LPTSTR) lpszItem; | |
6417 tci.iImage = iImage; | |
6418 tci.lParam = lParam; | |
6419 return (int)::SendMessage(m_hWnd, TCM_INSERTITEM, nItem, (LPARAM
)&tci); | |
6420 } | |
6421 | |
6422 int InsertItem(int nItem, LPCTSTR lpszItem) | |
6423 { | |
6424 ATLASSERT(::IsWindow(m_hWnd)); | |
6425 TCITEM tci = { 0 }; | |
6426 tci.mask = TCIF_TEXT; | |
6427 tci.pszText = (LPTSTR) lpszItem; | |
6428 return (int)::SendMessage(m_hWnd, TCM_INSERTITEM, nItem, (LPARAM
)&tci); | |
6429 } | |
6430 | |
6431 int AddItem(LPTCITEM pTabCtrlItem) | |
6432 { | |
6433 return InsertItem(GetItemCount(), pTabCtrlItem); | |
6434 } | |
6435 | |
6436 int AddItem(UINT mask, LPCTSTR lpszItem, int iImage, LPARAM lParam) | |
6437 { | |
6438 return InsertItem(GetItemCount(), mask, lpszItem, iImage, lParam
); | |
6439 } | |
6440 | |
6441 int AddItem(LPCTSTR lpszItem) | |
6442 { | |
6443 return InsertItem(GetItemCount(), lpszItem); | |
6444 } | |
6445 | |
6446 BOOL DeleteItem(int nItem) | |
6447 { | |
6448 ATLASSERT(::IsWindow(m_hWnd)); | |
6449 return (BOOL)::SendMessage(m_hWnd, TCM_DELETEITEM, nItem, 0L); | |
6450 } | |
6451 | |
6452 BOOL DeleteAllItems() | |
6453 { | |
6454 ATLASSERT(::IsWindow(m_hWnd)); | |
6455 return (BOOL)::SendMessage(m_hWnd, TCM_DELETEALLITEMS, 0, 0L); | |
6456 } | |
6457 | |
6458 void AdjustRect(BOOL bLarger, LPRECT lpRect) | |
6459 { | |
6460 ATLASSERT(::IsWindow(m_hWnd)); | |
6461 ::SendMessage(m_hWnd, TCM_ADJUSTRECT, bLarger, (LPARAM)lpRect); | |
6462 } | |
6463 | |
6464 void RemoveImage(int nImage) | |
6465 { | |
6466 ATLASSERT(::IsWindow(m_hWnd)); | |
6467 ::SendMessage(m_hWnd, TCM_REMOVEIMAGE, nImage, 0L); | |
6468 } | |
6469 | |
6470 int HitTest(TC_HITTESTINFO* pHitTestInfo) const | |
6471 { | |
6472 ATLASSERT(::IsWindow(m_hWnd)); | |
6473 return (int)::SendMessage(m_hWnd, TCM_HITTEST, 0, (LPARAM)pHitTe
stInfo); | |
6474 } | |
6475 | |
6476 void DeselectAll(BOOL bExcludeFocus = TRUE) | |
6477 { | |
6478 ATLASSERT(::IsWindow(m_hWnd)); | |
6479 ::SendMessage(m_hWnd, TCM_DESELECTALL, bExcludeFocus, 0L); | |
6480 } | |
6481 | |
6482 #if (_WIN32_IE >= 0x0400) | |
6483 BOOL HighlightItem(int nIndex, BOOL bHighlight = TRUE) | |
6484 { | |
6485 ATLASSERT(::IsWindow(m_hWnd)); | |
6486 return (BOOL)::SendMessage(m_hWnd, TCM_HIGHLIGHTITEM, nIndex, MA
KELPARAM(bHighlight, 0)); | |
6487 } | |
6488 #endif // (_WIN32_IE >= 0x0400) | |
6489 }; | |
6490 | |
6491 typedef CTabCtrlT<ATL::CWindow> CTabCtrl; | |
6492 | |
6493 | |
6494 /////////////////////////////////////////////////////////////////////////////// | |
6495 // CTrackBarCtrl | |
6496 | |
6497 template <class TBase> | |
6498 class CTrackBarCtrlT : public TBase | |
6499 { | |
6500 public: | |
6501 // Constructors | |
6502 CTrackBarCtrlT(HWND hWnd = NULL) : TBase(hWnd) | |
6503 { } | |
6504 | |
6505 CTrackBarCtrlT< TBase >& operator =(HWND hWnd) | |
6506 { | |
6507 m_hWnd = hWnd; | |
6508 return *this; | |
6509 } | |
6510 | |
6511 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
6512 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
6513 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
6514 { | |
6515 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
6516 } | |
6517 | |
6518 // Attributes | |
6519 static LPCTSTR GetWndClassName() | |
6520 { | |
6521 return TRACKBAR_CLASS; | |
6522 } | |
6523 | |
6524 int GetLineSize() const | |
6525 { | |
6526 ATLASSERT(::IsWindow(m_hWnd)); | |
6527 return (int)::SendMessage(m_hWnd, TBM_GETLINESIZE, 0, 0L); | |
6528 } | |
6529 | |
6530 int SetLineSize(int nSize) | |
6531 { | |
6532 ATLASSERT(::IsWindow(m_hWnd)); | |
6533 return (int)::SendMessage(m_hWnd, TBM_SETLINESIZE, 0, nSize); | |
6534 } | |
6535 | |
6536 int GetPageSize() const | |
6537 { | |
6538 ATLASSERT(::IsWindow(m_hWnd)); | |
6539 return (int)::SendMessage(m_hWnd, TBM_GETPAGESIZE, 0, 0L); | |
6540 } | |
6541 | |
6542 int SetPageSize(int nSize) | |
6543 { | |
6544 ATLASSERT(::IsWindow(m_hWnd)); | |
6545 return (int)::SendMessage(m_hWnd, TBM_SETPAGESIZE, 0, nSize); | |
6546 } | |
6547 | |
6548 int GetRangeMin() const | |
6549 { | |
6550 ATLASSERT(::IsWindow(m_hWnd)); | |
6551 return (int)::SendMessage(m_hWnd, TBM_GETRANGEMIN, 0, 0L); | |
6552 } | |
6553 | |
6554 void SetRangeMin(int nMin, BOOL bRedraw = FALSE) | |
6555 { | |
6556 ATLASSERT(::IsWindow(m_hWnd)); | |
6557 ::SendMessage(m_hWnd, TBM_SETRANGEMIN, bRedraw, nMin); | |
6558 } | |
6559 | |
6560 int GetRangeMax() const | |
6561 { | |
6562 ATLASSERT(::IsWindow(m_hWnd)); | |
6563 return (int)::SendMessage(m_hWnd, TBM_GETRANGEMAX, 0, 0L); | |
6564 } | |
6565 | |
6566 void SetRangeMax(int nMax, BOOL bRedraw = FALSE) | |
6567 { | |
6568 ATLASSERT(::IsWindow(m_hWnd)); | |
6569 ::SendMessage(m_hWnd, TBM_SETRANGEMAX, bRedraw, nMax); | |
6570 } | |
6571 | |
6572 void GetRange(int& nMin, int& nMax) const | |
6573 { | |
6574 nMin = GetRangeMin(); | |
6575 nMax = GetRangeMax(); | |
6576 } | |
6577 | |
6578 void SetRange(int nMin, int nMax, BOOL bRedraw = TRUE) | |
6579 { | |
6580 ATLASSERT(::IsWindow(m_hWnd)); | |
6581 ::SendMessage(m_hWnd, TBM_SETRANGE, bRedraw, MAKELPARAM(nMin, nM
ax)); | |
6582 } | |
6583 | |
6584 int GetSelStart() const | |
6585 { | |
6586 ATLASSERT(::IsWindow(m_hWnd)); | |
6587 return (int)::SendMessage(m_hWnd, TBM_GETSELSTART, 0, 0L); | |
6588 } | |
6589 | |
6590 void SetSelStart(int nMin) | |
6591 { | |
6592 ATLASSERT(::IsWindow(m_hWnd)); | |
6593 ::SendMessage(m_hWnd, TBM_SETSELSTART, 0, (LPARAM)nMin); | |
6594 } | |
6595 | |
6596 int GetSelEnd() const | |
6597 { | |
6598 ATLASSERT(::IsWindow(m_hWnd)); | |
6599 return (int)::SendMessage(m_hWnd, TBM_GETSELEND, 0, 0L); | |
6600 } | |
6601 | |
6602 void SetSelEnd(int nMax) | |
6603 { | |
6604 ATLASSERT(::IsWindow(m_hWnd)); | |
6605 ::SendMessage(m_hWnd, TBM_SETSELEND, 0, (LPARAM)nMax); | |
6606 } | |
6607 | |
6608 void GetSelection(int& nMin, int& nMax) const | |
6609 { | |
6610 nMin = GetSelStart(); | |
6611 nMax = GetSelEnd(); | |
6612 } | |
6613 | |
6614 void SetSelection(int nMin, int nMax) | |
6615 { | |
6616 SetSelStart(nMin); | |
6617 SetSelEnd(nMax); | |
6618 } | |
6619 | |
6620 void GetChannelRect(LPRECT lprc) const | |
6621 { | |
6622 ATLASSERT(::IsWindow(m_hWnd)); | |
6623 ::SendMessage(m_hWnd, TBM_GETCHANNELRECT, 0, (LPARAM)lprc); | |
6624 } | |
6625 | |
6626 void GetThumbRect(LPRECT lprc) const | |
6627 { | |
6628 ATLASSERT(::IsWindow(m_hWnd)); | |
6629 ::SendMessage(m_hWnd, TBM_GETTHUMBRECT, 0, (LPARAM)lprc); | |
6630 } | |
6631 | |
6632 int GetPos() const | |
6633 { | |
6634 ATLASSERT(::IsWindow(m_hWnd)); | |
6635 return (int)::SendMessage(m_hWnd, TBM_GETPOS, 0, 0L); | |
6636 } | |
6637 | |
6638 void SetPos(int nPos) | |
6639 { | |
6640 ATLASSERT(::IsWindow(m_hWnd)); | |
6641 ::SendMessage(m_hWnd, TBM_SETPOS, TRUE, nPos); | |
6642 } | |
6643 | |
6644 UINT GetNumTics() const | |
6645 { | |
6646 ATLASSERT(::IsWindow(m_hWnd)); | |
6647 return (UINT)::SendMessage(m_hWnd, TBM_GETNUMTICS, 0, 0L); | |
6648 } | |
6649 | |
6650 DWORD* GetTicArray() const | |
6651 { | |
6652 ATLASSERT(::IsWindow(m_hWnd)); | |
6653 return (DWORD*)::SendMessage(m_hWnd, TBM_GETPTICS, 0, 0L); | |
6654 } | |
6655 | |
6656 int GetTic(int nTic) const | |
6657 { | |
6658 ATLASSERT(::IsWindow(m_hWnd)); | |
6659 return (int)::SendMessage(m_hWnd, TBM_GETTIC, nTic, 0L); | |
6660 } | |
6661 | |
6662 BOOL SetTic(int nTic) | |
6663 { | |
6664 ATLASSERT(::IsWindow(m_hWnd)); | |
6665 return (BOOL)::SendMessage(m_hWnd, TBM_SETTIC, 0, nTic); | |
6666 } | |
6667 | |
6668 int GetTicPos(int nTic) const | |
6669 { | |
6670 ATLASSERT(::IsWindow(m_hWnd)); | |
6671 return (int)::SendMessage(m_hWnd, TBM_GETTICPOS, nTic, 0L); | |
6672 } | |
6673 | |
6674 void SetTicFreq(int nFreq) | |
6675 { | |
6676 ATLASSERT(::IsWindow(m_hWnd)); | |
6677 ::SendMessage(m_hWnd, TBM_SETTICFREQ, nFreq, 0L); | |
6678 } | |
6679 | |
6680 int GetThumbLength() const | |
6681 { | |
6682 ATLASSERT(::IsWindow(m_hWnd)); | |
6683 return (int)::SendMessage(m_hWnd, TBM_GETTHUMBLENGTH, 0, 0L); | |
6684 } | |
6685 | |
6686 void SetThumbLength(int nLength) | |
6687 { | |
6688 ATLASSERT(::IsWindow(m_hWnd)); | |
6689 ::SendMessage(m_hWnd, TBM_SETTHUMBLENGTH, nLength, 0L); | |
6690 } | |
6691 | |
6692 void SetSel(int nStart, int nEnd, BOOL bRedraw = TRUE) | |
6693 { | |
6694 ATLASSERT(::IsWindow(m_hWnd)); | |
6695 ATLASSERT((GetStyle() & TBS_ENABLESELRANGE) != 0); | |
6696 ::SendMessage(m_hWnd, TBM_SETSEL, bRedraw, MAKELPARAM(nStart, nE
nd)); | |
6697 } | |
6698 | |
6699 ATL::CWindow GetBuddy(BOOL bLeft = TRUE) const | |
6700 { | |
6701 ATLASSERT(::IsWindow(m_hWnd)); | |
6702 return ATL::CWindow((HWND)::SendMessage(m_hWnd, TBM_GETBUDDY, bL
eft, 0L)); | |
6703 } | |
6704 | |
6705 ATL::CWindow SetBuddy(HWND hWndBuddy, BOOL bLeft = TRUE) | |
6706 { | |
6707 ATLASSERT(::IsWindow(m_hWnd)); | |
6708 return ATL::CWindow((HWND)::SendMessage(m_hWnd, TBM_SETBUDDY, bL
eft, (LPARAM)hWndBuddy)); | |
6709 } | |
6710 | |
6711 #ifndef _WIN32_WCE | |
6712 CToolTipCtrl GetToolTips() const | |
6713 { | |
6714 ATLASSERT(::IsWindow(m_hWnd)); | |
6715 return CToolTipCtrl((HWND)::SendMessage(m_hWnd, TBM_GETTOOLTIPS,
0, 0L)); | |
6716 } | |
6717 | |
6718 void SetToolTips(HWND hWndTT) | |
6719 { | |
6720 ATLASSERT(::IsWindow(m_hWnd)); | |
6721 ::SendMessage(m_hWnd, TBM_SETTOOLTIPS, (WPARAM)hWndTT, 0L); | |
6722 } | |
6723 | |
6724 int SetTipSide(int nSide) | |
6725 { | |
6726 ATLASSERT(::IsWindow(m_hWnd)); | |
6727 return (int)::SendMessage(m_hWnd, TBM_SETTIPSIDE, nSide, 0L); | |
6728 } | |
6729 #endif // !_WIN32_WCE | |
6730 | |
6731 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
6732 BOOL GetUnicodeFormat() const | |
6733 { | |
6734 ATLASSERT(::IsWindow(m_hWnd)); | |
6735 return (BOOL)::SendMessage(m_hWnd, TBM_GETUNICODEFORMAT, 0, 0L); | |
6736 } | |
6737 | |
6738 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE) | |
6739 { | |
6740 ATLASSERT(::IsWindow(m_hWnd)); | |
6741 return (BOOL)::SendMessage(m_hWnd, TBM_SETUNICODEFORMAT, bUnicod
e, 0L); | |
6742 } | |
6743 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
6744 | |
6745 // Operations | |
6746 void ClearSel(BOOL bRedraw = FALSE) | |
6747 { | |
6748 ATLASSERT(::IsWindow(m_hWnd)); | |
6749 ::SendMessage(m_hWnd, TBM_CLEARSEL, bRedraw, 0L); | |
6750 } | |
6751 | |
6752 void VerifyPos() | |
6753 { | |
6754 ATLASSERT(::IsWindow(m_hWnd)); | |
6755 ::SendMessage(m_hWnd, TBM_SETPOS, FALSE, 0L); | |
6756 } | |
6757 | |
6758 void ClearTics(BOOL bRedraw = FALSE) | |
6759 { | |
6760 ATLASSERT(::IsWindow(m_hWnd)); | |
6761 ::SendMessage(m_hWnd, TBM_CLEARTICS, bRedraw, 0L); | |
6762 } | |
6763 }; | |
6764 | |
6765 typedef CTrackBarCtrlT<ATL::CWindow> CTrackBarCtrl; | |
6766 | |
6767 | |
6768 /////////////////////////////////////////////////////////////////////////////// | |
6769 // CUpDownCtrl | |
6770 | |
6771 template <class TBase> | |
6772 class CUpDownCtrlT : public TBase | |
6773 { | |
6774 public: | |
6775 // Constructors | |
6776 CUpDownCtrlT(HWND hWnd = NULL) : TBase(hWnd) | |
6777 { } | |
6778 | |
6779 CUpDownCtrlT< TBase >& operator =(HWND hWnd) | |
6780 { | |
6781 m_hWnd = hWnd; | |
6782 return *this; | |
6783 } | |
6784 | |
6785 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
6786 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
6787 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
6788 { | |
6789 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
6790 } | |
6791 | |
6792 // Attributes | |
6793 static LPCTSTR GetWndClassName() | |
6794 { | |
6795 return UPDOWN_CLASS; | |
6796 } | |
6797 | |
6798 UINT GetAccel(int nAccel, UDACCEL* pAccel) const | |
6799 { | |
6800 ATLASSERT(::IsWindow(m_hWnd)); | |
6801 return (UINT)LOWORD(::SendMessage(m_hWnd, UDM_GETACCEL, nAccel,
(LPARAM)pAccel)); | |
6802 } | |
6803 | |
6804 BOOL SetAccel(int nAccel, UDACCEL* pAccel) | |
6805 { | |
6806 ATLASSERT(::IsWindow(m_hWnd)); | |
6807 return (BOOL)LOWORD(::SendMessage(m_hWnd, UDM_SETACCEL, nAccel,
(LPARAM)pAccel)); | |
6808 } | |
6809 | |
6810 UINT GetBase() const | |
6811 { | |
6812 ATLASSERT(::IsWindow(m_hWnd)); | |
6813 return (UINT)LOWORD(::SendMessage(m_hWnd, UDM_GETBASE, 0, 0L)); | |
6814 } | |
6815 | |
6816 int SetBase(int nBase) | |
6817 { | |
6818 ATLASSERT(::IsWindow(m_hWnd)); | |
6819 return (int)::SendMessage(m_hWnd, UDM_SETBASE, nBase, 0L); | |
6820 } | |
6821 | |
6822 ATL::CWindow GetBuddy() const | |
6823 { | |
6824 ATLASSERT(::IsWindow(m_hWnd)); | |
6825 return ATL::CWindow((HWND)::SendMessage(m_hWnd, UDM_GETBUDDY, 0,
0L)); | |
6826 } | |
6827 | |
6828 ATL::CWindow SetBuddy(HWND hWndBuddy) | |
6829 { | |
6830 ATLASSERT(::IsWindow(m_hWnd)); | |
6831 return ATL::CWindow((HWND)::SendMessage(m_hWnd, UDM_SETBUDDY, (W
PARAM)hWndBuddy, 0L)); | |
6832 } | |
6833 | |
6834 int GetPos(LPBOOL lpbError = NULL) const | |
6835 { | |
6836 ATLASSERT(::IsWindow(m_hWnd)); | |
6837 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, UDM_GETPOS, 0, 0L); | |
6838 // Note: Seems that Windows always sets error to TRUE if | |
6839 // UDS_SETBUDDYINT style is not used | |
6840 if(lpbError != NULL) | |
6841 *lpbError = (HIWORD(dwRet) != 0) ? TRUE : FALSE; | |
6842 return (int)(short)LOWORD(dwRet); | |
6843 } | |
6844 | |
6845 int SetPos(int nPos) | |
6846 { | |
6847 ATLASSERT(::IsWindow(m_hWnd)); | |
6848 return (int)(short)LOWORD(::SendMessage(m_hWnd, UDM_SETPOS, 0, M
AKELPARAM(nPos, 0))); | |
6849 } | |
6850 | |
6851 DWORD GetRange() const | |
6852 { | |
6853 ATLASSERT(::IsWindow(m_hWnd)); | |
6854 return (DWORD)::SendMessage(m_hWnd, UDM_GETRANGE, 0, 0L); | |
6855 } | |
6856 | |
6857 void GetRange(int& nLower, int& nUpper) const | |
6858 { | |
6859 ATLASSERT(::IsWindow(m_hWnd)); | |
6860 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, UDM_GETRANGE, 0, 0L); | |
6861 nLower = (int)(short)HIWORD(dwRet); | |
6862 nUpper = (int)(short)LOWORD(dwRet); | |
6863 } | |
6864 | |
6865 void SetRange(int nLower, int nUpper) | |
6866 { | |
6867 ATLASSERT(::IsWindow(m_hWnd)); | |
6868 ::SendMessage(m_hWnd, UDM_SETRANGE, 0, MAKELPARAM(nUpper, nLower
)); | |
6869 } | |
6870 | |
6871 #if (_WIN32_IE >= 0x0400) | |
6872 void SetRange32(int nLower, int nUpper) | |
6873 { | |
6874 ATLASSERT(::IsWindow(m_hWnd)); | |
6875 ::SendMessage(m_hWnd, UDM_SETRANGE32, nLower, nUpper); | |
6876 } | |
6877 | |
6878 void GetRange32(int& nLower, int& nUpper) const | |
6879 { | |
6880 ATLASSERT(::IsWindow(m_hWnd)); | |
6881 ::SendMessage(m_hWnd, UDM_GETRANGE32, (WPARAM)&nLower, (LPARAM)&
nUpper); | |
6882 } | |
6883 | |
6884 #ifndef _WIN32_WCE | |
6885 BOOL GetUnicodeFormat() const | |
6886 { | |
6887 ATLASSERT(::IsWindow(m_hWnd)); | |
6888 return (BOOL)::SendMessage(m_hWnd, UDM_GETUNICODEFORMAT, 0, 0L); | |
6889 } | |
6890 | |
6891 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE) | |
6892 { | |
6893 ATLASSERT(::IsWindow(m_hWnd)); | |
6894 return (BOOL)::SendMessage(m_hWnd, UDM_SETUNICODEFORMAT, bUnicod
e, 0L); | |
6895 } | |
6896 #endif // !_WIN32_WCE | |
6897 #endif // (_WIN32_IE >= 0x0400) | |
6898 | |
6899 #if (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE) | |
6900 int GetPos32(LPBOOL lpbError = NULL) const | |
6901 { | |
6902 ATLASSERT(::IsWindow(m_hWnd)); | |
6903 // Note: Seems that Windows always sets error to TRUE if | |
6904 // UDS_SETBUDDYINT style is not used | |
6905 return (int)::SendMessage(m_hWnd, UDM_GETPOS32, 0, (LPARAM)lpbEr
ror); | |
6906 } | |
6907 | |
6908 int SetPos32(int nPos) | |
6909 { | |
6910 ATLASSERT(::IsWindow(m_hWnd)); | |
6911 return (int)::SendMessage(m_hWnd, UDM_SETPOS32, 0, (LPARAM)nPos)
; | |
6912 } | |
6913 #endif // (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE) | |
6914 }; | |
6915 | |
6916 typedef CUpDownCtrlT<ATL::CWindow> CUpDownCtrl; | |
6917 | |
6918 | |
6919 /////////////////////////////////////////////////////////////////////////////// | |
6920 // CProgressBarCtrl | |
6921 | |
6922 template <class TBase> | |
6923 class CProgressBarCtrlT : public TBase | |
6924 { | |
6925 public: | |
6926 // Constructors | |
6927 CProgressBarCtrlT(HWND hWnd = NULL) : TBase(hWnd) | |
6928 { } | |
6929 | |
6930 CProgressBarCtrlT< TBase >& operator =(HWND hWnd) | |
6931 { | |
6932 m_hWnd = hWnd; | |
6933 return *this; | |
6934 } | |
6935 | |
6936 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
6937 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
6938 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
6939 { | |
6940 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
6941 } | |
6942 | |
6943 // Attributes | |
6944 static LPCTSTR GetWndClassName() | |
6945 { | |
6946 return PROGRESS_CLASS; | |
6947 } | |
6948 | |
6949 DWORD SetRange(int nLower, int nUpper) | |
6950 { | |
6951 ATLASSERT(::IsWindow(m_hWnd)); | |
6952 return (DWORD)::SendMessage(m_hWnd, PBM_SETRANGE, 0, MAKELPARAM(
nLower, nUpper)); | |
6953 } | |
6954 | |
6955 int SetPos(int nPos) | |
6956 { | |
6957 ATLASSERT(::IsWindow(m_hWnd)); | |
6958 return (int)(short)LOWORD(::SendMessage(m_hWnd, PBM_SETPOS, nPos
, 0L)); | |
6959 } | |
6960 | |
6961 int OffsetPos(int nPos) | |
6962 { | |
6963 ATLASSERT(::IsWindow(m_hWnd)); | |
6964 return (int)(short)LOWORD(::SendMessage(m_hWnd, PBM_DELTAPOS, nP
os, 0L)); | |
6965 } | |
6966 | |
6967 int SetStep(int nStep) | |
6968 { | |
6969 ATLASSERT(::IsWindow(m_hWnd)); | |
6970 return (int)(short)LOWORD(::SendMessage(m_hWnd, PBM_SETSTEP, nSt
ep, 0L)); | |
6971 } | |
6972 | |
6973 UINT GetPos() const | |
6974 { | |
6975 ATLASSERT(::IsWindow(m_hWnd)); | |
6976 return (UINT)::SendMessage(m_hWnd, PBM_GETPOS, 0, 0L); | |
6977 } | |
6978 | |
6979 void GetRange(PPBRANGE pPBRange) const | |
6980 { | |
6981 ATLASSERT(::IsWindow(m_hWnd)); | |
6982 ATLASSERT(pPBRange != NULL); | |
6983 ::SendMessage(m_hWnd, PBM_GETRANGE, TRUE, (LPARAM)pPBRange); | |
6984 } | |
6985 | |
6986 void GetRange(int& nLower, int& nUpper) const | |
6987 { | |
6988 ATLASSERT(::IsWindow(m_hWnd)); | |
6989 PBRANGE range = { 0 }; | |
6990 ::SendMessage(m_hWnd, PBM_GETRANGE, TRUE, (LPARAM)&range); | |
6991 nLower = range.iLow; | |
6992 nUpper = range.iHigh; | |
6993 } | |
6994 | |
6995 int GetRangeLimit(BOOL bLowLimit) const | |
6996 { | |
6997 ATLASSERT(::IsWindow(m_hWnd)); | |
6998 return (int)::SendMessage(m_hWnd, PBM_GETRANGE, bLowLimit, (LPAR
AM)NULL); | |
6999 } | |
7000 | |
7001 DWORD SetRange32(int nMin, int nMax) | |
7002 { | |
7003 ATLASSERT(::IsWindow(m_hWnd)); | |
7004 return (DWORD)::SendMessage(m_hWnd, PBM_SETRANGE32, nMin, nMax); | |
7005 } | |
7006 | |
7007 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
7008 COLORREF SetBarColor(COLORREF clr) | |
7009 { | |
7010 ATLASSERT(::IsWindow(m_hWnd)); | |
7011 return (COLORREF)::SendMessage(m_hWnd, PBM_SETBARCOLOR, 0, (LPAR
AM)clr); | |
7012 } | |
7013 | |
7014 COLORREF SetBkColor(COLORREF clr) | |
7015 { | |
7016 ATLASSERT(::IsWindow(m_hWnd)); | |
7017 return (COLORREF)::SendMessage(m_hWnd, PBM_SETBKCOLOR, 0, (LPARA
M)clr); | |
7018 } | |
7019 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
7020 | |
7021 #if (_WIN32_WINNT >= 0x0501) && defined(PBM_SETMARQUEE) | |
7022 BOOL SetMarquee(BOOL bMarquee, UINT uUpdateTime = 0U) | |
7023 { | |
7024 ATLASSERT(::IsWindow(m_hWnd)); | |
7025 return (BOOL)::SendMessage(m_hWnd, PBM_SETMARQUEE, (WPARAM)bMarq
uee, (LPARAM)uUpdateTime); | |
7026 } | |
7027 #endif // (_WIN32_WINNT >= 0x0501) && defined(PBM_SETMARQUEE) | |
7028 | |
7029 #if (_WIN32_WINNT >= 0x0600) | |
7030 int GetStep() const | |
7031 { | |
7032 ATLASSERT(::IsWindow(m_hWnd)); | |
7033 return (int)::SendMessage(m_hWnd, PBM_GETSTEP, 0, 0L); | |
7034 } | |
7035 | |
7036 COLORREF GetBkColor() const | |
7037 { | |
7038 ATLASSERT(::IsWindow(m_hWnd)); | |
7039 return (COLORREF)::SendMessage(m_hWnd, PBM_GETBKCOLOR, 0, 0L); | |
7040 } | |
7041 | |
7042 COLORREF GetBarColor() const | |
7043 { | |
7044 ATLASSERT(::IsWindow(m_hWnd)); | |
7045 return (COLORREF)::SendMessage(m_hWnd, PBM_GETBARCOLOR, 0, 0L); | |
7046 } | |
7047 | |
7048 int GetState() const | |
7049 { | |
7050 ATLASSERT(::IsWindow(m_hWnd)); | |
7051 return (int)::SendMessage(m_hWnd, PBM_GETSTATE, 0, 0L); | |
7052 } | |
7053 | |
7054 int SetState(int nState) | |
7055 { | |
7056 ATLASSERT(::IsWindow(m_hWnd)); | |
7057 return (int)::SendMessage(m_hWnd, PBM_SETSTATE, nState, 0L); | |
7058 } | |
7059 #endif // (_WIN32_WINNT >= 0x0600) | |
7060 | |
7061 // Operations | |
7062 int StepIt() | |
7063 { | |
7064 ATLASSERT(::IsWindow(m_hWnd)); | |
7065 return (int)(short)LOWORD(::SendMessage(m_hWnd, PBM_STEPIT, 0, 0
L)); | |
7066 } | |
7067 }; | |
7068 | |
7069 typedef CProgressBarCtrlT<ATL::CWindow> CProgressBarCtrl; | |
7070 | |
7071 | |
7072 /////////////////////////////////////////////////////////////////////////////// | |
7073 // CHotKeyCtrl | |
7074 | |
7075 #ifndef _WIN32_WCE | |
7076 | |
7077 template <class TBase> | |
7078 class CHotKeyCtrlT : public TBase | |
7079 { | |
7080 public: | |
7081 // Constructors | |
7082 CHotKeyCtrlT(HWND hWnd = NULL) : TBase(hWnd) | |
7083 { } | |
7084 | |
7085 CHotKeyCtrlT< TBase >& operator =(HWND hWnd) | |
7086 { | |
7087 m_hWnd = hWnd; | |
7088 return *this; | |
7089 } | |
7090 | |
7091 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
7092 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
7093 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
7094 { | |
7095 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
7096 } | |
7097 | |
7098 // Attributes | |
7099 static LPCTSTR GetWndClassName() | |
7100 { | |
7101 return HOTKEY_CLASS; | |
7102 } | |
7103 | |
7104 DWORD GetHotKey() const | |
7105 { | |
7106 ATLASSERT(::IsWindow(m_hWnd)); | |
7107 return (DWORD)::SendMessage(m_hWnd, HKM_GETHOTKEY, 0, 0L); | |
7108 } | |
7109 | |
7110 void GetHotKey(WORD &wVirtualKeyCode, WORD &wModifiers) const | |
7111 { | |
7112 ATLASSERT(::IsWindow(m_hWnd)); | |
7113 DWORD dw = (DWORD)::SendMessage(m_hWnd, HKM_GETHOTKEY, 0, 0L); | |
7114 wVirtualKeyCode = LOBYTE(LOWORD(dw)); | |
7115 wModifiers = HIBYTE(LOWORD(dw)); | |
7116 } | |
7117 | |
7118 void SetHotKey(WORD wVirtualKeyCode, WORD wModifiers) | |
7119 { | |
7120 ATLASSERT(::IsWindow(m_hWnd)); | |
7121 ::SendMessage(m_hWnd, HKM_SETHOTKEY, MAKEWORD(wVirtualKeyCode, w
Modifiers), 0L); | |
7122 } | |
7123 | |
7124 void SetRules(WORD wInvalidComb, WORD wModifiers) | |
7125 { | |
7126 ATLASSERT(::IsWindow(m_hWnd)); | |
7127 ::SendMessage(m_hWnd, HKM_SETRULES, wInvalidComb, MAKELPARAM(wMo
difiers, 0)); | |
7128 } | |
7129 }; | |
7130 | |
7131 typedef CHotKeyCtrlT<ATL::CWindow> CHotKeyCtrl; | |
7132 | |
7133 #endif // !_WIN32_WCE | |
7134 | |
7135 | |
7136 /////////////////////////////////////////////////////////////////////////////// | |
7137 // CAnimateCtrl | |
7138 | |
7139 #ifndef _WIN32_WCE | |
7140 | |
7141 template <class TBase> | |
7142 class CAnimateCtrlT : public TBase | |
7143 { | |
7144 public: | |
7145 // Constructors | |
7146 CAnimateCtrlT(HWND hWnd = NULL) : TBase(hWnd) | |
7147 { } | |
7148 | |
7149 CAnimateCtrlT< TBase >& operator =(HWND hWnd) | |
7150 { | |
7151 m_hWnd = hWnd; | |
7152 return *this; | |
7153 } | |
7154 | |
7155 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
7156 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
7157 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
7158 { | |
7159 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
7160 } | |
7161 | |
7162 // Attributes | |
7163 static LPCTSTR GetWndClassName() | |
7164 { | |
7165 return ANIMATE_CLASS; | |
7166 } | |
7167 | |
7168 // Operations | |
7169 BOOL Open(ATL::_U_STRINGorID FileName) | |
7170 { | |
7171 ATLASSERT(::IsWindow(m_hWnd)); | |
7172 return (BOOL)::SendMessage(m_hWnd, ACM_OPEN, 0, (LPARAM)FileName
.m_lpstr); | |
7173 } | |
7174 | |
7175 BOOL Play(UINT nFrom, UINT nTo, UINT nRep) | |
7176 { | |
7177 ATLASSERT(::IsWindow(m_hWnd)); | |
7178 return (BOOL)::SendMessage(m_hWnd, ACM_PLAY, nRep, MAKELPARAM(nF
rom, nTo)); | |
7179 } | |
7180 | |
7181 BOOL Stop() | |
7182 { | |
7183 ATLASSERT(::IsWindow(m_hWnd)); | |
7184 return (BOOL)::SendMessage(m_hWnd, ACM_STOP, 0, 0L); | |
7185 } | |
7186 | |
7187 BOOL Close() | |
7188 { | |
7189 ATLASSERT(::IsWindow(m_hWnd)); | |
7190 return (BOOL)::SendMessage(m_hWnd, ACM_OPEN, 0, 0L); | |
7191 } | |
7192 | |
7193 BOOL Seek(UINT nTo) | |
7194 { | |
7195 ATLASSERT(::IsWindow(m_hWnd)); | |
7196 return (BOOL)::SendMessage(m_hWnd, ACM_PLAY, 0, MAKELPARAM(nTo,
nTo)); | |
7197 } | |
7198 | |
7199 // Vista only | |
7200 BOOL IsPlaying() const | |
7201 { | |
7202 #ifndef ACM_ISPLAYING | |
7203 const UINT ACM_ISPLAYING = (WM_USER+104); | |
7204 #endif | |
7205 ATLASSERT(::IsWindow(m_hWnd)); | |
7206 return (BOOL)::SendMessage(m_hWnd, ACM_ISPLAYING, 0, 0L); | |
7207 } | |
7208 }; | |
7209 | |
7210 typedef CAnimateCtrlT<ATL::CWindow> CAnimateCtrl; | |
7211 | |
7212 #endif // !_WIN32_WCE | |
7213 | |
7214 | |
7215 /////////////////////////////////////////////////////////////////////////////// | |
7216 // CRichEditCtrl | |
7217 | |
7218 #ifndef _WIN32_WCE | |
7219 | |
7220 #ifdef _UNICODE | |
7221 #if (_RICHEDIT_VER == 0x0100) | |
7222 #undef RICHEDIT_CLASS | |
7223 #define RICHEDIT_CLASS L"RICHEDIT" | |
7224 #endif // (_RICHEDIT_VER == 0x0100) | |
7225 #endif // _UNICODE | |
7226 | |
7227 template <class TBase> | |
7228 class CRichEditCtrlT : public TBase | |
7229 { | |
7230 public: | |
7231 // Constructors | |
7232 CRichEditCtrlT(HWND hWnd = NULL) : TBase(hWnd) | |
7233 { } | |
7234 | |
7235 CRichEditCtrlT< TBase >& operator =(HWND hWnd) | |
7236 { | |
7237 m_hWnd = hWnd; | |
7238 return *this; | |
7239 } | |
7240 | |
7241 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
7242 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
7243 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
7244 { | |
7245 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
7246 } | |
7247 | |
7248 // Attributes | |
7249 static LPCTSTR GetWndClassName() | |
7250 { | |
7251 return RICHEDIT_CLASS; | |
7252 } | |
7253 | |
7254 static LPCTSTR GetLibraryName() | |
7255 { | |
7256 #if (_RICHEDIT_VER >= 0x0200) | |
7257 return _T("RICHED20.DLL"); | |
7258 #else | |
7259 return _T("RICHED32.DLL"); | |
7260 #endif | |
7261 } | |
7262 | |
7263 int GetLineCount() const | |
7264 { | |
7265 ATLASSERT(::IsWindow(m_hWnd)); | |
7266 return (int)::SendMessage(m_hWnd, EM_GETLINECOUNT, 0, 0L); | |
7267 } | |
7268 | |
7269 BOOL GetModify() const | |
7270 { | |
7271 ATLASSERT(::IsWindow(m_hWnd)); | |
7272 return (BOOL)::SendMessage(m_hWnd, EM_GETMODIFY, 0, 0L); | |
7273 } | |
7274 | |
7275 void SetModify(BOOL bModified = TRUE) | |
7276 { | |
7277 ATLASSERT(::IsWindow(m_hWnd)); | |
7278 ::SendMessage(m_hWnd, EM_SETMODIFY, bModified, 0L); | |
7279 } | |
7280 | |
7281 void GetRect(LPRECT lpRect) const | |
7282 { | |
7283 ATLASSERT(::IsWindow(m_hWnd)); | |
7284 ::SendMessage(m_hWnd, EM_GETRECT, 0, (LPARAM)lpRect); | |
7285 } | |
7286 | |
7287 DWORD GetOptions() const | |
7288 { | |
7289 ATLASSERT(::IsWindow(m_hWnd)); | |
7290 return (DWORD)::SendMessage(m_hWnd, EM_GETOPTIONS, 0, 0L); | |
7291 } | |
7292 | |
7293 DWORD SetOptions(WORD wOperation, DWORD dwOptions) | |
7294 { | |
7295 ATLASSERT(::IsWindow(m_hWnd)); | |
7296 return (DWORD)::SendMessage(m_hWnd, EM_SETOPTIONS, wOperation, d
wOptions); | |
7297 } | |
7298 | |
7299 // NOTE: first word in lpszBuffer must contain the size of the buffer! | |
7300 int GetLine(int nIndex, LPTSTR lpszBuffer) const | |
7301 { | |
7302 ATLASSERT(::IsWindow(m_hWnd)); | |
7303 return (int)::SendMessage(m_hWnd, EM_GETLINE, nIndex, (LPARAM)lp
szBuffer); | |
7304 } | |
7305 | |
7306 int GetLine(int nIndex, LPTSTR lpszBuffer, int nMaxLength) const | |
7307 { | |
7308 ATLASSERT(::IsWindow(m_hWnd)); | |
7309 *(LPWORD)lpszBuffer = (WORD)nMaxLength; | |
7310 return (int)::SendMessage(m_hWnd, EM_GETLINE, nIndex, (LPARAM)lp
szBuffer); | |
7311 } | |
7312 | |
7313 BOOL CanUndo() const | |
7314 { | |
7315 ATLASSERT(::IsWindow(m_hWnd)); | |
7316 return (BOOL)::SendMessage(m_hWnd, EM_CANUNDO, 0, 0L); | |
7317 } | |
7318 | |
7319 BOOL CanPaste(UINT nFormat = 0) const | |
7320 { | |
7321 ATLASSERT(::IsWindow(m_hWnd)); | |
7322 return (BOOL)::SendMessage(m_hWnd, EM_CANPASTE, nFormat, 0L); | |
7323 } | |
7324 | |
7325 void GetSel(LONG& nStartChar, LONG& nEndChar) const | |
7326 { | |
7327 ATLASSERT(::IsWindow(m_hWnd)); | |
7328 CHARRANGE cr = { 0, 0 }; | |
7329 ::SendMessage(m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr); | |
7330 nStartChar = cr.cpMin; | |
7331 nEndChar = cr.cpMax; | |
7332 } | |
7333 | |
7334 void GetSel(CHARRANGE &cr) const | |
7335 { | |
7336 ATLASSERT(::IsWindow(m_hWnd)); | |
7337 ::SendMessage(m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr); | |
7338 } | |
7339 | |
7340 int SetSel(LONG nStartChar, LONG nEndChar) | |
7341 { | |
7342 ATLASSERT(::IsWindow(m_hWnd)); | |
7343 CHARRANGE cr = { nStartChar, nEndChar }; | |
7344 return (int)::SendMessage(m_hWnd, EM_EXSETSEL, 0, (LPARAM)&cr); | |
7345 } | |
7346 | |
7347 int SetSel(CHARRANGE &cr) | |
7348 { | |
7349 ATLASSERT(::IsWindow(m_hWnd)); | |
7350 return (int)::SendMessage(m_hWnd, EM_EXSETSEL, 0, (LPARAM)&cr); | |
7351 } | |
7352 | |
7353 int SetSelAll() | |
7354 { | |
7355 return SetSel(0, -1); | |
7356 } | |
7357 | |
7358 int SetSelNone() | |
7359 { | |
7360 return SetSel(-1, 0); | |
7361 } | |
7362 | |
7363 DWORD GetDefaultCharFormat(CHARFORMAT& cf) const | |
7364 { | |
7365 ATLASSERT(::IsWindow(m_hWnd)); | |
7366 cf.cbSize = sizeof(CHARFORMAT); | |
7367 return (DWORD)::SendMessage(m_hWnd, EM_GETCHARFORMAT, 0, (LPARAM
)&cf); | |
7368 } | |
7369 | |
7370 DWORD GetSelectionCharFormat(CHARFORMAT& cf) const | |
7371 { | |
7372 ATLASSERT(::IsWindow(m_hWnd)); | |
7373 cf.cbSize = sizeof(CHARFORMAT); | |
7374 return (DWORD)::SendMessage(m_hWnd, EM_GETCHARFORMAT, 1, (LPARAM
)&cf); | |
7375 } | |
7376 | |
7377 DWORD GetEventMask() const | |
7378 { | |
7379 ATLASSERT(::IsWindow(m_hWnd)); | |
7380 return (DWORD)::SendMessage(m_hWnd, EM_GETEVENTMASK, 0, 0L); | |
7381 } | |
7382 | |
7383 LONG GetLimitText() const | |
7384 { | |
7385 ATLASSERT(::IsWindow(m_hWnd)); | |
7386 return (LONG)::SendMessage(m_hWnd, EM_GETLIMITTEXT, 0, 0L); | |
7387 } | |
7388 | |
7389 DWORD GetParaFormat(PARAFORMAT& pf) const | |
7390 { | |
7391 ATLASSERT(::IsWindow(m_hWnd)); | |
7392 pf.cbSize = sizeof(PARAFORMAT); | |
7393 return (DWORD)::SendMessage(m_hWnd, EM_GETPARAFORMAT, 0, (LPARAM
)&pf); | |
7394 } | |
7395 | |
7396 #if (_RICHEDIT_VER >= 0x0200) | |
7397 LONG GetSelText(LPTSTR lpstrBuff) const | |
7398 { | |
7399 ATLASSERT(::IsWindow(m_hWnd)); | |
7400 return (LONG)::SendMessage(m_hWnd, EM_GETSELTEXT, 0, (LPARAM)lps
trBuff); | |
7401 } | |
7402 #else // !(_RICHEDIT_VER >= 0x0200) | |
7403 // RichEdit 1.0 EM_GETSELTEXT is ANSI only | |
7404 LONG GetSelText(LPSTR lpstrBuff) const | |
7405 { | |
7406 ATLASSERT(::IsWindow(m_hWnd)); | |
7407 return (LONG)::SendMessage(m_hWnd, EM_GETSELTEXT, 0, (LPARAM)lps
trBuff); | |
7408 } | |
7409 #endif // !(_RICHEDIT_VER >= 0x0200) | |
7410 | |
7411 #ifndef _ATL_NO_COM | |
7412 BOOL GetSelTextBSTR(BSTR& bstrText) const | |
7413 { | |
7414 USES_CONVERSION; | |
7415 ATLASSERT(::IsWindow(m_hWnd)); | |
7416 ATLASSERT(bstrText == NULL); | |
7417 | |
7418 CHARRANGE cr = { 0, 0 }; | |
7419 ::SendMessage(m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr); | |
7420 | |
7421 #if (_RICHEDIT_VER >= 0x0200) | |
7422 CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff; | |
7423 LPTSTR lpstrText = buff.Allocate(cr.cpMax - cr.cpMin + 1); | |
7424 if(lpstrText == NULL) | |
7425 return FALSE; | |
7426 if(::SendMessage(m_hWnd, EM_GETSELTEXT, 0, (LPARAM)lpstrText) ==
0) | |
7427 return FALSE; | |
7428 | |
7429 bstrText = ::SysAllocString(T2W(lpstrText)); | |
7430 #else // !(_RICHEDIT_VER >= 0x0200) | |
7431 CTempBuffer<char, _WTL_STACK_ALLOC_THRESHOLD> buff; | |
7432 LPSTR lpstrText = buff.Allocate(cr.cpMax - cr.cpMin + 1); | |
7433 if(lpstrText == NULL) | |
7434 return FALSE; | |
7435 if(::SendMessage(m_hWnd, EM_GETSELTEXT, 0, (LPARAM)lpstrText) ==
0) | |
7436 return FALSE; | |
7437 | |
7438 bstrText = ::SysAllocString(A2W(lpstrText)); | |
7439 #endif // !(_RICHEDIT_VER >= 0x0200) | |
7440 | |
7441 return (bstrText != NULL) ? TRUE : FALSE; | |
7442 } | |
7443 #endif // !_ATL_NO_COM | |
7444 | |
7445 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) | |
7446 LONG GetSelText(_CSTRING_NS::CString& strText) const | |
7447 { | |
7448 ATLASSERT(::IsWindow(m_hWnd)); | |
7449 | |
7450 CHARRANGE cr = { 0, 0 }; | |
7451 ::SendMessage(m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr); | |
7452 | |
7453 #if (_RICHEDIT_VER >= 0x0200) | |
7454 LONG lLen = 0; | |
7455 LPTSTR lpstrText = strText.GetBufferSetLength(cr.cpMax - cr.cpMi
n); | |
7456 if(lpstrText != NULL) | |
7457 { | |
7458 lLen = (LONG)::SendMessage(m_hWnd, EM_GETSELTEXT, 0, (LP
ARAM)lpstrText); | |
7459 strText.ReleaseBuffer(); | |
7460 } | |
7461 #else // !(_RICHEDIT_VER >= 0x0200) | |
7462 CTempBuffer<char, _WTL_STACK_ALLOC_THRESHOLD> buff; | |
7463 LPSTR lpstrText = buff.Allocate(cr.cpMax - cr.cpMin + 1); | |
7464 if(lpstrText == NULL) | |
7465 return 0; | |
7466 LONG lLen = (LONG)::SendMessage(m_hWnd, EM_GETSELTEXT, 0, (LPARA
M)lpstrText); | |
7467 if(lLen == 0) | |
7468 return 0; | |
7469 | |
7470 USES_CONVERSION; | |
7471 strText = A2T(lpstrText); | |
7472 #endif // !(_RICHEDIT_VER >= 0x0200) | |
7473 | |
7474 return lLen; | |
7475 } | |
7476 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) | |
7477 | |
7478 WORD GetSelectionType() const | |
7479 { | |
7480 ATLASSERT(::IsWindow(m_hWnd)); | |
7481 return (WORD)::SendMessage(m_hWnd, EM_SELECTIONTYPE, 0, 0L); | |
7482 } | |
7483 | |
7484 COLORREF SetBackgroundColor(COLORREF cr) | |
7485 { | |
7486 ATLASSERT(::IsWindow(m_hWnd)); | |
7487 return (COLORREF)::SendMessage(m_hWnd, EM_SETBKGNDCOLOR, 0, cr); | |
7488 } | |
7489 | |
7490 COLORREF SetBackgroundColor() // sets to system background | |
7491 { | |
7492 ATLASSERT(::IsWindow(m_hWnd)); | |
7493 return (COLORREF)::SendMessage(m_hWnd, EM_SETBKGNDCOLOR, 1, 0); | |
7494 } | |
7495 | |
7496 BOOL SetCharFormat(CHARFORMAT& cf, WORD wFlags) | |
7497 { | |
7498 ATLASSERT(::IsWindow(m_hWnd)); | |
7499 cf.cbSize = sizeof(CHARFORMAT); | |
7500 return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, (WPARAM)wFl
ags, (LPARAM)&cf); | |
7501 } | |
7502 | |
7503 BOOL SetDefaultCharFormat(CHARFORMAT& cf) | |
7504 { | |
7505 ATLASSERT(::IsWindow(m_hWnd)); | |
7506 cf.cbSize = sizeof(CHARFORMAT); | |
7507 return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, 0, (LPARAM)
&cf); | |
7508 } | |
7509 | |
7510 BOOL SetSelectionCharFormat(CHARFORMAT& cf) | |
7511 { | |
7512 ATLASSERT(::IsWindow(m_hWnd)); | |
7513 cf.cbSize = sizeof(CHARFORMAT); | |
7514 return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, SCF_SELECTI
ON, (LPARAM)&cf); | |
7515 } | |
7516 | |
7517 BOOL SetWordCharFormat(CHARFORMAT& cf) | |
7518 { | |
7519 ATLASSERT(::IsWindow(m_hWnd)); | |
7520 cf.cbSize = sizeof(CHARFORMAT); | |
7521 return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, SCF_SELECTI
ON | SCF_WORD, (LPARAM)&cf); | |
7522 } | |
7523 | |
7524 DWORD SetEventMask(DWORD dwEventMask) | |
7525 { | |
7526 ATLASSERT(::IsWindow(m_hWnd)); | |
7527 return (DWORD)::SendMessage(m_hWnd, EM_SETEVENTMASK, 0, dwEventM
ask); | |
7528 } | |
7529 | |
7530 BOOL SetParaFormat(PARAFORMAT& pf) | |
7531 { | |
7532 ATLASSERT(::IsWindow(m_hWnd)); | |
7533 pf.cbSize = sizeof(PARAFORMAT); | |
7534 return (BOOL)::SendMessage(m_hWnd, EM_SETPARAFORMAT, 0, (LPARAM)
&pf); | |
7535 } | |
7536 | |
7537 BOOL SetTargetDevice(HDC hDC, int cxLineWidth) | |
7538 { | |
7539 ATLASSERT(::IsWindow(m_hWnd)); | |
7540 return (BOOL)::SendMessage(m_hWnd, EM_SETTARGETDEVICE, (WPARAM)h
DC, cxLineWidth); | |
7541 } | |
7542 | |
7543 int GetTextLength() const | |
7544 { | |
7545 ATLASSERT(::IsWindow(m_hWnd)); | |
7546 return (int)::SendMessage(m_hWnd, WM_GETTEXTLENGTH, 0, 0L); | |
7547 } | |
7548 | |
7549 BOOL SetReadOnly(BOOL bReadOnly = TRUE) | |
7550 { | |
7551 ATLASSERT(::IsWindow(m_hWnd)); | |
7552 return (BOOL)::SendMessage(m_hWnd, EM_SETREADONLY, bReadOnly, 0L
); | |
7553 } | |
7554 | |
7555 int GetFirstVisibleLine() const | |
7556 { | |
7557 ATLASSERT(::IsWindow(m_hWnd)); | |
7558 return (int)::SendMessage(m_hWnd, EM_GETFIRSTVISIBLELINE, 0, 0L)
; | |
7559 } | |
7560 | |
7561 EDITWORDBREAKPROCEX GetWordBreakProcEx() const | |
7562 { | |
7563 ATLASSERT(::IsWindow(m_hWnd)); | |
7564 return (EDITWORDBREAKPROCEX)::SendMessage(m_hWnd, EM_GETWORDBREA
KPROCEX, 0, 0L); | |
7565 } | |
7566 | |
7567 EDITWORDBREAKPROCEX SetWordBreakProcEx(EDITWORDBREAKPROCEX pfnEditWordBr
eakProcEx) | |
7568 { | |
7569 ATLASSERT(::IsWindow(m_hWnd)); | |
7570 return (EDITWORDBREAKPROCEX)::SendMessage(m_hWnd, EM_SETWORDBREA
KPROCEX, 0, (LPARAM)pfnEditWordBreakProcEx); | |
7571 } | |
7572 | |
7573 int GetTextRange(TEXTRANGE* pTextRange) const | |
7574 { | |
7575 ATLASSERT(::IsWindow(m_hWnd)); | |
7576 return (int)::SendMessage(m_hWnd, EM_GETTEXTRANGE, 0, (LPARAM)pT
extRange); | |
7577 } | |
7578 | |
7579 #if (_RICHEDIT_VER >= 0x0200) | |
7580 int GetTextRange(LONG nStartChar, LONG nEndChar, LPTSTR lpstrText) const | |
7581 { | |
7582 ATLASSERT(::IsWindow(m_hWnd)); | |
7583 TEXTRANGE tr = { 0 }; | |
7584 tr.chrg.cpMin = nStartChar; | |
7585 tr.chrg.cpMax = nEndChar; | |
7586 tr.lpstrText = lpstrText; | |
7587 return (int)::SendMessage(m_hWnd, EM_GETTEXTRANGE, 0, (LPARAM)&t
r); | |
7588 } | |
7589 #else // !(_RICHEDIT_VER >= 0x0200) | |
7590 | |
7591 int GetTextRange(LONG nStartChar, LONG nEndChar, LPSTR lpstrText) const | |
7592 { | |
7593 ATLASSERT(::IsWindow(m_hWnd)); | |
7594 TEXTRANGE tr = { 0 }; | |
7595 tr.chrg.cpMin = nStartChar; | |
7596 tr.chrg.cpMax = nEndChar; | |
7597 tr.lpstrText = lpstrText; | |
7598 return (int)::SendMessage(m_hWnd, EM_GETTEXTRANGE, 0, (LPARAM)&t
r); | |
7599 } | |
7600 #endif // !(_RICHEDIT_VER >= 0x0200) | |
7601 | |
7602 #if (_RICHEDIT_VER >= 0x0200) | |
7603 DWORD GetDefaultCharFormat(CHARFORMAT2& cf) const | |
7604 { | |
7605 ATLASSERT(::IsWindow(m_hWnd)); | |
7606 cf.cbSize = sizeof(CHARFORMAT2); | |
7607 return (DWORD)::SendMessage(m_hWnd, EM_GETCHARFORMAT, 0, (LPARAM
)&cf); | |
7608 } | |
7609 | |
7610 BOOL SetCharFormat(CHARFORMAT2& cf, WORD wFlags) | |
7611 { | |
7612 ATLASSERT(::IsWindow(m_hWnd)); | |
7613 cf.cbSize = sizeof(CHARFORMAT2); | |
7614 return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, (WPARAM)wFl
ags, (LPARAM)&cf); | |
7615 } | |
7616 | |
7617 BOOL SetDefaultCharFormat(CHARFORMAT2& cf) | |
7618 { | |
7619 ATLASSERT(::IsWindow(m_hWnd)); | |
7620 cf.cbSize = sizeof(CHARFORMAT2); | |
7621 return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, 0, (LPARAM)
&cf); | |
7622 } | |
7623 | |
7624 DWORD GetSelectionCharFormat(CHARFORMAT2& cf) const | |
7625 { | |
7626 ATLASSERT(::IsWindow(m_hWnd)); | |
7627 cf.cbSize = sizeof(CHARFORMAT2); | |
7628 return (DWORD)::SendMessage(m_hWnd, EM_GETCHARFORMAT, 1, (LPARAM
)&cf); | |
7629 } | |
7630 | |
7631 BOOL SetSelectionCharFormat(CHARFORMAT2& cf) | |
7632 { | |
7633 ATLASSERT(::IsWindow(m_hWnd)); | |
7634 cf.cbSize = sizeof(CHARFORMAT2); | |
7635 return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, SCF_SELECTI
ON, (LPARAM)&cf); | |
7636 } | |
7637 | |
7638 BOOL SetWordCharFormat(CHARFORMAT2& cf) | |
7639 { | |
7640 ATLASSERT(::IsWindow(m_hWnd)); | |
7641 cf.cbSize = sizeof(CHARFORMAT2); | |
7642 return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, SCF_SELECTI
ON | SCF_WORD, (LPARAM)&cf); | |
7643 } | |
7644 | |
7645 DWORD GetParaFormat(PARAFORMAT2& pf) const | |
7646 { | |
7647 ATLASSERT(::IsWindow(m_hWnd)); | |
7648 pf.cbSize = sizeof(PARAFORMAT2); | |
7649 return (DWORD)::SendMessage(m_hWnd, EM_GETPARAFORMAT, 0, (LPARAM
)&pf); | |
7650 } | |
7651 | |
7652 BOOL SetParaFormat(PARAFORMAT2& pf) | |
7653 { | |
7654 ATLASSERT(::IsWindow(m_hWnd)); | |
7655 pf.cbSize = sizeof(PARAFORMAT2); | |
7656 return (BOOL)::SendMessage(m_hWnd, EM_SETPARAFORMAT, 0, (LPARAM)
&pf); | |
7657 } | |
7658 | |
7659 TEXTMODE GetTextMode() const | |
7660 { | |
7661 ATLASSERT(::IsWindow(m_hWnd)); | |
7662 return (TEXTMODE)::SendMessage(m_hWnd, EM_GETTEXTMODE, 0, 0L); | |
7663 } | |
7664 | |
7665 BOOL SetTextMode(TEXTMODE enumTextMode) | |
7666 { | |
7667 ATLASSERT(::IsWindow(m_hWnd)); | |
7668 return !(BOOL)::SendMessage(m_hWnd, EM_SETTEXTMODE, enumTextMode
, 0L); | |
7669 } | |
7670 | |
7671 UNDONAMEID GetUndoName() const | |
7672 { | |
7673 ATLASSERT(::IsWindow(m_hWnd)); | |
7674 return (UNDONAMEID)::SendMessage(m_hWnd, EM_GETUNDONAME, 0, 0L); | |
7675 } | |
7676 | |
7677 UNDONAMEID GetRedoName() const | |
7678 { | |
7679 ATLASSERT(::IsWindow(m_hWnd)); | |
7680 return (UNDONAMEID)::SendMessage(m_hWnd, EM_GETREDONAME, 0, 0L); | |
7681 } | |
7682 | |
7683 BOOL CanRedo() const | |
7684 { | |
7685 ATLASSERT(::IsWindow(m_hWnd)); | |
7686 return (BOOL)::SendMessage(m_hWnd, EM_CANREDO, 0, 0L); | |
7687 } | |
7688 | |
7689 BOOL GetAutoURLDetect() const | |
7690 { | |
7691 ATLASSERT(::IsWindow(m_hWnd)); | |
7692 return (BOOL)::SendMessage(m_hWnd, EM_GETAUTOURLDETECT, 0, 0L); | |
7693 } | |
7694 | |
7695 BOOL SetAutoURLDetect(BOOL bAutoDetect = TRUE) | |
7696 { | |
7697 ATLASSERT(::IsWindow(m_hWnd)); | |
7698 return !(BOOL)::SendMessage(m_hWnd, EM_AUTOURLDETECT, bAutoDetec
t, 0L); | |
7699 } | |
7700 | |
7701 // this method is deprecated, please use SetAutoURLDetect | |
7702 BOOL EnableAutoURLDetect(BOOL bEnable = TRUE) { return SetAutoURLDetect(
bEnable); } | |
7703 | |
7704 UINT SetUndoLimit(UINT uUndoLimit) | |
7705 { | |
7706 ATLASSERT(::IsWindow(m_hWnd)); | |
7707 return (UINT)::SendMessage(m_hWnd, EM_SETUNDOLIMIT, uUndoLimit,
0L); | |
7708 } | |
7709 | |
7710 void SetPalette(HPALETTE hPalette) | |
7711 { | |
7712 ATLASSERT(::IsWindow(m_hWnd)); | |
7713 ::SendMessage(m_hWnd, EM_SETPALETTE, (WPARAM)hPalette, 0L); | |
7714 } | |
7715 | |
7716 int GetTextEx(GETTEXTEX* pGetTextEx, LPTSTR lpstrText) const | |
7717 { | |
7718 ATLASSERT(::IsWindow(m_hWnd)); | |
7719 return (int)::SendMessage(m_hWnd, EM_GETTEXTEX, (WPARAM)pGetText
Ex, (LPARAM)lpstrText); | |
7720 } | |
7721 | |
7722 int GetTextEx(LPTSTR lpstrText, int nTextLen, DWORD dwFlags = GT_DEFAULT
, UINT uCodePage = CP_ACP, LPCSTR lpDefaultChar = NULL, LPBOOL lpUsedDefChar = N
ULL) const | |
7723 { | |
7724 ATLASSERT(::IsWindow(m_hWnd)); | |
7725 GETTEXTEX gte = { 0 }; | |
7726 gte.cb = nTextLen * sizeof(TCHAR); | |
7727 gte.codepage = uCodePage; | |
7728 gte.flags = dwFlags; | |
7729 gte.lpDefaultChar = lpDefaultChar; | |
7730 gte.lpUsedDefChar = lpUsedDefChar; | |
7731 return (int)::SendMessage(m_hWnd, EM_GETTEXTEX, (WPARAM)>e, (L
PARAM)lpstrText); | |
7732 } | |
7733 | |
7734 int GetTextLengthEx(GETTEXTLENGTHEX* pGetTextLengthEx) const | |
7735 { | |
7736 ATLASSERT(::IsWindow(m_hWnd)); | |
7737 return (int)::SendMessage(m_hWnd, EM_GETTEXTLENGTHEX, (WPARAM)pG
etTextLengthEx, 0L); | |
7738 } | |
7739 | |
7740 int GetTextLengthEx(DWORD dwFlags = GTL_DEFAULT, UINT uCodePage = CP_ACP
) const | |
7741 { | |
7742 ATLASSERT(::IsWindow(m_hWnd)); | |
7743 GETTEXTLENGTHEX gtle = { 0 }; | |
7744 gtle.codepage = uCodePage; | |
7745 gtle.flags = dwFlags; | |
7746 return (int)::SendMessage(m_hWnd, EM_GETTEXTLENGTHEX, (WPARAM)&g
tle, 0L); | |
7747 } | |
7748 #endif // (_RICHEDIT_VER >= 0x0200) | |
7749 | |
7750 #if (_RICHEDIT_VER >= 0x0300) | |
7751 int SetTextEx(SETTEXTEX* pSetTextEx, LPCTSTR lpstrText) | |
7752 { | |
7753 ATLASSERT(::IsWindow(m_hWnd)); | |
7754 return (int)::SendMessage(m_hWnd, EM_SETTEXTEX, (WPARAM)pSetText
Ex, (LPARAM)lpstrText); | |
7755 } | |
7756 | |
7757 int SetTextEx(LPCTSTR lpstrText, DWORD dwFlags = ST_DEFAULT, UINT uCodeP
age = CP_ACP) | |
7758 { | |
7759 ATLASSERT(::IsWindow(m_hWnd)); | |
7760 SETTEXTEX ste = { 0 }; | |
7761 ste.flags = dwFlags; | |
7762 ste.codepage = uCodePage; | |
7763 return (int)::SendMessage(m_hWnd, EM_SETTEXTEX, (WPARAM)&ste, (L
PARAM)lpstrText); | |
7764 } | |
7765 | |
7766 int GetEditStyle() const | |
7767 { | |
7768 ATLASSERT(::IsWindow(m_hWnd)); | |
7769 return (int)::SendMessage(m_hWnd, EM_GETEDITSTYLE, 0, 0L); | |
7770 } | |
7771 | |
7772 int SetEditStyle(int nStyle, int nMask = -1) | |
7773 { | |
7774 ATLASSERT(::IsWindow(m_hWnd)); | |
7775 if(nMask == -1) | |
7776 nMask = nStyle; // set everything specified | |
7777 return (int)::SendMessage(m_hWnd, EM_SETEDITSTYLE, nStyle, nMask
); | |
7778 } | |
7779 | |
7780 BOOL SetFontSize(int nFontSizeDelta) | |
7781 { | |
7782 ATLASSERT(::IsWindow(m_hWnd)); | |
7783 ATLASSERT(nFontSizeDelta >= -1637 && nFontSizeDelta <= 1638); | |
7784 return (BOOL)::SendMessage(m_hWnd, EM_SETFONTSIZE, nFontSizeDelt
a, 0L); | |
7785 } | |
7786 | |
7787 void GetScrollPos(LPPOINT lpPoint) const | |
7788 { | |
7789 ATLASSERT(::IsWindow(m_hWnd)); | |
7790 ATLASSERT(lpPoint != NULL); | |
7791 ::SendMessage(m_hWnd, EM_GETSCROLLPOS, 0, (LPARAM)lpPoint); | |
7792 } | |
7793 | |
7794 void SetScrollPos(LPPOINT lpPoint) | |
7795 { | |
7796 ATLASSERT(::IsWindow(m_hWnd)); | |
7797 ATLASSERT(lpPoint != NULL); | |
7798 ::SendMessage(m_hWnd, EM_SETSCROLLPOS, 0, (LPARAM)lpPoint); | |
7799 } | |
7800 | |
7801 BOOL GetZoom(int& nNum, int& nDen) const | |
7802 { | |
7803 ATLASSERT(::IsWindow(m_hWnd)); | |
7804 return (BOOL)::SendMessage(m_hWnd, EM_GETZOOM, (WPARAM)&nNum, (L
PARAM)&nDen); | |
7805 } | |
7806 | |
7807 BOOL SetZoom(int nNum, int nDen) | |
7808 { | |
7809 ATLASSERT(::IsWindow(m_hWnd)); | |
7810 ATLASSERT(nNum >= 0 && nNum <= 64); | |
7811 ATLASSERT(nDen >= 0 && nDen <= 64); | |
7812 return (BOOL)::SendMessage(m_hWnd, EM_SETZOOM, nNum, nDen); | |
7813 } | |
7814 | |
7815 BOOL SetZoomOff() | |
7816 { | |
7817 ATLASSERT(::IsWindow(m_hWnd)); | |
7818 return (BOOL)::SendMessage(m_hWnd, EM_SETZOOM, 0, 0L); | |
7819 } | |
7820 #endif // (_RICHEDIT_VER >= 0x0300) | |
7821 | |
7822 // Operations | |
7823 void LimitText(LONG nChars = 0) | |
7824 { | |
7825 ATLASSERT(::IsWindow(m_hWnd)); | |
7826 ::SendMessage(m_hWnd, EM_EXLIMITTEXT, 0, nChars); | |
7827 } | |
7828 | |
7829 int LineFromChar(LONG nIndex) const | |
7830 { | |
7831 ATLASSERT(::IsWindow(m_hWnd)); | |
7832 return (int)::SendMessage(m_hWnd, EM_EXLINEFROMCHAR, 0, nIndex); | |
7833 } | |
7834 | |
7835 POINT PosFromChar(LONG nChar) const | |
7836 { | |
7837 ATLASSERT(::IsWindow(m_hWnd)); | |
7838 POINT point = { 0, 0 }; | |
7839 ::SendMessage(m_hWnd, EM_POSFROMCHAR, (WPARAM)&point, nChar); | |
7840 return point; | |
7841 } | |
7842 | |
7843 int CharFromPos(POINT pt) const | |
7844 { | |
7845 ATLASSERT(::IsWindow(m_hWnd)); | |
7846 POINTL ptl = { pt.x, pt.y }; | |
7847 return (int)::SendMessage(m_hWnd, EM_CHARFROMPOS, 0, (LPARAM)&pt
l); | |
7848 } | |
7849 | |
7850 void EmptyUndoBuffer() | |
7851 { | |
7852 ATLASSERT(::IsWindow(m_hWnd)); | |
7853 ::SendMessage(m_hWnd, EM_EMPTYUNDOBUFFER, 0, 0L); | |
7854 } | |
7855 | |
7856 int LineIndex(int nLine = -1) const | |
7857 { | |
7858 ATLASSERT(::IsWindow(m_hWnd)); | |
7859 return (int)::SendMessage(m_hWnd, EM_LINEINDEX, nLine, 0L); | |
7860 } | |
7861 | |
7862 int LineLength(int nLine = -1) const | |
7863 { | |
7864 ATLASSERT(::IsWindow(m_hWnd)); | |
7865 return (int)::SendMessage(m_hWnd, EM_LINELENGTH, nLine, 0L); | |
7866 } | |
7867 | |
7868 BOOL LineScroll(int nLines, int nChars = 0) | |
7869 { | |
7870 ATLASSERT(::IsWindow(m_hWnd)); | |
7871 return (BOOL)::SendMessage(m_hWnd, EM_LINESCROLL, nChars, nLines
); | |
7872 } | |
7873 | |
7874 void ReplaceSel(LPCTSTR lpszNewText, BOOL bCanUndo = FALSE) | |
7875 { | |
7876 ATLASSERT(::IsWindow(m_hWnd)); | |
7877 ::SendMessage(m_hWnd, EM_REPLACESEL, (WPARAM) bCanUndo, (LPARAM)
lpszNewText); | |
7878 } | |
7879 | |
7880 void SetRect(LPCRECT lpRect) | |
7881 { | |
7882 ATLASSERT(::IsWindow(m_hWnd)); | |
7883 ::SendMessage(m_hWnd, EM_SETRECT, 0, (LPARAM)lpRect); | |
7884 } | |
7885 | |
7886 BOOL DisplayBand(LPRECT pDisplayRect) | |
7887 { | |
7888 ATLASSERT(::IsWindow(m_hWnd)); | |
7889 return (BOOL)::SendMessage(m_hWnd, EM_DISPLAYBAND, 0, (LPARAM)pD
isplayRect); | |
7890 } | |
7891 | |
7892 LONG FindText(DWORD dwFlags, FINDTEXT& ft) const | |
7893 { | |
7894 ATLASSERT(::IsWindow(m_hWnd)); | |
7895 #if (_RICHEDIT_VER >= 0x0200) && defined(_UNICODE) | |
7896 return (LONG)::SendMessage(m_hWnd, EM_FINDTEXTW, dwFlags, (LPARA
M)&ft); | |
7897 #else | |
7898 return (LONG)::SendMessage(m_hWnd, EM_FINDTEXT, dwFlags, (LPARAM
)&ft); | |
7899 #endif | |
7900 } | |
7901 | |
7902 LONG FindText(DWORD dwFlags, FINDTEXTEX& ft) const | |
7903 { | |
7904 ATLASSERT(::IsWindow(m_hWnd)); | |
7905 #if (_RICHEDIT_VER >= 0x0200) && defined(_UNICODE) | |
7906 return (LONG)::SendMessage(m_hWnd, EM_FINDTEXTEXW, dwFlags, (LPA
RAM)&ft); | |
7907 #else | |
7908 return (LONG)::SendMessage(m_hWnd, EM_FINDTEXTEX, dwFlags, (LPAR
AM)&ft); | |
7909 #endif | |
7910 } | |
7911 | |
7912 LONG FormatRange(FORMATRANGE& fr, BOOL bDisplay = TRUE) | |
7913 { | |
7914 ATLASSERT(::IsWindow(m_hWnd)); | |
7915 return (LONG)::SendMessage(m_hWnd, EM_FORMATRANGE, bDisplay, (LP
ARAM)&fr); | |
7916 } | |
7917 | |
7918 LONG FormatRange(FORMATRANGE* pFormatRange, BOOL bDisplay = TRUE) | |
7919 { | |
7920 ATLASSERT(::IsWindow(m_hWnd)); | |
7921 return (LONG)::SendMessage(m_hWnd, EM_FORMATRANGE, bDisplay, (LP
ARAM)pFormatRange); | |
7922 } | |
7923 | |
7924 void HideSelection(BOOL bHide = TRUE, BOOL bChangeStyle = FALSE) | |
7925 { | |
7926 ATLASSERT(::IsWindow(m_hWnd)); | |
7927 ::SendMessage(m_hWnd, EM_HIDESELECTION, bHide, bChangeStyle); | |
7928 } | |
7929 | |
7930 void PasteSpecial(UINT uClipFormat, DWORD dwAspect = 0, HMETAFILE hMF =
0) | |
7931 { | |
7932 ATLASSERT(::IsWindow(m_hWnd)); | |
7933 REPASTESPECIAL reps = { dwAspect, (DWORD_PTR)hMF }; | |
7934 ::SendMessage(m_hWnd, EM_PASTESPECIAL, uClipFormat, (LPARAM)&rep
s); | |
7935 } | |
7936 | |
7937 void RequestResize() | |
7938 { | |
7939 ATLASSERT(::IsWindow(m_hWnd)); | |
7940 ::SendMessage(m_hWnd, EM_REQUESTRESIZE, 0, 0L); | |
7941 } | |
7942 | |
7943 LONG StreamIn(UINT uFormat, EDITSTREAM& es) | |
7944 { | |
7945 ATLASSERT(::IsWindow(m_hWnd)); | |
7946 return (LONG)::SendMessage(m_hWnd, EM_STREAMIN, uFormat, (LPARAM
)&es); | |
7947 } | |
7948 | |
7949 LONG StreamOut(UINT uFormat, EDITSTREAM& es) | |
7950 { | |
7951 ATLASSERT(::IsWindow(m_hWnd)); | |
7952 return (LONG)::SendMessage(m_hWnd, EM_STREAMOUT, uFormat, (LPARA
M)&es); | |
7953 } | |
7954 | |
7955 DWORD FindWordBreak(int nCode, LONG nStartChar) | |
7956 { | |
7957 ATLASSERT(::IsWindow(m_hWnd)); | |
7958 return (DWORD)::SendMessage(m_hWnd, EM_FINDWORDBREAK, nCode, nSt
artChar); | |
7959 } | |
7960 | |
7961 // Additional operations | |
7962 void ScrollCaret() | |
7963 { | |
7964 ATLASSERT(::IsWindow(m_hWnd)); | |
7965 ::SendMessage(m_hWnd, EM_SCROLLCARET, 0, 0L); | |
7966 } | |
7967 | |
7968 int InsertText(long nInsertAfterChar, LPCTSTR lpstrText, BOOL bCanUndo =
FALSE) | |
7969 { | |
7970 int nRet = SetSel(nInsertAfterChar, nInsertAfterChar); | |
7971 ReplaceSel(lpstrText, bCanUndo); | |
7972 return nRet; | |
7973 } | |
7974 | |
7975 int AppendText(LPCTSTR lpstrText, BOOL bCanUndo = FALSE) | |
7976 { | |
7977 return InsertText(GetWindowTextLength(), lpstrText, bCanUndo); | |
7978 } | |
7979 | |
7980 // Clipboard operations | |
7981 BOOL Undo() | |
7982 { | |
7983 ATLASSERT(::IsWindow(m_hWnd)); | |
7984 return (BOOL)::SendMessage(m_hWnd, EM_UNDO, 0, 0L); | |
7985 } | |
7986 | |
7987 void Clear() | |
7988 { | |
7989 ATLASSERT(::IsWindow(m_hWnd)); | |
7990 ::SendMessage(m_hWnd, WM_CLEAR, 0, 0L); | |
7991 } | |
7992 | |
7993 void Copy() | |
7994 { | |
7995 ATLASSERT(::IsWindow(m_hWnd)); | |
7996 ::SendMessage(m_hWnd, WM_COPY, 0, 0L); | |
7997 } | |
7998 | |
7999 void Cut() | |
8000 { | |
8001 ATLASSERT(::IsWindow(m_hWnd)); | |
8002 ::SendMessage(m_hWnd, WM_CUT, 0, 0L); | |
8003 } | |
8004 | |
8005 void Paste() | |
8006 { | |
8007 ATLASSERT(::IsWindow(m_hWnd)); | |
8008 ::SendMessage(m_hWnd, WM_PASTE, 0, 0L); | |
8009 } | |
8010 | |
8011 // OLE support | |
8012 IRichEditOle* GetOleInterface() const | |
8013 { | |
8014 ATLASSERT(::IsWindow(m_hWnd)); | |
8015 IRichEditOle *pRichEditOle = NULL; | |
8016 ::SendMessage(m_hWnd, EM_GETOLEINTERFACE, 0, (LPARAM)&pRichEditO
le); | |
8017 return pRichEditOle; | |
8018 } | |
8019 | |
8020 BOOL SetOleCallback(IRichEditOleCallback* pCallback) | |
8021 { | |
8022 ATLASSERT(::IsWindow(m_hWnd)); | |
8023 return (BOOL)::SendMessage(m_hWnd, EM_SETOLECALLBACK, 0, (LPARAM
)pCallback); | |
8024 } | |
8025 | |
8026 #if (_RICHEDIT_VER >= 0x0200) | |
8027 BOOL Redo() | |
8028 { | |
8029 ATLASSERT(::IsWindow(m_hWnd)); | |
8030 return (BOOL)::SendMessage(m_hWnd, EM_REDO, 0, 0L); | |
8031 } | |
8032 | |
8033 void StopGroupTyping() | |
8034 { | |
8035 ATLASSERT(::IsWindow(m_hWnd)); | |
8036 ::SendMessage(m_hWnd, EM_STOPGROUPTYPING, 0, 0L); | |
8037 } | |
8038 | |
8039 void ShowScrollBar(int nBarType, BOOL bVisible = TRUE) | |
8040 { | |
8041 ATLASSERT(::IsWindow(m_hWnd)); | |
8042 ::SendMessage(m_hWnd, EM_SHOWSCROLLBAR, nBarType, bVisible); | |
8043 } | |
8044 #endif // (_RICHEDIT_VER >= 0x0200) | |
8045 | |
8046 #if (_RICHEDIT_VER >= 0x0300) | |
8047 BOOL SetTabStops(int nTabStops, LPINT rgTabStops) | |
8048 { | |
8049 ATLASSERT(::IsWindow(m_hWnd)); | |
8050 return (BOOL)::SendMessage(m_hWnd, EM_SETTABSTOPS, nTabStops, (L
PARAM)rgTabStops); | |
8051 } | |
8052 | |
8053 BOOL SetTabStops() | |
8054 { | |
8055 ATLASSERT(::IsWindow(m_hWnd)); | |
8056 return (BOOL)::SendMessage(m_hWnd, EM_SETTABSTOPS, 0, 0L); | |
8057 } | |
8058 | |
8059 BOOL SetTabStops(const int& cxEachStop) // takes an 'int' | |
8060 { | |
8061 ATLASSERT(::IsWindow(m_hWnd)); | |
8062 return (BOOL)::SendMessage(m_hWnd, EM_SETTABSTOPS, 1, (LPARAM)(L
PINT)&cxEachStop); | |
8063 } | |
8064 #endif // (_RICHEDIT_VER >= 0x0300) | |
8065 }; | |
8066 | |
8067 typedef CRichEditCtrlT<ATL::CWindow> CRichEditCtrl; | |
8068 | |
8069 #endif // !_WIN32_WCE | |
8070 | |
8071 | |
8072 /////////////////////////////////////////////////////////////////////////////// | |
8073 // CRichEditCommands - message handlers for standard EDIT commands | |
8074 | |
8075 #ifndef _WIN32_WCE | |
8076 | |
8077 // Chain to CRichEditCommands message map. Your class must also derive from CRic
hEditCtrl. | |
8078 // Example: | |
8079 // class CMyRichEdit : public CWindowImpl<CMyRichEdit, CRichEditCtrl>, | |
8080 // public CRichEditCommands<CMyRichEdit> | |
8081 // { | |
8082 // public: | |
8083 // BEGIN_MSG_MAP(CMyRichEdit) | |
8084 // // your handlers... | |
8085 // CHAIN_MSG_MAP_ALT(CRichEditCommands<CMyRichEdit>, 1) | |
8086 // END_MSG_MAP() | |
8087 // // other stuff... | |
8088 // }; | |
8089 | |
8090 template <class T> | |
8091 class CRichEditCommands : public CEditCommands< T > | |
8092 { | |
8093 public: | |
8094 BEGIN_MSG_MAP(CRichEditCommands< T >) | |
8095 ALT_MSG_MAP(1) | |
8096 COMMAND_ID_HANDLER(ID_EDIT_CLEAR, CEditCommands< T >::OnEditClea
r) | |
8097 COMMAND_ID_HANDLER(ID_EDIT_CLEAR_ALL, CEditCommands< T >::OnEdit
ClearAll) | |
8098 COMMAND_ID_HANDLER(ID_EDIT_COPY, CEditCommands< T >::OnEditCopy) | |
8099 COMMAND_ID_HANDLER(ID_EDIT_CUT, CEditCommands< T >::OnEditCut) | |
8100 COMMAND_ID_HANDLER(ID_EDIT_PASTE, CEditCommands< T >::OnEditPast
e) | |
8101 COMMAND_ID_HANDLER(ID_EDIT_SELECT_ALL, CEditCommands< T >::OnEdi
tSelectAll) | |
8102 COMMAND_ID_HANDLER(ID_EDIT_UNDO, CEditCommands< T >::OnEditUndo) | |
8103 #if (_RICHEDIT_VER >= 0x0200) | |
8104 COMMAND_ID_HANDLER(ID_EDIT_REDO, OnEditRedo) | |
8105 #endif // (_RICHEDIT_VER >= 0x0200) | |
8106 END_MSG_MAP() | |
8107 | |
8108 #if (_RICHEDIT_VER >= 0x0200) | |
8109 LRESULT OnEditRedo(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/,
BOOL& /*bHandled*/) | |
8110 { | |
8111 T* pT = static_cast<T*>(this); | |
8112 pT->Redo(); | |
8113 return 0; | |
8114 } | |
8115 #endif // (_RICHEDIT_VER >= 0x0200) | |
8116 | |
8117 // State (update UI) helpers | |
8118 BOOL CanCut() const | |
8119 { return HasSelection(); } | |
8120 | |
8121 BOOL CanCopy() const | |
8122 { return HasSelection(); } | |
8123 | |
8124 BOOL CanClear() const | |
8125 { return HasSelection(); } | |
8126 | |
8127 // Implementation | |
8128 BOOL HasSelection() const | |
8129 { | |
8130 const T* pT = static_cast<const T*>(this); | |
8131 return (pT->GetSelectionType() != SEL_EMPTY); | |
8132 } | |
8133 }; | |
8134 | |
8135 #endif // _WIN32_WCE | |
8136 | |
8137 | |
8138 /////////////////////////////////////////////////////////////////////////////// | |
8139 // CDragListBox | |
8140 | |
8141 #ifndef _WIN32_WCE | |
8142 | |
8143 template <class TBase> | |
8144 class CDragListBoxT : public CListBoxT< TBase > | |
8145 { | |
8146 public: | |
8147 // Constructors | |
8148 CDragListBoxT(HWND hWnd = NULL) : CListBoxT< TBase >(hWnd) | |
8149 { } | |
8150 | |
8151 CDragListBoxT< TBase >& operator =(HWND hWnd) | |
8152 { | |
8153 m_hWnd = hWnd; | |
8154 return *this; | |
8155 } | |
8156 | |
8157 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
8158 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
8159 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
8160 { | |
8161 HWND hWnd = TBase::Create(GetWndClassName(), hWndParent, rect.m_
lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
8162 if(hWnd != NULL) | |
8163 MakeDragList(); | |
8164 return hWnd; | |
8165 } | |
8166 | |
8167 // Operations | |
8168 BOOL MakeDragList() | |
8169 { | |
8170 ATLASSERT(::IsWindow(m_hWnd)); | |
8171 ATLASSERT((GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) ==
0); | |
8172 return ::MakeDragList(m_hWnd); | |
8173 } | |
8174 | |
8175 int LBItemFromPt(POINT pt, BOOL bAutoScroll = TRUE) | |
8176 { | |
8177 ATLASSERT(::IsWindow(m_hWnd)); | |
8178 return ::LBItemFromPt(m_hWnd, pt, bAutoScroll); | |
8179 } | |
8180 | |
8181 void DrawInsert(int nItem) | |
8182 { | |
8183 ATLASSERT(::IsWindow(m_hWnd)); | |
8184 ::DrawInsert(GetParent(), m_hWnd, nItem); | |
8185 } | |
8186 | |
8187 static UINT GetDragListMessage() | |
8188 { | |
8189 static UINT uDragListMessage = 0; | |
8190 if(uDragListMessage == 0) | |
8191 { | |
8192 CStaticDataInitCriticalSectionLock lock; | |
8193 if(FAILED(lock.Lock())) | |
8194 { | |
8195 ATLTRACE2(atlTraceUI, 0, _T("ERROR : Unable to l
ock critical section in CDragListBox::GetDragListMessage.\n")); | |
8196 ATLASSERT(FALSE); | |
8197 return 0; | |
8198 } | |
8199 | |
8200 if(uDragListMessage == 0) | |
8201 uDragListMessage = ::RegisterWindowMessage(DRAGL
ISTMSGSTRING); | |
8202 | |
8203 lock.Unlock(); | |
8204 } | |
8205 ATLASSERT(uDragListMessage != 0); | |
8206 return uDragListMessage; | |
8207 } | |
8208 }; | |
8209 | |
8210 typedef CDragListBoxT<ATL::CWindow> CDragListBox; | |
8211 | |
8212 template <class T> | |
8213 class CDragListNotifyImpl | |
8214 { | |
8215 public: | |
8216 BEGIN_MSG_MAP(CDragListNotifyImpl< T >) | |
8217 MESSAGE_HANDLER(CDragListBox::GetDragListMessage(), OnDragListNo
tify) | |
8218 END_MSG_MAP() | |
8219 | |
8220 LRESULT OnDragListNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL&
bHandled) | |
8221 { | |
8222 uMsg; // avoid level 4 warning | |
8223 ATLASSERT(uMsg == CDragListBox::GetDragListMessage()); | |
8224 T* pT = static_cast<T*>(this); | |
8225 LPDRAGLISTINFO lpDragListInfo = (LPDRAGLISTINFO)lParam; | |
8226 LRESULT lRet = 0; | |
8227 switch(lpDragListInfo->uNotification) | |
8228 { | |
8229 case DL_BEGINDRAG: | |
8230 lRet = (LPARAM)pT->OnBeginDrag((int)wParam, lpDragListIn
fo->hWnd, lpDragListInfo->ptCursor); | |
8231 break; | |
8232 case DL_CANCELDRAG: | |
8233 pT->OnCancelDrag((int)wParam, lpDragListInfo->hWnd, lpDr
agListInfo->ptCursor); | |
8234 break; | |
8235 case DL_DRAGGING: | |
8236 lRet = (LPARAM)pT->OnDragging((int)wParam, lpDragListInf
o->hWnd, lpDragListInfo->ptCursor); | |
8237 break; | |
8238 case DL_DROPPED: | |
8239 pT->OnDropped((int)wParam, lpDragListInfo->hWnd, lpDragL
istInfo->ptCursor); | |
8240 break; | |
8241 default: | |
8242 ATLTRACE2(atlTraceUI, 0, _T("Unknown DragListBox notific
ation\n")); | |
8243 bHandled = FALSE; // don't handle it | |
8244 break; | |
8245 } | |
8246 return lRet; | |
8247 } | |
8248 | |
8249 // Overrideables | |
8250 BOOL OnBeginDrag(int /*nCtlID*/, HWND /*hWndDragList*/, POINT /*ptCursor
*/) | |
8251 { | |
8252 return TRUE; // allow dragging | |
8253 } | |
8254 | |
8255 void OnCancelDrag(int /*nCtlID*/, HWND /*hWndDragList*/, POINT /*ptCurso
r*/) | |
8256 { | |
8257 // nothing to do | |
8258 } | |
8259 | |
8260 int OnDragging(int /*nCtlID*/, HWND /*hWndDragList*/, POINT /*ptCursor*/
) | |
8261 { | |
8262 return 0; // don't change cursor | |
8263 } | |
8264 | |
8265 void OnDropped(int /*nCtlID*/, HWND /*hWndDragList*/, POINT /*ptCursor*/
) | |
8266 { | |
8267 // nothing to do | |
8268 } | |
8269 }; | |
8270 | |
8271 #endif // _WIN32_WCE | |
8272 | |
8273 | |
8274 /////////////////////////////////////////////////////////////////////////////// | |
8275 // CReBarCtrl | |
8276 | |
8277 template <class TBase> | |
8278 class CReBarCtrlT : public TBase | |
8279 { | |
8280 public: | |
8281 // Constructors | |
8282 CReBarCtrlT(HWND hWnd = NULL) : TBase(hWnd) | |
8283 { } | |
8284 | |
8285 CReBarCtrlT< TBase >& operator =(HWND hWnd) | |
8286 { | |
8287 m_hWnd = hWnd; | |
8288 return *this; | |
8289 } | |
8290 | |
8291 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
8292 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
8293 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
8294 { | |
8295 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
8296 } | |
8297 | |
8298 // Attributes | |
8299 static LPCTSTR GetWndClassName() | |
8300 { | |
8301 return REBARCLASSNAME; | |
8302 } | |
8303 | |
8304 UINT GetBandCount() const | |
8305 { | |
8306 ATLASSERT(::IsWindow(m_hWnd)); | |
8307 return (UINT)::SendMessage(m_hWnd, RB_GETBANDCOUNT, 0, 0L); | |
8308 } | |
8309 | |
8310 BOOL GetBandInfo(int nBand, LPREBARBANDINFO lprbbi) const | |
8311 { | |
8312 ATLASSERT(::IsWindow(m_hWnd)); | |
8313 return (BOOL)::SendMessage(m_hWnd, RB_GETBANDINFO, nBand, (LPARA
M)lprbbi); | |
8314 } | |
8315 | |
8316 BOOL SetBandInfo(int nBand, LPREBARBANDINFO lprbbi) | |
8317 { | |
8318 ATLASSERT(::IsWindow(m_hWnd)); | |
8319 return (BOOL)::SendMessage(m_hWnd, RB_SETBANDINFO, nBand, (LPARA
M)lprbbi); | |
8320 } | |
8321 | |
8322 BOOL GetBarInfo(LPREBARINFO lprbi) const | |
8323 { | |
8324 ATLASSERT(::IsWindow(m_hWnd)); | |
8325 return (BOOL)::SendMessage(m_hWnd, RB_GETBARINFO, 0, (LPARAM)lpr
bi); | |
8326 } | |
8327 | |
8328 BOOL SetBarInfo(LPREBARINFO lprbi) | |
8329 { | |
8330 ATLASSERT(::IsWindow(m_hWnd)); | |
8331 return (BOOL)::SendMessage(m_hWnd, RB_SETBARINFO, 0, (LPARAM)lpr
bi); | |
8332 } | |
8333 | |
8334 CImageList GetImageList() const | |
8335 { | |
8336 ATLASSERT(::IsWindow(m_hWnd)); | |
8337 REBARINFO rbi = { 0 }; | |
8338 rbi.cbSize = sizeof(REBARINFO); | |
8339 rbi.fMask = RBIM_IMAGELIST; | |
8340 if( (BOOL)::SendMessage(m_hWnd, RB_GETBARINFO, 0, (LPARAM)&rbi)
== FALSE ) return CImageList(); | |
8341 return CImageList(rbi.himl); | |
8342 } | |
8343 | |
8344 BOOL SetImageList(HIMAGELIST hImageList) | |
8345 { | |
8346 ATLASSERT(::IsWindow(m_hWnd)); | |
8347 REBARINFO rbi = { 0 }; | |
8348 rbi.cbSize = sizeof(REBARINFO); | |
8349 rbi.fMask = RBIM_IMAGELIST; | |
8350 rbi.himl = hImageList; | |
8351 return (BOOL)::SendMessage(m_hWnd, RB_SETBARINFO, 0, (LPARAM)&rb
i); | |
8352 } | |
8353 | |
8354 UINT GetRowCount() const | |
8355 { | |
8356 ATLASSERT(::IsWindow(m_hWnd)); | |
8357 return (UINT)::SendMessage(m_hWnd, RB_GETROWCOUNT, 0, 0L); | |
8358 } | |
8359 | |
8360 UINT GetRowHeight(int nBand) const | |
8361 { | |
8362 ATLASSERT(::IsWindow(m_hWnd)); | |
8363 return (UINT)::SendMessage(m_hWnd, RB_GETROWHEIGHT, nBand, 0L); | |
8364 } | |
8365 | |
8366 #if (_WIN32_IE >= 0x0400) | |
8367 COLORREF GetTextColor() const | |
8368 { | |
8369 ATLASSERT(::IsWindow(m_hWnd)); | |
8370 return (COLORREF)::SendMessage(m_hWnd, RB_GETTEXTCOLOR, 0, 0L); | |
8371 } | |
8372 | |
8373 COLORREF SetTextColor(COLORREF clr) | |
8374 { | |
8375 ATLASSERT(::IsWindow(m_hWnd)); | |
8376 return (COLORREF)::SendMessage(m_hWnd, RB_SETTEXTCOLOR, 0, (LPAR
AM)clr); | |
8377 } | |
8378 | |
8379 COLORREF GetBkColor() const | |
8380 { | |
8381 ATLASSERT(::IsWindow(m_hWnd)); | |
8382 return (COLORREF)::SendMessage(m_hWnd, RB_GETBKCOLOR, 0, 0L); | |
8383 } | |
8384 | |
8385 COLORREF SetBkColor(COLORREF clr) | |
8386 { | |
8387 ATLASSERT(::IsWindow(m_hWnd)); | |
8388 return (COLORREF)::SendMessage(m_hWnd, RB_SETBKCOLOR, 0, (LPARAM
)clr); | |
8389 } | |
8390 | |
8391 UINT GetBarHeight() const | |
8392 { | |
8393 ATLASSERT(::IsWindow(m_hWnd)); | |
8394 return (UINT)::SendMessage(m_hWnd, RB_GETBARHEIGHT, 0, 0L); | |
8395 } | |
8396 | |
8397 BOOL GetRect(int nBand, LPRECT lpRect) const | |
8398 { | |
8399 ATLASSERT(::IsWindow(m_hWnd)); | |
8400 return (BOOL)::SendMessage(m_hWnd, RB_GETRECT, nBand, (LPARAM)lp
Rect); | |
8401 } | |
8402 | |
8403 #ifndef _WIN32_WCE | |
8404 CToolTipCtrl GetToolTips() const | |
8405 { | |
8406 ATLASSERT(::IsWindow(m_hWnd)); | |
8407 return CToolTipCtrl((HWND)::SendMessage(m_hWnd, RB_GETTOOLTIPS,
0, 0L)); | |
8408 } | |
8409 | |
8410 void SetToolTips(HWND hwndToolTip) | |
8411 { | |
8412 ATLASSERT(::IsWindow(m_hWnd)); | |
8413 ::SendMessage(m_hWnd, RB_SETTOOLTIPS, (WPARAM)hwndToolTip, 0L); | |
8414 } | |
8415 #endif // !_WIN32_WCE | |
8416 | |
8417 void GetBandBorders(int nBand, LPRECT lpRect) const | |
8418 { | |
8419 ATLASSERT(::IsWindow(m_hWnd)); | |
8420 ATLASSERT(lpRect != NULL); | |
8421 ::SendMessage(m_hWnd, RB_GETBANDBORDERS, nBand, (LPARAM)lpRect); | |
8422 } | |
8423 | |
8424 #ifndef _WIN32_WCE | |
8425 BOOL GetColorScheme(LPCOLORSCHEME lpColorScheme) const | |
8426 { | |
8427 ATLASSERT(::IsWindow(m_hWnd)); | |
8428 ATLASSERT(lpColorScheme != NULL); | |
8429 return (BOOL)::SendMessage(m_hWnd, RB_GETCOLORSCHEME, 0, (LPARAM
)lpColorScheme); | |
8430 } | |
8431 | |
8432 void SetColorScheme(LPCOLORSCHEME lpColorScheme) | |
8433 { | |
8434 ATLASSERT(::IsWindow(m_hWnd)); | |
8435 ATLASSERT(lpColorScheme != NULL); | |
8436 ::SendMessage(m_hWnd, RB_SETCOLORSCHEME, 0, (LPARAM)lpColorSchem
e); | |
8437 } | |
8438 | |
8439 HPALETTE GetPalette() const | |
8440 { | |
8441 ATLASSERT(::IsWindow(m_hWnd)); | |
8442 return (HPALETTE)::SendMessage(m_hWnd, RB_GETPALETTE, 0, 0L); | |
8443 } | |
8444 | |
8445 HPALETTE SetPalette(HPALETTE hPalette) | |
8446 { | |
8447 ATLASSERT(::IsWindow(m_hWnd)); | |
8448 return (HPALETTE)::SendMessage(m_hWnd, RB_SETPALETTE, 0, (LPARAM
)hPalette); | |
8449 } | |
8450 | |
8451 BOOL GetUnicodeFormat() const | |
8452 { | |
8453 ATLASSERT(::IsWindow(m_hWnd)); | |
8454 return (BOOL)::SendMessage(m_hWnd, RB_GETUNICODEFORMAT, 0, 0L); | |
8455 } | |
8456 | |
8457 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE) | |
8458 { | |
8459 ATLASSERT(::IsWindow(m_hWnd)); | |
8460 return (BOOL)::SendMessage(m_hWnd, RB_SETUNICODEFORMAT, bUnicode
, 0L); | |
8461 } | |
8462 #endif // !_WIN32_WCE | |
8463 #endif // (_WIN32_IE >= 0x0400) | |
8464 | |
8465 #if (_WIN32_WINNT >= 0x0501) | |
8466 // requires uxtheme.h to be included to use MARGINS struct | |
8467 #ifndef _UXTHEME_H_ | |
8468 typedef struct _MARGINS* PMARGINS; | |
8469 #endif // !_UXTHEME_H_ | |
8470 void GetBandMargins(PMARGINS pMargins) const | |
8471 { | |
8472 ATLASSERT(::IsWindow(m_hWnd)); | |
8473 ::SendMessage(m_hWnd, RB_GETBANDMARGINS, 0, (LPARAM)pMargins); | |
8474 } | |
8475 | |
8476 void SetWindowTheme(LPCWSTR lpstrTheme) | |
8477 { | |
8478 ATLASSERT(::IsWindow(m_hWnd)); | |
8479 ::SendMessage(m_hWnd, RB_SETWINDOWTHEME, 0, (LPARAM)lpstrTheme); | |
8480 } | |
8481 #endif // (_WIN32_WINNT >= 0x0501) | |
8482 | |
8483 #if (_WIN32_IE >= 0x0600) | |
8484 DWORD GetExtendedStyle() const | |
8485 { | |
8486 ATLASSERT(::IsWindow(m_hWnd)); | |
8487 return (DWORD)::SendMessage(m_hWnd, RB_GETEXTENDEDSTYLE, 0, 0L); | |
8488 } | |
8489 | |
8490 DWORD SetExtendedStyle(DWORD dwStyle, DWORD dwMask) | |
8491 { | |
8492 ATLASSERT(::IsWindow(m_hWnd)); | |
8493 return (DWORD)::SendMessage(m_hWnd, RB_SETEXTENDEDSTYLE, dwMask,
dwStyle); | |
8494 } | |
8495 #endif // (_WIN32_IE >= 0x0600) | |
8496 | |
8497 // Operations | |
8498 BOOL InsertBand(int nBand, LPREBARBANDINFO lprbbi) | |
8499 { | |
8500 ATLASSERT(::IsWindow(m_hWnd)); | |
8501 return (BOOL)::SendMessage(m_hWnd, RB_INSERTBAND, nBand, (LPARAM
)lprbbi); | |
8502 } | |
8503 | |
8504 BOOL AddBand(LPREBARBANDINFO lprbbi) | |
8505 { | |
8506 return InsertBand(-1, lprbbi); | |
8507 } | |
8508 | |
8509 BOOL DeleteBand(int nBand) | |
8510 { | |
8511 ATLASSERT(::IsWindow(m_hWnd)); | |
8512 return (BOOL)::SendMessage(m_hWnd, RB_DELETEBAND, nBand, 0L); | |
8513 } | |
8514 | |
8515 ATL::CWindow SetNotifyWnd(HWND hWnd) | |
8516 { | |
8517 ATLASSERT(::IsWindow(m_hWnd)); | |
8518 return ATL::CWindow((HWND)::SendMessage(m_hWnd, RB_SETPARENT, (W
PARAM)hWnd, 0L)); | |
8519 } | |
8520 | |
8521 #if (_WIN32_IE >= 0x0400) | |
8522 void BeginDrag(int nBand, DWORD dwPos) | |
8523 { | |
8524 ATLASSERT(::IsWindow(m_hWnd)); | |
8525 ::SendMessage(m_hWnd, RB_BEGINDRAG, nBand, dwPos); | |
8526 } | |
8527 | |
8528 void BeginDrag(int nBand, int xPos, int yPos) | |
8529 { | |
8530 ATLASSERT(::IsWindow(m_hWnd)); | |
8531 ::SendMessage(m_hWnd, RB_BEGINDRAG, nBand, MAKELPARAM(xPos, yPos
)); | |
8532 } | |
8533 | |
8534 void EndDrag() | |
8535 { | |
8536 ATLASSERT(::IsWindow(m_hWnd)); | |
8537 ::SendMessage(m_hWnd, RB_ENDDRAG, 0, 0L); | |
8538 } | |
8539 | |
8540 void DragMove(DWORD dwPos) | |
8541 { | |
8542 ATLASSERT(::IsWindow(m_hWnd)); | |
8543 ::SendMessage(m_hWnd, RB_DRAGMOVE, 0, dwPos); | |
8544 } | |
8545 | |
8546 void DragMove(int xPos, int yPos) | |
8547 { | |
8548 ATLASSERT(::IsWindow(m_hWnd)); | |
8549 ::SendMessage(m_hWnd, RB_DRAGMOVE, 0, MAKELPARAM(xPos, yPos)); | |
8550 } | |
8551 | |
8552 #ifndef _WIN32_WCE | |
8553 void GetDropTarget(IDropTarget** ppDropTarget) const | |
8554 { | |
8555 ATLASSERT(::IsWindow(m_hWnd)); | |
8556 ::SendMessage(m_hWnd, RB_GETDROPTARGET, 0, (LPARAM)ppDropTarget)
; | |
8557 } | |
8558 #endif // !_WIN32_WCE | |
8559 | |
8560 void MaximizeBand(int nBand, BOOL bIdeal = FALSE) | |
8561 { | |
8562 ATLASSERT(::IsWindow(m_hWnd)); | |
8563 ::SendMessage(m_hWnd, RB_MAXIMIZEBAND, nBand, bIdeal); | |
8564 } | |
8565 | |
8566 void MinimizeBand(int nBand) | |
8567 { | |
8568 ATLASSERT(::IsWindow(m_hWnd)); | |
8569 ::SendMessage(m_hWnd, RB_MINIMIZEBAND, nBand, 0L); | |
8570 } | |
8571 | |
8572 BOOL SizeToRect(LPRECT lpRect) | |
8573 { | |
8574 ATLASSERT(::IsWindow(m_hWnd)); | |
8575 return (BOOL)::SendMessage(m_hWnd, RB_SIZETORECT, 0, (LPARAM)lpR
ect); | |
8576 } | |
8577 | |
8578 int IdToIndex(UINT uBandID) const | |
8579 { | |
8580 ATLASSERT(::IsWindow(m_hWnd)); | |
8581 return (int)::SendMessage(m_hWnd, RB_IDTOINDEX, uBandID, 0L); | |
8582 } | |
8583 | |
8584 int HitTest(LPRBHITTESTINFO lprbht) const | |
8585 { | |
8586 ATLASSERT(::IsWindow(m_hWnd)); | |
8587 return (int)::SendMessage(m_hWnd, RB_HITTEST, 0, (LPARAM)lprbht)
; | |
8588 } | |
8589 | |
8590 BOOL ShowBand(int nBand, BOOL bShow) | |
8591 { | |
8592 ATLASSERT(::IsWindow(m_hWnd)); | |
8593 return (BOOL)::SendMessage(m_hWnd, RB_SHOWBAND, nBand, bShow); | |
8594 } | |
8595 | |
8596 #ifndef _WIN32_WCE | |
8597 BOOL MoveBand(int nBand, int nNewPos) | |
8598 { | |
8599 ATLASSERT(::IsWindow(m_hWnd)); | |
8600 ATLASSERT(nNewPos >= 0 && nNewPos <= ((int)GetBandCount() - 1)); | |
8601 return (BOOL)::SendMessage(m_hWnd, RB_MOVEBAND, nBand, nNewPos); | |
8602 } | |
8603 #endif // !_WIN32_WCE | |
8604 #endif // (_WIN32_IE >= 0x0400) | |
8605 | |
8606 #if (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE) | |
8607 void PushChevron(int nBand, LPARAM lAppValue) | |
8608 { | |
8609 ATLASSERT(::IsWindow(m_hWnd)); | |
8610 ::SendMessage(m_hWnd, RB_PUSHCHEVRON, nBand, lAppValue); | |
8611 } | |
8612 #endif // (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE) | |
8613 | |
8614 // Extra operations | |
8615 #if (_WIN32_IE >= 0x0400) | |
8616 void LockBands(bool bLock) | |
8617 { | |
8618 int nBandCount = GetBandCount(); | |
8619 for(int i =0; i < nBandCount; i++) | |
8620 { | |
8621 REBARBANDINFO rbbi = { RunTimeHelper::SizeOf_REBARBANDIN
FO() }; | |
8622 rbbi.fMask = RBBIM_STYLE; | |
8623 BOOL bRet = GetBandInfo(i, &rbbi); | |
8624 ATLASSERT(bRet); | |
8625 | |
8626 if((rbbi.fStyle & RBBS_GRIPPERALWAYS) == 0) | |
8627 { | |
8628 rbbi.fStyle |= RBBS_GRIPPERALWAYS; | |
8629 bRet = SetBandInfo(i, &rbbi); | |
8630 ATLASSERT(bRet); | |
8631 rbbi.fStyle &= ~RBBS_GRIPPERALWAYS; | |
8632 } | |
8633 | |
8634 if(bLock) | |
8635 rbbi.fStyle |= RBBS_NOGRIPPER; | |
8636 else | |
8637 rbbi.fStyle &= ~RBBS_NOGRIPPER; | |
8638 | |
8639 bRet = SetBandInfo(i, &rbbi); | |
8640 ATLASSERT(bRet); | |
8641 } | |
8642 } | |
8643 #endif // (_WIN32_IE >= 0x0400) | |
8644 | |
8645 #if (_WIN32_WINNT >= 0x0600) | |
8646 BOOL SetBandWidth(int nBand, int cxWidth) | |
8647 { | |
8648 ATLASSERT(::IsWindow(m_hWnd)); | |
8649 return (BOOL)::SendMessage(m_hWnd, RB_SETBANDWIDTH, nBand, cxWid
th); | |
8650 } | |
8651 #endif // (_WIN32_WINNT >= 0x0600) | |
8652 }; | |
8653 | |
8654 typedef CReBarCtrlT<ATL::CWindow> CReBarCtrl; | |
8655 | |
8656 | |
8657 /////////////////////////////////////////////////////////////////////////////// | |
8658 // CComboBoxEx | |
8659 | |
8660 #ifndef _WIN32_WCE | |
8661 | |
8662 template <class TBase> | |
8663 class CComboBoxExT : public CComboBoxT< TBase > | |
8664 { | |
8665 public: | |
8666 // Constructors | |
8667 CComboBoxExT(HWND hWnd = NULL) : CComboBoxT< TBase >(hWnd) | |
8668 { } | |
8669 | |
8670 CComboBoxExT< TBase >& operator =(HWND hWnd) | |
8671 { | |
8672 m_hWnd = hWnd; | |
8673 return *this; | |
8674 } | |
8675 | |
8676 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
8677 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
8678 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
8679 { | |
8680 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
8681 } | |
8682 | |
8683 // Attributes | |
8684 static LPCTSTR GetWndClassName() | |
8685 { | |
8686 return WC_COMBOBOXEX; | |
8687 } | |
8688 | |
8689 CImageList GetImageList() const | |
8690 { | |
8691 ATLASSERT(::IsWindow(m_hWnd)); | |
8692 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, CBEM_GETIMAG
ELIST, 0, 0L)); | |
8693 } | |
8694 | |
8695 CImageList SetImageList(HIMAGELIST hImageList) | |
8696 { | |
8697 ATLASSERT(::IsWindow(m_hWnd)); | |
8698 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, CBEM_SETIMAG
ELIST, 0, (LPARAM)hImageList)); | |
8699 } | |
8700 | |
8701 #if (_WIN32_IE >= 0x0400) | |
8702 DWORD GetExtendedStyle() const | |
8703 { | |
8704 ATLASSERT(::IsWindow(m_hWnd)); | |
8705 return (DWORD)::SendMessage(m_hWnd, CBEM_GETEXTENDEDSTYLE, 0, 0L
); | |
8706 } | |
8707 | |
8708 DWORD SetExtendedStyle(DWORD dwExMask, DWORD dwExStyle) | |
8709 { | |
8710 ATLASSERT(::IsWindow(m_hWnd)); | |
8711 return (DWORD)::SendMessage(m_hWnd, CBEM_SETEXTENDEDSTYLE, dwExM
ask, dwExStyle); | |
8712 } | |
8713 | |
8714 BOOL GetUnicodeFormat() const | |
8715 { | |
8716 ATLASSERT(::IsWindow(m_hWnd)); | |
8717 return (BOOL)::SendMessage(m_hWnd, CBEM_GETUNICODEFORMAT, 0, 0L)
; | |
8718 } | |
8719 | |
8720 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE) | |
8721 { | |
8722 ATLASSERT(::IsWindow(m_hWnd)); | |
8723 return (BOOL)::SendMessage(m_hWnd, CBEM_SETUNICODEFORMAT, bUnico
de, 0L); | |
8724 } | |
8725 #endif // (_WIN32_IE >= 0x0400) | |
8726 | |
8727 #if (_WIN32_WINNT >= 0x0501) | |
8728 void SetWindowTheme(LPCWSTR lpstrTheme) | |
8729 { | |
8730 ATLASSERT(::IsWindow(m_hWnd)); | |
8731 ::SendMessage(m_hWnd, CBEM_SETWINDOWTHEME, 0, (LPARAM)lpstrTheme
); | |
8732 } | |
8733 #endif // (_WIN32_WINNT >= 0x0501) | |
8734 | |
8735 // Operations | |
8736 int InsertItem(const COMBOBOXEXITEM* lpcCBItem) | |
8737 { | |
8738 ATLASSERT(::IsWindow(m_hWnd)); | |
8739 return (int)::SendMessage(m_hWnd, CBEM_INSERTITEM, 0, (LPARAM)lp
cCBItem); | |
8740 } | |
8741 | |
8742 int InsertItem(UINT nMask, int nIndex, LPCTSTR lpszItem, int nImage, int
nSelImage, | |
8743 int iIndent, int iOverlay, LPARAM lParam) | |
8744 { | |
8745 ATLASSERT(::IsWindow(m_hWnd)); | |
8746 COMBOBOXEXITEM cbex = { 0 }; | |
8747 cbex.mask = nMask; | |
8748 cbex.iItem = nIndex; | |
8749 cbex.pszText = (LPTSTR) lpszItem; | |
8750 cbex.iImage = nImage; | |
8751 cbex.iSelectedImage = nSelImage; | |
8752 cbex.iIndent = iIndent; | |
8753 cbex.iOverlay = iOverlay; | |
8754 cbex.lParam = lParam; | |
8755 return (int)::SendMessage(m_hWnd, CBEM_INSERTITEM, 0, (LPARAM)&c
bex); | |
8756 } | |
8757 | |
8758 int InsertItem(int nIndex, LPCTSTR lpszItem, int nImage, int nSelImage,
int iIndent, LPARAM lParam = 0) | |
8759 { | |
8760 ATLASSERT(::IsWindow(m_hWnd)); | |
8761 COMBOBOXEXITEM cbex = { 0 }; | |
8762 cbex.mask = CBEIF_TEXT | CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBE
IF_INDENT | CBEIF_LPARAM; | |
8763 cbex.iItem = nIndex; | |
8764 cbex.pszText = (LPTSTR) lpszItem; | |
8765 cbex.iImage = nImage; | |
8766 cbex.iSelectedImage = nSelImage; | |
8767 cbex.iIndent = iIndent; | |
8768 cbex.lParam = lParam; | |
8769 return (int)::SendMessage(m_hWnd, CBEM_INSERTITEM, 0, (LPARAM)&c
bex); | |
8770 } | |
8771 | |
8772 int AddItem(UINT nMask, LPCTSTR lpszItem, int nImage, int nSelImage, int
iIndent, int iOverlay, LPARAM lParam) | |
8773 { | |
8774 return InsertItem(nMask, -1, lpszItem, nImage, nSelImage, iInden
t, iOverlay, lParam); | |
8775 } | |
8776 | |
8777 int AddItem(LPCTSTR lpszItem, int nImage, int nSelImage, int iIndent, LP
ARAM lParam = 0) | |
8778 { | |
8779 return InsertItem(-1, lpszItem, nImage, nSelImage, iIndent, lPar
am); | |
8780 } | |
8781 | |
8782 int DeleteItem(int nIndex) | |
8783 { | |
8784 ATLASSERT(::IsWindow(m_hWnd)); | |
8785 return (int)::SendMessage(m_hWnd, CBEM_DELETEITEM, nIndex, 0L); | |
8786 } | |
8787 | |
8788 BOOL GetItem(PCOMBOBOXEXITEM pCBItem) const | |
8789 { | |
8790 ATLASSERT(::IsWindow(m_hWnd)); | |
8791 return (BOOL)::SendMessage(m_hWnd, CBEM_GETITEM, 0, (LPARAM)pCBI
tem); | |
8792 } | |
8793 | |
8794 BOOL SetItem(const COMBOBOXEXITEM* lpcCBItem) | |
8795 { | |
8796 ATLASSERT(::IsWindow(m_hWnd)); | |
8797 return (BOOL)::SendMessage(m_hWnd, CBEM_SETITEM, 0, (LPARAM)lpcC
BItem); | |
8798 } | |
8799 | |
8800 int SetItem(int nIndex, UINT nMask, LPCTSTR lpszItem, int nImage, int nS
elImage, | |
8801 int iIndent, int iOverlay, LPARAM lParam) | |
8802 { | |
8803 ATLASSERT(::IsWindow(m_hWnd)); | |
8804 COMBOBOXEXITEM cbex = { 0 }; | |
8805 cbex.mask = nMask; | |
8806 cbex.iItem = nIndex; | |
8807 cbex.pszText = (LPTSTR) lpszItem; | |
8808 cbex.iImage = nImage; | |
8809 cbex.iSelectedImage = nSelImage; | |
8810 cbex.iIndent = iIndent; | |
8811 cbex.iOverlay = iOverlay; | |
8812 cbex.lParam = lParam; | |
8813 return (int)::SendMessage(m_hWnd, CBEM_SETITEM, 0, (LPARAM)&cbex
); | |
8814 } | |
8815 | |
8816 BOOL GetItemText(int nIndex, LPTSTR lpszItem, int nLen) const | |
8817 { | |
8818 ATLASSERT(::IsWindow(m_hWnd)); | |
8819 ATLASSERT(lpszItem != NULL); | |
8820 | |
8821 COMBOBOXEXITEM cbex = { 0 }; | |
8822 cbex.mask = CBEIF_TEXT; | |
8823 cbex.iItem = nIndex; | |
8824 cbex.pszText = lpszItem; | |
8825 cbex.cchTextMax = nLen; | |
8826 | |
8827 return (BOOL)::SendMessage(m_hWnd, CBEM_GETITEM, 0, (LPARAM)&cbe
x); | |
8828 } | |
8829 | |
8830 #ifndef _ATL_NO_COM | |
8831 BOOL GetItemText(int nIndex, BSTR& bstrText) const | |
8832 { | |
8833 USES_CONVERSION; | |
8834 ATLASSERT(::IsWindow(m_hWnd)); | |
8835 ATLASSERT(bstrText == NULL); | |
8836 | |
8837 COMBOBOXEXITEM cbex = { 0 }; | |
8838 cbex.mask = CBEIF_TEXT; | |
8839 cbex.iItem = nIndex; | |
8840 | |
8841 LPTSTR lpstrText = NULL; | |
8842 BOOL bRet = FALSE; | |
8843 for(int nLen = 256; ; nLen *= 2) | |
8844 { | |
8845 ATLTRY(lpstrText = new TCHAR[nLen]); | |
8846 if(lpstrText == NULL) | |
8847 break; | |
8848 lpstrText[0] = NULL; | |
8849 cbex.pszText = lpstrText; | |
8850 cbex.cchTextMax = nLen; | |
8851 bRet = (BOOL)::SendMessage(m_hWnd, CBEM_GETITEM, 0, (LPA
RAM)&cbex); | |
8852 if(!bRet || (lstrlen(cbex.pszText) < nLen - 1)) | |
8853 break; | |
8854 delete [] lpstrText; | |
8855 lpstrText = NULL; | |
8856 } | |
8857 | |
8858 if(lpstrText != NULL) | |
8859 { | |
8860 if(bRet) | |
8861 bstrText = ::SysAllocString(T2OLE(lpstrText)); | |
8862 delete [] lpstrText; | |
8863 } | |
8864 | |
8865 return (bstrText != NULL) ? TRUE : FALSE; | |
8866 } | |
8867 #endif // !_ATL_NO_COM | |
8868 | |
8869 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) | |
8870 BOOL GetItemText(int nIndex, _CSTRING_NS::CString& strText) const | |
8871 { | |
8872 ATLASSERT(::IsWindow(m_hWnd)); | |
8873 | |
8874 COMBOBOXEXITEM cbex = { 0 }; | |
8875 cbex.mask = CBEIF_TEXT; | |
8876 cbex.iItem = nIndex; | |
8877 | |
8878 strText.Empty(); | |
8879 BOOL bRet = FALSE; | |
8880 for(int nLen = 256; ; nLen *= 2) | |
8881 { | |
8882 cbex.pszText = strText.GetBufferSetLength(nLen); | |
8883 if(cbex.pszText == NULL) | |
8884 { | |
8885 bRet = FALSE; | |
8886 break; | |
8887 } | |
8888 cbex.cchTextMax = nLen; | |
8889 bRet = (BOOL)::SendMessage(m_hWnd, CBEM_GETITEM, 0, (LPA
RAM)&cbex); | |
8890 if(!bRet || (lstrlen(cbex.pszText) < nLen - 1)) | |
8891 break; | |
8892 } | |
8893 strText.ReleaseBuffer(); | |
8894 return bRet; | |
8895 } | |
8896 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) | |
8897 | |
8898 BOOL SetItemText(int nIndex, LPCTSTR lpszItem) | |
8899 { | |
8900 ATLASSERT(::IsWindow(m_hWnd)); | |
8901 return SetItem(nIndex, CBEIF_TEXT, lpszItem, 0, 0, 0, 0, 0); | |
8902 } | |
8903 | |
8904 CComboBox GetComboCtrl() const | |
8905 { | |
8906 ATLASSERT(::IsWindow(m_hWnd)); | |
8907 return CComboBox((HWND)::SendMessage(m_hWnd, CBEM_GETCOMBOCONTRO
L, 0, 0L)); | |
8908 } | |
8909 | |
8910 CEdit GetEditCtrl() const | |
8911 { | |
8912 ATLASSERT(::IsWindow(m_hWnd)); | |
8913 return CEdit((HWND)::SendMessage(m_hWnd, CBEM_GETEDITCONTROL, 0,
0L)); | |
8914 } | |
8915 | |
8916 BOOL HasEditChanged() const | |
8917 { | |
8918 ATLASSERT(::IsWindow(m_hWnd)); | |
8919 return (BOOL)::SendMessage(m_hWnd, CBEM_HASEDITCHANGED, 0, 0L); | |
8920 } | |
8921 | |
8922 // Non-functional | |
8923 int AddString(LPCTSTR /*lpszItem*/) | |
8924 { | |
8925 ATLASSERT(FALSE); // Not available in CComboBoxEx; use InsertIt
em | |
8926 return 0; | |
8927 } | |
8928 | |
8929 int InsertString(int /*nIndex*/, LPCTSTR /*lpszString*/) | |
8930 { | |
8931 ATLASSERT(FALSE); // Not available in CComboBoxEx; use InsertIt
em | |
8932 return 0; | |
8933 } | |
8934 | |
8935 int Dir(UINT /*attr*/, LPCTSTR /*lpszWildCard*/) | |
8936 { | |
8937 ATLASSERT(FALSE); // Not available in CComboBoxEx | |
8938 return 0; | |
8939 } | |
8940 | |
8941 int FindString(int /*nStartAfter*/, LPCTSTR /*lpszString*/) const | |
8942 { | |
8943 ATLASSERT(FALSE); // Not available in CComboBoxEx; try FindStri
ngExact | |
8944 return 0; | |
8945 } | |
8946 }; | |
8947 | |
8948 typedef CComboBoxExT<ATL::CWindow> CComboBoxEx; | |
8949 | |
8950 #endif // !_WIN32_WCE | |
8951 | |
8952 | |
8953 /////////////////////////////////////////////////////////////////////////////// | |
8954 // CMonthCalendarCtrl | |
8955 | |
8956 template <class TBase> | |
8957 class CMonthCalendarCtrlT : public TBase | |
8958 { | |
8959 public: | |
8960 // Constructors | |
8961 CMonthCalendarCtrlT(HWND hWnd = NULL) : TBase(hWnd) | |
8962 { } | |
8963 | |
8964 CMonthCalendarCtrlT< TBase >& operator =(HWND hWnd) | |
8965 { | |
8966 m_hWnd = hWnd; | |
8967 return *this; | |
8968 } | |
8969 | |
8970 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
8971 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
8972 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
8973 { | |
8974 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
8975 } | |
8976 | |
8977 // Attributes | |
8978 static LPCTSTR GetWndClassName() | |
8979 { | |
8980 return MONTHCAL_CLASS; | |
8981 } | |
8982 | |
8983 COLORREF GetColor(int nColorType) const | |
8984 { | |
8985 ATLASSERT(::IsWindow(m_hWnd)); | |
8986 return (COLORREF)::SendMessage(m_hWnd, MCM_GETCOLOR, nColorType,
0L); | |
8987 } | |
8988 | |
8989 COLORREF SetColor(int nColorType, COLORREF clr) | |
8990 { | |
8991 ATLASSERT(::IsWindow(m_hWnd)); | |
8992 return (COLORREF)::SendMessage(m_hWnd, MCM_SETCOLOR, nColorType,
clr); | |
8993 } | |
8994 | |
8995 BOOL GetCurSel(LPSYSTEMTIME lpSysTime) const | |
8996 { | |
8997 ATLASSERT(::IsWindow(m_hWnd)); | |
8998 return (BOOL)::SendMessage(m_hWnd, MCM_GETCURSEL, 0, (LPARAM)lpS
ysTime); | |
8999 } | |
9000 | |
9001 BOOL SetCurSel(LPSYSTEMTIME lpSysTime) | |
9002 { | |
9003 ATLASSERT(::IsWindow(m_hWnd)); | |
9004 return (BOOL)::SendMessage(m_hWnd, MCM_SETCURSEL, 0, (LPARAM)lpS
ysTime); | |
9005 } | |
9006 | |
9007 int GetFirstDayOfWeek(BOOL* pbLocaleVal = NULL) const | |
9008 { | |
9009 ATLASSERT(::IsWindow(m_hWnd)); | |
9010 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, MCM_GETFIRSTDAYOFWEEK
, 0, 0L); | |
9011 if(pbLocaleVal != NULL) | |
9012 *pbLocaleVal = (BOOL)HIWORD(dwRet); | |
9013 return (int)(short)LOWORD(dwRet); | |
9014 } | |
9015 | |
9016 int SetFirstDayOfWeek(int nDay, BOOL* pbLocaleVal = NULL) | |
9017 { | |
9018 ATLASSERT(::IsWindow(m_hWnd)); | |
9019 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, MCM_SETFIRSTDAYOFWEEK
, 0, nDay); | |
9020 if(pbLocaleVal != NULL) | |
9021 *pbLocaleVal = (BOOL)HIWORD(dwRet); | |
9022 return (int)(short)LOWORD(dwRet); | |
9023 } | |
9024 | |
9025 int GetMaxSelCount() const | |
9026 { | |
9027 ATLASSERT(::IsWindow(m_hWnd)); | |
9028 return (int)::SendMessage(m_hWnd, MCM_GETMAXSELCOUNT, 0, 0L); | |
9029 } | |
9030 | |
9031 BOOL SetMaxSelCount(int nMax) | |
9032 { | |
9033 ATLASSERT(::IsWindow(m_hWnd)); | |
9034 return (BOOL)::SendMessage(m_hWnd, MCM_SETMAXSELCOUNT, nMax, 0L)
; | |
9035 } | |
9036 | |
9037 int GetMonthDelta() const | |
9038 { | |
9039 ATLASSERT(::IsWindow(m_hWnd)); | |
9040 return (int)::SendMessage(m_hWnd, MCM_GETMONTHDELTA, 0, 0L); | |
9041 } | |
9042 | |
9043 int SetMonthDelta(int nDelta) | |
9044 { | |
9045 ATLASSERT(::IsWindow(m_hWnd)); | |
9046 return (int)::SendMessage(m_hWnd, MCM_SETMONTHDELTA, nDelta, 0L)
; | |
9047 } | |
9048 | |
9049 DWORD GetRange(LPSYSTEMTIME lprgSysTimeArray) const | |
9050 { | |
9051 ATLASSERT(::IsWindow(m_hWnd)); | |
9052 return (DWORD)::SendMessage(m_hWnd, MCM_GETRANGE, 0, (LPARAM)lpr
gSysTimeArray); | |
9053 } | |
9054 | |
9055 BOOL SetRange(DWORD dwFlags, LPSYSTEMTIME lprgSysTimeArray) | |
9056 { | |
9057 ATLASSERT(::IsWindow(m_hWnd)); | |
9058 return (BOOL)::SendMessage(m_hWnd, MCM_SETRANGE, dwFlags, (LPARA
M)lprgSysTimeArray); | |
9059 } | |
9060 | |
9061 BOOL GetSelRange(LPSYSTEMTIME lprgSysTimeArray) const | |
9062 { | |
9063 ATLASSERT(::IsWindow(m_hWnd)); | |
9064 return (BOOL)::SendMessage(m_hWnd, MCM_GETSELRANGE, 0, (LPARAM)l
prgSysTimeArray); | |
9065 } | |
9066 | |
9067 BOOL SetSelRange(LPSYSTEMTIME lprgSysTimeArray) | |
9068 { | |
9069 ATLASSERT(::IsWindow(m_hWnd)); | |
9070 return (BOOL)::SendMessage(m_hWnd, MCM_SETSELRANGE, 0, (LPARAM)l
prgSysTimeArray); | |
9071 } | |
9072 | |
9073 BOOL GetToday(LPSYSTEMTIME lpSysTime) const | |
9074 { | |
9075 ATLASSERT(::IsWindow(m_hWnd)); | |
9076 return (BOOL)::SendMessage(m_hWnd, MCM_GETTODAY, 0, (LPARAM)lpSy
sTime); | |
9077 } | |
9078 | |
9079 void SetToday(LPSYSTEMTIME lpSysTime) | |
9080 { | |
9081 ATLASSERT(::IsWindow(m_hWnd)); | |
9082 ::SendMessage(m_hWnd, MCM_SETTODAY, 0, (LPARAM)lpSysTime); | |
9083 } | |
9084 | |
9085 BOOL GetMinReqRect(LPRECT lpRectInfo) const | |
9086 { | |
9087 ATLASSERT(::IsWindow(m_hWnd)); | |
9088 return (BOOL)::SendMessage(m_hWnd, MCM_GETMINREQRECT, 0, (LPARAM
)lpRectInfo); | |
9089 } | |
9090 | |
9091 int GetMaxTodayWidth() const | |
9092 { | |
9093 ATLASSERT(::IsWindow(m_hWnd)); | |
9094 return (int)::SendMessage(m_hWnd, MCM_GETMAXTODAYWIDTH, 0, 0L); | |
9095 } | |
9096 | |
9097 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
9098 BOOL GetUnicodeFormat() const | |
9099 { | |
9100 ATLASSERT(::IsWindow(m_hWnd)); | |
9101 return (BOOL)::SendMessage(m_hWnd, MCM_GETUNICODEFORMAT, 0, 0L); | |
9102 } | |
9103 | |
9104 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE) | |
9105 { | |
9106 ATLASSERT(::IsWindow(m_hWnd)); | |
9107 return (BOOL)::SendMessage(m_hWnd, MCM_SETUNICODEFORMAT, bUnicod
e, 0L); | |
9108 } | |
9109 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
9110 | |
9111 #if defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN) | |
9112 DWORD GetCurrentView() const | |
9113 { | |
9114 ATLASSERT(::IsWindow(m_hWnd)); | |
9115 return (DWORD)::SendMessage(m_hWnd, MCM_GETCURRENTVIEW, 0, 0L); | |
9116 } | |
9117 | |
9118 BOOL SetCurrentView(DWORD dwView) | |
9119 { | |
9120 ATLASSERT(::IsWindow(m_hWnd)); | |
9121 return (BOOL)::SendMessage(m_hWnd, MCM_SETCURRENTVIEW, 0, dwView
); | |
9122 } | |
9123 | |
9124 DWORD GetCalendarCount() const | |
9125 { | |
9126 ATLASSERT(::IsWindow(m_hWnd)); | |
9127 return (DWORD)::SendMessage(m_hWnd, MCM_GETCALENDARCOUNT, 0, 0L)
; | |
9128 } | |
9129 | |
9130 BOOL GetCalendarGridInfo(PMCGRIDINFO pGridInfo) const | |
9131 { | |
9132 ATLASSERT(::IsWindow(m_hWnd)); | |
9133 return (BOOL)::SendMessage(m_hWnd, MCM_GETCALENDARGRIDINFO, 0, (
LPARAM)pGridInfo); | |
9134 } | |
9135 | |
9136 CALID GetCALID() const | |
9137 { | |
9138 ATLASSERT(::IsWindow(m_hWnd)); | |
9139 return (CALID)::SendMessage(m_hWnd, MCM_GETCALID, 0, 0L); | |
9140 } | |
9141 | |
9142 void SetCALID(CALID calid) | |
9143 { | |
9144 ATLASSERT(::IsWindow(m_hWnd)); | |
9145 ::SendMessage(m_hWnd, MCM_SETCALID, (LPARAM)calid, 0L); | |
9146 } | |
9147 | |
9148 int GetCalendarBorder() const | |
9149 { | |
9150 ATLASSERT(::IsWindow(m_hWnd)); | |
9151 return (int)::SendMessage(m_hWnd, MCM_GETCALENDARBORDER, 0, 0L); | |
9152 } | |
9153 | |
9154 void SetCalendarBorder(int cxyBorder, BOOL bSet = TRUE) | |
9155 { | |
9156 ATLASSERT(::IsWindow(m_hWnd)); | |
9157 ::SendMessage(m_hWnd, MCM_SETCALENDARBORDER, (WPARAM)bSet, (LPAR
AM)cxyBorder); | |
9158 } | |
9159 #endif // defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN) | |
9160 | |
9161 // Operations | |
9162 int GetMonthRange(DWORD dwFlags, LPSYSTEMTIME lprgSysTimeArray) const | |
9163 { | |
9164 ATLASSERT(::IsWindow(m_hWnd)); | |
9165 return (int)::SendMessage(m_hWnd, MCM_GETMONTHRANGE, dwFlags, (L
PARAM)lprgSysTimeArray); | |
9166 } | |
9167 | |
9168 BOOL SetDayState(int nMonths, LPMONTHDAYSTATE lpDayStateArray) | |
9169 { | |
9170 ATLASSERT(::IsWindow(m_hWnd)); | |
9171 return (BOOL)::SendMessage(m_hWnd, MCM_SETDAYSTATE, nMonths, (LP
ARAM)lpDayStateArray); | |
9172 } | |
9173 | |
9174 DWORD HitTest(PMCHITTESTINFO pMCHitTest) const | |
9175 { | |
9176 ATLASSERT(::IsWindow(m_hWnd)); | |
9177 return (DWORD)::SendMessage(m_hWnd, MCM_HITTEST, 0, (LPARAM)pMCH
itTest); | |
9178 } | |
9179 | |
9180 #if defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN) | |
9181 void SizeRectToMin(LPRECT lpRect) | |
9182 { | |
9183 ATLASSERT(::IsWindow(m_hWnd)); | |
9184 ::SendMessage(m_hWnd, MCM_SIZERECTTOMIN, 0, (LPARAM)lpRect); | |
9185 } | |
9186 #endif // defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN) | |
9187 }; | |
9188 | |
9189 typedef CMonthCalendarCtrlT<ATL::CWindow> CMonthCalendarCtrl; | |
9190 | |
9191 | |
9192 /////////////////////////////////////////////////////////////////////////////// | |
9193 // CDateTimePickerCtrl | |
9194 | |
9195 template <class TBase> | |
9196 class CDateTimePickerCtrlT : public TBase | |
9197 { | |
9198 public: | |
9199 // Constructors | |
9200 CDateTimePickerCtrlT(HWND hWnd = NULL) : TBase(hWnd) | |
9201 { } | |
9202 | |
9203 CDateTimePickerCtrlT< TBase >& operator =(HWND hWnd) | |
9204 { | |
9205 m_hWnd = hWnd; | |
9206 return *this; | |
9207 } | |
9208 | |
9209 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
9210 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
9211 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
9212 { | |
9213 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
9214 } | |
9215 | |
9216 // Operations | |
9217 static LPCTSTR GetWndClassName() | |
9218 { | |
9219 return DATETIMEPICK_CLASS; | |
9220 } | |
9221 | |
9222 BOOL SetFormat(LPCTSTR lpszFormat) | |
9223 { | |
9224 ATLASSERT(::IsWindow(m_hWnd)); | |
9225 return (BOOL)::SendMessage(m_hWnd, DTM_SETFORMAT, 0, (LPARAM)lps
zFormat); | |
9226 } | |
9227 | |
9228 COLORREF GetMonthCalColor(int nColorType) const | |
9229 { | |
9230 ATLASSERT(::IsWindow(m_hWnd)); | |
9231 return (COLORREF)::SendMessage(m_hWnd, DTM_GETMCCOLOR, nColorTyp
e, 0L); | |
9232 } | |
9233 | |
9234 COLORREF SetMonthCalColor(int nColorType, COLORREF clr) | |
9235 { | |
9236 ATLASSERT(::IsWindow(m_hWnd)); | |
9237 return (COLORREF)::SendMessage(m_hWnd, DTM_SETMCCOLOR, nColorTyp
e, clr); | |
9238 } | |
9239 | |
9240 DWORD GetRange(LPSYSTEMTIME lpSysTimeArray) const | |
9241 { | |
9242 ATLASSERT(::IsWindow(m_hWnd)); | |
9243 return (DWORD)::SendMessage(m_hWnd, DTM_GETRANGE, 0, (LPARAM)lpS
ysTimeArray); | |
9244 } | |
9245 | |
9246 BOOL SetRange(DWORD dwFlags, LPSYSTEMTIME lpSysTimeArray) | |
9247 { | |
9248 ATLASSERT(::IsWindow(m_hWnd)); | |
9249 return (BOOL)::SendMessage(m_hWnd, DTM_SETRANGE, dwFlags, (LPARA
M)lpSysTimeArray); | |
9250 } | |
9251 | |
9252 DWORD GetSystemTime(LPSYSTEMTIME lpSysTime) const | |
9253 { | |
9254 ATLASSERT(::IsWindow(m_hWnd)); | |
9255 return (DWORD)::SendMessage(m_hWnd, DTM_GETSYSTEMTIME, 0, (LPARA
M)lpSysTime); | |
9256 } | |
9257 | |
9258 BOOL SetSystemTime(DWORD dwFlags, LPSYSTEMTIME lpSysTime) | |
9259 { | |
9260 ATLASSERT(::IsWindow(m_hWnd)); | |
9261 return (BOOL)::SendMessage(m_hWnd, DTM_SETSYSTEMTIME, dwFlags, (
LPARAM)lpSysTime); | |
9262 } | |
9263 | |
9264 CMonthCalendarCtrl GetMonthCal() const | |
9265 { | |
9266 ATLASSERT(::IsWindow(m_hWnd)); | |
9267 return CMonthCalendarCtrl((HWND)::SendMessage(m_hWnd, DTM_GETMON
THCAL, 0, 0L)); | |
9268 } | |
9269 | |
9270 #if (_WIN32_IE >= 0x0400) | |
9271 CFontHandle GetMonthCalFont() const | |
9272 { | |
9273 ATLASSERT(::IsWindow(m_hWnd)); | |
9274 return CFontHandle((HFONT)::SendMessage(m_hWnd, DTM_GETMCFONT, 0
, 0L)); | |
9275 } | |
9276 | |
9277 void SetMonthCalFont(HFONT hFont, BOOL bRedraw = TRUE) | |
9278 { | |
9279 ATLASSERT(::IsWindow(m_hWnd)); | |
9280 ::SendMessage(m_hWnd, DTM_SETMCFONT, (WPARAM)hFont, MAKELPARAM(b
Redraw, 0)); | |
9281 } | |
9282 #endif // (_WIN32_IE >= 0x0400) | |
9283 | |
9284 #if defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN) | |
9285 DWORD GetMonthCalStyle() const | |
9286 { | |
9287 ATLASSERT(::IsWindow(m_hWnd)); | |
9288 return (DWORD)::SendMessage(m_hWnd, DTM_GETMCSTYLE, 0, 0L); | |
9289 } | |
9290 | |
9291 DWORD SetMonthCalStyle(DWORD dwStyle) | |
9292 { | |
9293 ATLASSERT(::IsWindow(m_hWnd)); | |
9294 return (DWORD)::SendMessage(m_hWnd, DTM_SETMCSTYLE, 0, (LPARAM)d
wStyle); | |
9295 } | |
9296 | |
9297 void GetDateTimePickerInfo(LPDATETIMEPICKERINFO lpPickerInfo) const | |
9298 { | |
9299 ATLASSERT(::IsWindow(m_hWnd)); | |
9300 ::SendMessage(m_hWnd, DTM_GETDATETIMEPICKERINFO, 0, (LPARAM)lpPi
ckerInfo); | |
9301 } | |
9302 | |
9303 BOOL GetIdealSize(LPSIZE lpSize) const | |
9304 { | |
9305 ATLASSERT(::IsWindow(m_hWnd)); | |
9306 return (BOOL)::SendMessage(m_hWnd, DTM_GETIDEALSIZE, 0, (LPARAM)
lpSize); | |
9307 } | |
9308 | |
9309 void CloseMonthCal() | |
9310 { | |
9311 ATLASSERT(::IsWindow(m_hWnd)); | |
9312 ::SendMessage(m_hWnd, DTM_CLOSEMONTHCAL, 0, 0L); | |
9313 } | |
9314 #endif // defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN) | |
9315 }; | |
9316 | |
9317 typedef CDateTimePickerCtrlT<ATL::CWindow> CDateTimePickerCtrl; | |
9318 | |
9319 | |
9320 /////////////////////////////////////////////////////////////////////////////// | |
9321 // CFlatScrollBarImpl - support for flat scroll bars | |
9322 | |
9323 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
9324 | |
9325 template <class T> | |
9326 class CFlatScrollBarImpl | |
9327 { | |
9328 public: | |
9329 // Initialization | |
9330 BOOL FlatSB_Initialize() | |
9331 { | |
9332 T* pT = static_cast<T*>(this); | |
9333 ATLASSERT(::IsWindow(pT->m_hWnd)); | |
9334 return ::InitializeFlatSB(pT->m_hWnd); | |
9335 } | |
9336 | |
9337 HRESULT FlatSB_Uninitialize() | |
9338 { | |
9339 T* pT = static_cast<T*>(this); | |
9340 ATLASSERT(::IsWindow(pT->m_hWnd)); | |
9341 return ::UninitializeFlatSB(pT->m_hWnd); | |
9342 } | |
9343 | |
9344 // Flat scroll bar properties | |
9345 BOOL FlatSB_GetScrollProp(UINT uIndex, LPINT lpnValue) const | |
9346 { | |
9347 const T* pT = static_cast<const T*>(this); | |
9348 ATLASSERT(::IsWindow(pT->m_hWnd)); | |
9349 return ::FlatSB_GetScrollProp(pT->m_hWnd, uIndex, lpnValue); | |
9350 } | |
9351 | |
9352 BOOL FlatSB_SetScrollProp(UINT uIndex, int nValue, BOOL bRedraw = TRUE) | |
9353 { | |
9354 T* pT = static_cast<T*>(this); | |
9355 ATLASSERT(::IsWindow(pT->m_hWnd)); | |
9356 return ::FlatSB_SetScrollProp(pT->m_hWnd, uIndex, nValue, bRedra
w); | |
9357 } | |
9358 | |
9359 // Attributes | |
9360 int FlatSB_GetScrollPos(int nBar) const | |
9361 { | |
9362 const T* pT = static_cast<const T*>(this); | |
9363 ATLASSERT(::IsWindow(pT->m_hWnd)); | |
9364 return ::FlatSB_GetScrollPos(pT->m_hWnd, nBar); | |
9365 } | |
9366 | |
9367 int FlatSB_SetScrollPos(int nBar, int nPos, BOOL bRedraw = TRUE) | |
9368 { | |
9369 T* pT = static_cast<T*>(this); | |
9370 ATLASSERT(::IsWindow(pT->m_hWnd)); | |
9371 return ::FlatSB_SetScrollPos(pT->m_hWnd, nBar, nPos, bRedraw); | |
9372 } | |
9373 | |
9374 BOOL FlatSB_GetScrollRange(int nBar, LPINT lpMinPos, LPINT lpMaxPos) con
st | |
9375 { | |
9376 const T* pT = static_cast<const T*>(this); | |
9377 ATLASSERT(::IsWindow(pT->m_hWnd)); | |
9378 return ::FlatSB_GetScrollRange(pT->m_hWnd, nBar, lpMinPos, lpMax
Pos); | |
9379 } | |
9380 | |
9381 BOOL FlatSB_SetScrollRange(int nBar, int nMinPos, int nMaxPos, BOOL bRed
raw = TRUE) | |
9382 { | |
9383 T* pT = static_cast<T*>(this); | |
9384 ATLASSERT(::IsWindow(pT->m_hWnd)); | |
9385 return ::FlatSB_SetScrollRange(pT->m_hWnd, nBar, nMinPos, nMaxPo
s, bRedraw); | |
9386 } | |
9387 | |
9388 BOOL FlatSB_GetScrollInfo(int nBar, LPSCROLLINFO lpScrollInfo) const | |
9389 { | |
9390 const T* pT = static_cast<const T*>(this); | |
9391 ATLASSERT(::IsWindow(pT->m_hWnd)); | |
9392 return ::FlatSB_GetScrollInfo(pT->m_hWnd, nBar, lpScrollInfo); | |
9393 } | |
9394 | |
9395 int FlatSB_SetScrollInfo(int nBar, LPSCROLLINFO lpScrollInfo, BOOL bRedr
aw = TRUE) | |
9396 { | |
9397 T* pT = static_cast<T*>(this); | |
9398 ATLASSERT(::IsWindow(pT->m_hWnd)); | |
9399 return ::FlatSB_SetScrollInfo(pT->m_hWnd, nBar, lpScrollInfo, bR
edraw); | |
9400 } | |
9401 | |
9402 // Operations | |
9403 BOOL FlatSB_ShowScrollBar(UINT nBar, BOOL bShow = TRUE) | |
9404 { | |
9405 T* pT = static_cast<T*>(this); | |
9406 ATLASSERT(::IsWindow(pT->m_hWnd)); | |
9407 return ::FlatSB_ShowScrollBar(pT->m_hWnd, nBar, bShow); | |
9408 } | |
9409 | |
9410 BOOL FlatSB_EnableScrollBar(UINT uSBFlags, UINT uArrowFlags = ESB_ENABLE
_BOTH) | |
9411 { | |
9412 T* pT = static_cast<T*>(this); | |
9413 ATLASSERT(::IsWindow(pT->m_hWnd)); | |
9414 return ::FlatSB_EnableScrollBar(pT->m_hWnd, uSBFlags, uArrowFlag
s); | |
9415 } | |
9416 }; | |
9417 | |
9418 template <class TBase> | |
9419 class CFlatScrollBarT : public TBase, public CFlatScrollBarImpl<CFlatScrollBarT<
TBase > > | |
9420 { | |
9421 public: | |
9422 CFlatScrollBarT(HWND hWnd = NULL) : TBase(hWnd) | |
9423 { } | |
9424 | |
9425 CFlatScrollBarT< TBase >& operator =(HWND hWnd) | |
9426 { | |
9427 m_hWnd = hWnd; | |
9428 return *this; | |
9429 } | |
9430 }; | |
9431 | |
9432 typedef CFlatScrollBarT<ATL::CWindow> CFlatScrollBar; | |
9433 | |
9434 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
9435 | |
9436 | |
9437 /////////////////////////////////////////////////////////////////////////////// | |
9438 // CIPAddressCtrl | |
9439 | |
9440 #if (_WIN32_IE >= 0x0400) | |
9441 | |
9442 template <class TBase> | |
9443 class CIPAddressCtrlT : public TBase | |
9444 { | |
9445 public: | |
9446 // Constructors | |
9447 CIPAddressCtrlT(HWND hWnd = NULL) : TBase(hWnd) | |
9448 { } | |
9449 | |
9450 CIPAddressCtrlT< TBase >& operator =(HWND hWnd) | |
9451 { | |
9452 m_hWnd = hWnd; | |
9453 return *this; | |
9454 } | |
9455 | |
9456 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
9457 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
9458 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
9459 { | |
9460 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
9461 } | |
9462 | |
9463 // Atteributes | |
9464 static LPCTSTR GetWndClassName() | |
9465 { | |
9466 return WC_IPADDRESS; | |
9467 } | |
9468 | |
9469 BOOL IsBlank() const | |
9470 { | |
9471 ATLASSERT(::IsWindow(m_hWnd)); | |
9472 return (BOOL)::SendMessage(m_hWnd, IPM_ISBLANK, 0, 0L); | |
9473 } | |
9474 | |
9475 int GetAddress(LPDWORD lpdwAddress) const | |
9476 { | |
9477 ATLASSERT(::IsWindow(m_hWnd)); | |
9478 return (int)::SendMessage(m_hWnd, IPM_GETADDRESS, 0, (LPARAM)lpd
wAddress); | |
9479 } | |
9480 | |
9481 void SetAddress(DWORD dwAddress) | |
9482 { | |
9483 ATLASSERT(::IsWindow(m_hWnd)); | |
9484 ::SendMessage(m_hWnd, IPM_SETADDRESS, 0, dwAddress); | |
9485 } | |
9486 | |
9487 void ClearAddress() | |
9488 { | |
9489 ATLASSERT(::IsWindow(m_hWnd)); | |
9490 ::SendMessage(m_hWnd, IPM_CLEARADDRESS, 0, 0L); | |
9491 } | |
9492 | |
9493 void SetRange(int nField, WORD wRange) | |
9494 { | |
9495 ATLASSERT(::IsWindow(m_hWnd)); | |
9496 ::SendMessage(m_hWnd, IPM_SETRANGE, nField, wRange); | |
9497 } | |
9498 | |
9499 void SetRange(int nField, BYTE nMin, BYTE nMax) | |
9500 { | |
9501 ATLASSERT(::IsWindow(m_hWnd)); | |
9502 ::SendMessage(m_hWnd, IPM_SETRANGE, nField, MAKEIPRANGE(nMin, nM
ax)); | |
9503 } | |
9504 | |
9505 void SetFocus(int nField) | |
9506 { | |
9507 ATLASSERT(::IsWindow(m_hWnd)); | |
9508 ::SendMessage(m_hWnd, IPM_SETFOCUS, nField, 0L); | |
9509 } | |
9510 }; | |
9511 | |
9512 typedef CIPAddressCtrlT<ATL::CWindow> CIPAddressCtrl; | |
9513 | |
9514 #endif // (_WIN32_IE >= 0x0400) | |
9515 | |
9516 | |
9517 /////////////////////////////////////////////////////////////////////////////// | |
9518 // CPagerCtrl | |
9519 | |
9520 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
9521 | |
9522 template <class TBase> | |
9523 class CPagerCtrlT : public TBase | |
9524 { | |
9525 public: | |
9526 // Constructors | |
9527 CPagerCtrlT(HWND hWnd = NULL) : TBase(hWnd) | |
9528 { } | |
9529 | |
9530 CPagerCtrlT< TBase >& operator =(HWND hWnd) | |
9531 { | |
9532 m_hWnd = hWnd; | |
9533 return *this; | |
9534 } | |
9535 | |
9536 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
9537 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
9538 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
9539 { | |
9540 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
9541 } | |
9542 | |
9543 // Attributes | |
9544 static LPCTSTR GetWndClassName() | |
9545 { | |
9546 return WC_PAGESCROLLER; | |
9547 } | |
9548 | |
9549 int GetButtonSize() const | |
9550 { | |
9551 ATLASSERT(::IsWindow(m_hWnd)); | |
9552 return (int)::SendMessage(m_hWnd, PGM_GETBUTTONSIZE, 0, 0L); | |
9553 } | |
9554 | |
9555 int SetButtonSize(int nButtonSize) | |
9556 { | |
9557 ATLASSERT(::IsWindow(m_hWnd)); | |
9558 return (int)::SendMessage(m_hWnd, PGM_SETBUTTONSIZE, 0, nButtonS
ize); | |
9559 } | |
9560 | |
9561 DWORD GetButtonState(int nButton) const | |
9562 { | |
9563 ATLASSERT(::IsWindow(m_hWnd)); | |
9564 ATLASSERT(nButton == PGB_TOPORLEFT || nButton == PGB_BOTTOMORRIG
HT); | |
9565 return (DWORD)::SendMessage(m_hWnd, PGM_GETBUTTONSTATE, 0, nButt
on); | |
9566 } | |
9567 | |
9568 COLORREF GetBkColor() const | |
9569 { | |
9570 ATLASSERT(::IsWindow(m_hWnd)); | |
9571 return (COLORREF)::SendMessage(m_hWnd, PGM_GETBKCOLOR, 0, 0L); | |
9572 } | |
9573 | |
9574 COLORREF SetBkColor(COLORREF clrBk) | |
9575 { | |
9576 ATLASSERT(::IsWindow(m_hWnd)); | |
9577 return (COLORREF)::SendMessage(m_hWnd, PGM_SETBKCOLOR, 0, (LPARA
M)clrBk); | |
9578 } | |
9579 | |
9580 int GetBorder() const | |
9581 { | |
9582 ATLASSERT(::IsWindow(m_hWnd)); | |
9583 return (int)::SendMessage(m_hWnd, PGM_GETBORDER, 0, 0L); | |
9584 } | |
9585 | |
9586 int SetBorder(int nBorderSize) | |
9587 { | |
9588 ATLASSERT(::IsWindow(m_hWnd)); | |
9589 return (int)::SendMessage(m_hWnd, PGM_SETBORDER, 0, nBorderSize)
; | |
9590 } | |
9591 | |
9592 int GetPos() const | |
9593 { | |
9594 ATLASSERT(::IsWindow(m_hWnd)); | |
9595 return (int)::SendMessage(m_hWnd, PGM_GETPOS, 0, 0L); | |
9596 } | |
9597 | |
9598 int SetPos(int nPos) | |
9599 { | |
9600 ATLASSERT(::IsWindow(m_hWnd)); | |
9601 return (int)::SendMessage(m_hWnd, PGM_SETPOS, 0, nPos); | |
9602 } | |
9603 | |
9604 // Operations | |
9605 void SetChild(HWND hWndChild) | |
9606 { | |
9607 ATLASSERT(::IsWindow(m_hWnd)); | |
9608 ::SendMessage(m_hWnd, PGM_SETCHILD, 0, (LPARAM)hWndChild); | |
9609 } | |
9610 | |
9611 void ForwardMouse(BOOL bForward = TRUE) | |
9612 { | |
9613 ATLASSERT(::IsWindow(m_hWnd)); | |
9614 ::SendMessage(m_hWnd, PGM_FORWARDMOUSE, bForward, 0L); | |
9615 } | |
9616 | |
9617 void RecalcSize() | |
9618 { | |
9619 ATLASSERT(::IsWindow(m_hWnd)); | |
9620 ::SendMessage(m_hWnd, PGM_RECALCSIZE, 0, 0L); | |
9621 } | |
9622 | |
9623 void GetDropTarget(IDropTarget** ppDropTarget) | |
9624 { | |
9625 ATLASSERT(::IsWindow(m_hWnd)); | |
9626 ATLASSERT(ppDropTarget != NULL); | |
9627 ::SendMessage(m_hWnd, PGM_GETDROPTARGET, 0, (LPARAM)ppDropTarget
); | |
9628 } | |
9629 }; | |
9630 | |
9631 typedef CPagerCtrlT<ATL::CWindow> CPagerCtrl; | |
9632 | |
9633 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE) | |
9634 | |
9635 | |
9636 /////////////////////////////////////////////////////////////////////////////// | |
9637 // CLinkCtrl - Windows SYSLINK control | |
9638 | |
9639 #if (_WIN32_WINNT >= 0x0501) && !defined(_WIN32_WCE) | |
9640 | |
9641 template <class TBase> | |
9642 class CLinkCtrlT : public TBase | |
9643 { | |
9644 public: | |
9645 // Constructors | |
9646 CLinkCtrlT(HWND hWnd = NULL) : TBase(hWnd) | |
9647 { } | |
9648 | |
9649 CLinkCtrlT< TBase >& operator =(HWND hWnd) | |
9650 { | |
9651 m_hWnd = hWnd; | |
9652 return *this; | |
9653 } | |
9654 | |
9655 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowN
ame = NULL, | |
9656 DWORD dwStyle = 0, DWORD dwExStyle = 0, | |
9657 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = N
ULL) | |
9658 { | |
9659 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRec
t, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam); | |
9660 } | |
9661 | |
9662 // Attributes | |
9663 static LPCTSTR GetWndClassName() | |
9664 { | |
9665 #ifdef _UNICODE | |
9666 return WC_LINK; | |
9667 #else // !_UNICODE | |
9668 return "SysLink"; | |
9669 #endif // !_UNICODE | |
9670 } | |
9671 | |
9672 int GetIdealHeight(int cxMaxWidth = 0) const | |
9673 { | |
9674 ATLASSERT(::IsWindow(m_hWnd)); | |
9675 return (int)::SendMessage(m_hWnd, LM_GETIDEALHEIGHT, cxMaxWidth,
0L); | |
9676 } | |
9677 | |
9678 BOOL GetItem(PLITEM pLItem) const | |
9679 { | |
9680 ATLASSERT(::IsWindow(m_hWnd)); | |
9681 return (BOOL)::SendMessage(m_hWnd, LM_GETITEM, 0, (LPARAM)pLItem
); | |
9682 } | |
9683 | |
9684 BOOL SetItem(PLITEM pLItem) | |
9685 { | |
9686 ATLASSERT(::IsWindow(m_hWnd)); | |
9687 return (BOOL)::SendMessage(m_hWnd, LM_SETITEM, 0, (LPARAM)pLItem
); | |
9688 } | |
9689 | |
9690 // Vista only | |
9691 int GetIdealSize(SIZE& size, int cxMaxWidth = 0) const | |
9692 { | |
9693 #ifndef LM_GETIDEALSIZE | |
9694 const UINT LM_GETIDEALSIZE = LM_GETIDEALHEIGHT; | |
9695 #endif | |
9696 ATLASSERT(::IsWindow(m_hWnd)); | |
9697 return (int)::SendMessage(m_hWnd, LM_GETIDEALSIZE, cxMaxWidth, (
LPARAM)&size); | |
9698 } | |
9699 | |
9700 // Operations | |
9701 BOOL HitTest(PLHITTESTINFO pLHitTestInfo) const | |
9702 { | |
9703 ATLASSERT(::IsWindow(m_hWnd)); | |
9704 return (BOOL)::SendMessage(m_hWnd, LM_HITTEST, 0, (LPARAM)pLHitT
estInfo); | |
9705 } | |
9706 }; | |
9707 | |
9708 typedef CLinkCtrlT<ATL::CWindow> CLinkCtrl; | |
9709 | |
9710 #endif // (_WIN32_WINNT >= 0x0501) && !defined(_WIN32_WCE) | |
9711 | |
9712 | |
9713 /////////////////////////////////////////////////////////////////////////////// | |
9714 // CCustomDraw - MI class for custom-draw support | |
9715 | |
9716 template <class T> | |
9717 class CCustomDraw | |
9718 { | |
9719 public: | |
9720 #if (_ATL_VER < 0x0700) | |
9721 BOOL m_bHandledCD; | |
9722 | |
9723 BOOL IsMsgHandled() const | |
9724 { | |
9725 return m_bHandledCD; | |
9726 } | |
9727 | |
9728 void SetMsgHandled(BOOL bHandled) | |
9729 { | |
9730 m_bHandledCD = bHandled; | |
9731 } | |
9732 #endif // !(_ATL_VER < 0x0700) | |
9733 | |
9734 // Message map and handlers | |
9735 BEGIN_MSG_MAP(CCustomDraw< T >) | |
9736 NOTIFY_CODE_HANDLER(NM_CUSTOMDRAW, OnCustomDraw) | |
9737 ALT_MSG_MAP(1) | |
9738 REFLECTED_NOTIFY_CODE_HANDLER(NM_CUSTOMDRAW, OnCustomDraw) | |
9739 END_MSG_MAP() | |
9740 | |
9741 // message handler | |
9742 LRESULT OnCustomDraw(int idCtrl, LPNMHDR pnmh, BOOL& bHandled) | |
9743 { | |
9744 T* pT = static_cast<T*>(this); | |
9745 pT->SetMsgHandled(TRUE); | |
9746 LPNMCUSTOMDRAW lpNMCustomDraw = (LPNMCUSTOMDRAW)pnmh; | |
9747 DWORD dwRet = 0; | |
9748 switch(lpNMCustomDraw->dwDrawStage) | |
9749 { | |
9750 case CDDS_PREPAINT: | |
9751 dwRet = pT->OnPrePaint(idCtrl, lpNMCustomDraw); | |
9752 break; | |
9753 case CDDS_POSTPAINT: | |
9754 dwRet = pT->OnPostPaint(idCtrl, lpNMCustomDraw); | |
9755 break; | |
9756 case CDDS_PREERASE: | |
9757 dwRet = pT->OnPreErase(idCtrl, lpNMCustomDraw); | |
9758 break; | |
9759 case CDDS_POSTERASE: | |
9760 dwRet = pT->OnPostErase(idCtrl, lpNMCustomDraw); | |
9761 break; | |
9762 case CDDS_ITEMPREPAINT: | |
9763 dwRet = pT->OnItemPrePaint(idCtrl, lpNMCustomDraw); | |
9764 break; | |
9765 case CDDS_ITEMPOSTPAINT: | |
9766 dwRet = pT->OnItemPostPaint(idCtrl, lpNMCustomDraw); | |
9767 break; | |
9768 case CDDS_ITEMPREERASE: | |
9769 dwRet = pT->OnItemPreErase(idCtrl, lpNMCustomDraw); | |
9770 break; | |
9771 case CDDS_ITEMPOSTERASE: | |
9772 dwRet = pT->OnItemPostErase(idCtrl, lpNMCustomDraw); | |
9773 break; | |
9774 #if (_WIN32_IE >= 0x0400) | |
9775 case (CDDS_ITEMPREPAINT | CDDS_SUBITEM): | |
9776 dwRet = pT->OnSubItemPrePaint(idCtrl, lpNMCustomDraw); | |
9777 break; | |
9778 #endif // (_WIN32_IE >= 0x0400) | |
9779 default: | |
9780 pT->SetMsgHandled(FALSE); | |
9781 break; | |
9782 } | |
9783 bHandled = pT->IsMsgHandled(); | |
9784 return dwRet; | |
9785 } | |
9786 | |
9787 // Overrideables | |
9788 DWORD OnPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/) | |
9789 { | |
9790 return CDRF_DODEFAULT; | |
9791 } | |
9792 | |
9793 DWORD OnPostPaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/) | |
9794 { | |
9795 return CDRF_DODEFAULT; | |
9796 } | |
9797 | |
9798 DWORD OnPreErase(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/) | |
9799 { | |
9800 return CDRF_DODEFAULT; | |
9801 } | |
9802 | |
9803 DWORD OnPostErase(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/) | |
9804 { | |
9805 return CDRF_DODEFAULT; | |
9806 } | |
9807 | |
9808 DWORD OnItemPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/) | |
9809 { | |
9810 return CDRF_DODEFAULT; | |
9811 } | |
9812 | |
9813 DWORD OnItemPostPaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/) | |
9814 { | |
9815 return CDRF_DODEFAULT; | |
9816 } | |
9817 | |
9818 DWORD OnItemPreErase(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/) | |
9819 { | |
9820 return CDRF_DODEFAULT; | |
9821 } | |
9822 | |
9823 DWORD OnItemPostErase(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/) | |
9824 { | |
9825 return CDRF_DODEFAULT; | |
9826 } | |
9827 | |
9828 #if (_WIN32_IE >= 0x0400) | |
9829 DWORD OnSubItemPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*
/) | |
9830 { | |
9831 return CDRF_DODEFAULT; | |
9832 } | |
9833 #endif // (_WIN32_IE >= 0x0400) | |
9834 }; | |
9835 | |
9836 | |
9837 // --- Windows CE common controls --- | |
9838 | |
9839 #ifdef _WIN32_WCE | |
9840 | |
9841 /////////////////////////////////////////////////////////////////////////////// | |
9842 // CCECommandBarCtrl | |
9843 | |
9844 template <class TBase> | |
9845 class CCECommandBarCtrlT : public TBase | |
9846 { | |
9847 public: | |
9848 // Constructors | |
9849 CCECommandBarCtrlT(HWND hWnd = NULL) : TBase(hWnd) { } | |
9850 | |
9851 CCECommandBarCtrlT< TBase >& operator=(HWND hWnd) | |
9852 { | |
9853 m_hWnd = hWnd; | |
9854 return *this; | |
9855 } | |
9856 | |
9857 // Attributes | |
9858 BOOL IsVisible() const | |
9859 { | |
9860 return IsWindowVisible(); | |
9861 } | |
9862 | |
9863 int GetHeight() const | |
9864 { | |
9865 ATLASSERT(::IsWindow(m_hWnd)); | |
9866 return ::CommandBar_Height(m_hWnd); | |
9867 } | |
9868 | |
9869 HMENU GetMenu(WORD wButton) const | |
9870 { | |
9871 ATLASSERT(::IsWindow(m_hWnd)); | |
9872 return ::CommandBar_GetMenu(m_hWnd, wButton); | |
9873 } | |
9874 | |
9875 // Operations | |
9876 HWND Create(HWND hWndParent, int nCmdBarID) | |
9877 { | |
9878 m_hWnd = ::CommandBar_Create(ModuleHelper::GetModuleInstance(),
hWndParent, nCmdBarID); | |
9879 ATLASSERT(::IsWindow(m_hWnd)); | |
9880 return m_hWnd; | |
9881 } | |
9882 | |
9883 void Destroy() | |
9884 { | |
9885 DestroyWindow(); | |
9886 } | |
9887 | |
9888 BOOL Show(BOOL bShow = TRUE) | |
9889 { | |
9890 ATLASSERT(::IsWindow(m_hWnd)); | |
9891 return ::CommandBar_Show(m_hWnd, bShow); | |
9892 } | |
9893 | |
9894 BOOL DrawMenuBar(WORD wButton) | |
9895 { | |
9896 ATLASSERT(::IsWindow(m_hWnd)); | |
9897 return ::CommandBar_DrawMenuBar(m_hWnd, wButton); | |
9898 } | |
9899 | |
9900 BOOL AddAdornments(DWORD dwFlags = 0) | |
9901 { | |
9902 ATLASSERT(::IsWindow(m_hWnd)); | |
9903 return ::CommandBar_AddAdornments(m_hWnd, dwFlags, 0); | |
9904 } | |
9905 | |
9906 int AddBitmap(int nBitmapID, int nNumImages) | |
9907 { | |
9908 ATLASSERT(::IsWindow(m_hWnd)); | |
9909 return ::CommandBar_AddBitmap(m_hWnd, ModuleHelper::GetResourceI
nstance(), nBitmapID, nNumImages, 16, 16); | |
9910 } | |
9911 | |
9912 BOOL AddButtons(UINT uNumButtons, LPTBBUTTON lpButtons) | |
9913 { | |
9914 ATLASSERT(::IsWindow(m_hWnd)); | |
9915 return CommandBar_AddButtons(m_hWnd, uNumButtons, lpButtons); | |
9916 } | |
9917 | |
9918 BOOL AddToolTips(UINT uNumToolTips, LPTSTR lpToolTips) | |
9919 { | |
9920 ATLASSERT(::IsWindow(m_hWnd)); | |
9921 return CommandBar_AddToolTips(m_hWnd, uNumToolTips, lpToolTips); | |
9922 } | |
9923 | |
9924 BOOL InsertButton(int nButton, LPTBBUTTON lpButton) | |
9925 { | |
9926 ATLASSERT(::IsWindow(m_hWnd)); | |
9927 return CommandBar_InsertButton(m_hWnd, nButton, lpButton); | |
9928 } | |
9929 | |
9930 HWND InsertComboBox(int nWidth, UINT dwStyle, WORD wComboBoxID, WORD wBu
tton) | |
9931 { | |
9932 ATLASSERT(::IsWindow(m_hWnd)); | |
9933 return ::CommandBar_InsertComboBox(m_hWnd, ModuleHelper::GetModu
leInstance(), nWidth, dwStyle, wComboBoxID, wButton); | |
9934 } | |
9935 | |
9936 BOOL InsertMenubar(WORD wMenuID, WORD wButton) | |
9937 { | |
9938 ATLASSERT(::IsWindow(m_hWnd)); | |
9939 return ::CommandBar_InsertMenubar(m_hWnd, ModuleHelper::GetResou
rceInstance(), wMenuID, wButton); | |
9940 } | |
9941 | |
9942 BOOL InsertMenubarEx(ATL::_U_STRINGorID menu, WORD wButton) | |
9943 { | |
9944 ATLASSERT(::IsWindow(m_hWnd)); | |
9945 return ::CommandBar_InsertMenubarEx(m_hWnd, ModuleHelper::GetRes
ourceInstance(), (LPTSTR)menu.m_lpstr, wButton); | |
9946 } | |
9947 | |
9948 BOOL IsCommandBarMessage(LPMSG lpMsg) | |
9949 { | |
9950 ATLASSERT(::IsWindow(m_hWnd)); | |
9951 return ::IsCommandBarMessage(m_hWnd, lpMsg); | |
9952 } | |
9953 }; | |
9954 | |
9955 #if defined(_AYGSHELL_H_) || defined(__AYGSHELL_H__) // PPC MenuBar | |
9956 typedef CCECommandBarCtrlT<CToolBarCtrl> CMenuBarCtrl; | |
9957 #else | |
9958 typedef CCECommandBarCtrlT<CToolBarCtrl> CCECommandBarCtrl; | |
9959 #endif // defined(_AYGSHELL_H_) || defined(__AYGSHELL_H__) | |
9960 | |
9961 /////////////////////////////////////////////////////////////////////////////// | |
9962 // CCECommandBandsCtrl | |
9963 | |
9964 template <class TBase> | |
9965 class CCECommandBandsCtrlT : public TBase | |
9966 { | |
9967 public: | |
9968 // Constructors | |
9969 CCECommandBandsCtrlT(HWND hWnd = NULL) : TBase(hWnd) { } | |
9970 | |
9971 CCECommandBandsCtrlT< TBase >& operator=(HWND hWnd) | |
9972 { | |
9973 m_hWnd = hWnd; | |
9974 return *this; | |
9975 } | |
9976 | |
9977 // Attributes | |
9978 BOOL IsVisible() const | |
9979 { | |
9980 return IsWindowVisible(); | |
9981 } | |
9982 | |
9983 #if (_WIN32_IE >= 0x0400) | |
9984 UINT GetHeight() const | |
9985 { | |
9986 ATLASSERT(::IsWindow(m_hWnd)); | |
9987 return CommandBands_Height(m_hWnd); | |
9988 } | |
9989 #endif // (_WIN32_IE >= 0x0400) | |
9990 | |
9991 HWND GetCommandBar(UINT uBand) const | |
9992 { | |
9993 ATLASSERT(::IsWindow(m_hWnd)); | |
9994 return ::CommandBands_GetCommandBar(m_hWnd, uBand); | |
9995 } | |
9996 | |
9997 BOOL GetRestoreInformation(UINT uBand, LPCOMMANDBANDSRESTOREINFO pcbr) c
onst | |
9998 { | |
9999 ATLASSERT(::IsWindow(m_hWnd)); | |
10000 return ::CommandBands_GetRestoreInformation(m_hWnd, uBand, pcbr)
; | |
10001 } | |
10002 | |
10003 // Operations | |
10004 HWND Create(HWND hWndParent, UINT wID, DWORD dwStyles, HIMAGELIST hImage
List = NULL) | |
10005 { | |
10006 m_hWnd = ::CommandBands_Create(ModuleHelper::GetModuleInstance()
, hWndParent, wID, dwStyles, hImageList); | |
10007 ATLASSERT(::IsWindow(m_hWnd)); | |
10008 return m_hWnd; | |
10009 } | |
10010 | |
10011 BOOL AddAdornments(DWORD dwFlags = 0, LPREBARBANDINFO prbbi = NULL) | |
10012 { | |
10013 ATLASSERT(::IsWindow(m_hWnd)); | |
10014 return ::CommandBands_AddAdornments(m_hWnd, ModuleHelper::GetMod
uleInstance(), dwFlags, prbbi); | |
10015 } | |
10016 | |
10017 BOOL AddBands(UINT uBandCount, LPREBARBANDINFO prbbi) | |
10018 { | |
10019 ATLASSERT(::IsWindow(m_hWnd)); | |
10020 return ::CommandBands_AddBands(m_hWnd, ModuleHelper::GetModuleIn
stance(), uBandCount, prbbi); | |
10021 } | |
10022 | |
10023 BOOL Show(BOOL bShow = TRUE) | |
10024 { | |
10025 ATLASSERT(::IsWindow(m_hWnd)); | |
10026 return ::CommandBands_Show(m_hWnd, bShow); | |
10027 } | |
10028 }; | |
10029 | |
10030 typedef CCECommandBandsCtrlT<ATL::CWindow> CCECommandBandsCtrl; | |
10031 | |
10032 #endif // _WIN32_WCE | |
10033 | |
10034 }; // namespace WTL | |
10035 | |
10036 #endif // __ATLCTRLS_H__ | |
OLD | NEW |