1 // Windows Template Library - WTL version 8.0
\r
2 // Copyright (C) Microsoft Corporation. All rights reserved.
\r
4 // This file is a part of the Windows Template Library.
\r
5 // The use and distribution terms for this software are covered by the
\r
6 // Common Public License 1.0 (http://opensource.org/osi3.0/licenses/cpl1.0.php)
\r
7 // which can be found in the file CPL.TXT at the root of this distribution.
\r
8 // By using this software in any fashion, you are agreeing to be bound by
\r
9 // the terms of this license. You must not remove this notice, or
\r
10 // any other, from this software.
\r
12 #ifndef __ATLCTRLS_H__
\r
13 #define __ATLCTRLS_H__
\r
18 #error ATL requires C++ compilation (use a .cpp suffix)
\r
21 #ifndef __ATLAPP_H__
\r
22 #error atlctrls.h requires atlapp.h to be included first
\r
25 #ifndef __ATLWIN_H__
\r
26 #error atlctrls.h requires atlwin.h to be included first
\r
29 #if (_WIN32_IE < 0x0300)
\r
30 #error atlctrls.h requires IE Version 3.0 or higher
\r
34 #include <richedit.h>
\r
35 #include <richole.h>
\r
36 #elif defined(WIN32_PLATFORM_WFSP) && !defined(_WINUSERM_H_)
\r
37 #include <winuserm.h>
\r
38 #endif // !_WIN32_WCE
\r
40 // protect template members from windowsx.h macros
\r
41 #ifdef _INC_WINDOWSX
\r
42 #undef GetNextSibling
\r
43 #undef GetPrevSibling
\r
44 #endif // _INC_WINDOWSX
\r
47 ///////////////////////////////////////////////////////////////////////////////
\r
48 // Classes in this file:
\r
50 // CStaticT<TBase> - CStatic
\r
51 // CButtonT<TBase> - CButton
\r
52 // CListBoxT<TBase> - CListBox
\r
53 // CComboBoxT<TBase> - CComboBox
\r
54 // CEditT<TBase> - CEdit
\r
56 // CScrollBarT<TBase> - CScrollBar
\r
59 // CListViewCtrlT<TBase> - CListViewCtrl
\r
60 // CTreeViewCtrlT<TBase> - CTreeViewCtrl
\r
61 // CTreeItemT<TBase> - CTreeItem
\r
62 // CTreeViewCtrlExT<TBase> - CTreeViewCtrlEx
\r
63 // CHeaderCtrlT<TBase> - CHeaderCtrl
\r
64 // CToolBarCtrlT<TBase> - CToolBarCtrl
\r
65 // CStatusBarCtrlT<TBase> - CStatusBarCtrl
\r
66 // CTabCtrlT<TBase> - CTabCtrl
\r
68 // CToolTipCtrlT<TBase> - CToolTipCtrl
\r
69 // CTrackBarCtrlT<TBase> - CTrackBarCtrl
\r
70 // CUpDownCtrlT<TBase> - CUpDownCtrl
\r
71 // CProgressBarCtrlT<TBase> - CProgressBarCtrl
\r
72 // CHotKeyCtrlT<TBase> - CHotKeyCtrl
\r
73 // CAnimateCtrlT<TBase> - CAnimateCtrl
\r
74 // CRichEditCtrlT<TBase> - CRichEditCtrl
\r
75 // CRichEditCommands<T>
\r
76 // CDragListBoxT<TBase> - CDragListBox
\r
77 // CDragListNotifyImpl<T>
\r
78 // CReBarCtrlT<TBase> - CReBarCtrl
\r
79 // CComboBoxExT<TBase> - CComboBoxEx
\r
80 // CDateTimePickerCtrlT<TBase> - CDateTimePickerCtrl
\r
81 // CMonthCalendarCtrlT<TBase> - CMonthCalendarCtrl
\r
82 // CFlatScrollBarImpl<T>
\r
83 // CFlatScrollBarT<TBase> - CFlatScrollBar
\r
84 // CIPAddressCtrlT<TBase> - CIPAddressCtrl
\r
85 // CPagerCtrlT<TBase> - CPagerCtrl
\r
86 // CLinkCtrlT<TBase> - CLinkCtrl
\r
90 // CCECommandBarCtrlT<TBase> - CCECommandBarCtrl
\r
91 // CCECommandBandsCtrlT<TBase> - CCECommandBandsCtrl
\r
97 // These are wrapper classes for Windows standard and common controls.
\r
98 // To implement a window based on a control, use following:
\r
99 // Example: Implementing a window based on a list box
\r
101 // class CMyListBox : CWindowImpl<CMyListBox, CListBox>
\r
104 // BEGIN_MSG_MAP(CMyListBox)
\r
105 // // put your message handler entries here
\r
111 // --- Standard Windows controls ---
\r
113 ///////////////////////////////////////////////////////////////////////////////
\r
114 // CStatic - client side for a Windows STATIC control
\r
116 template <class TBase>
\r
117 class CStaticT : public TBase
\r
121 CStaticT(HWND hWnd = NULL) : TBase(hWnd)
\r
124 CStaticT< TBase >& operator =(HWND hWnd)
\r
130 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
131 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
132 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
134 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
138 static LPCTSTR GetWndClassName()
\r
140 return _T("STATIC");
\r
144 HICON GetIcon() const
\r
146 ATLASSERT(::IsWindow(m_hWnd));
\r
147 return (HICON)::SendMessage(m_hWnd, STM_GETICON, 0, 0L);
\r
150 HICON SetIcon(HICON hIcon)
\r
152 ATLASSERT(::IsWindow(m_hWnd));
\r
153 return (HICON)::SendMessage(m_hWnd, STM_SETICON, (WPARAM)hIcon, 0L);
\r
156 HENHMETAFILE GetEnhMetaFile() const
\r
158 ATLASSERT(::IsWindow(m_hWnd));
\r
159 return (HENHMETAFILE)::SendMessage(m_hWnd, STM_GETIMAGE, IMAGE_ENHMETAFILE, 0L);
\r
162 HENHMETAFILE SetEnhMetaFile(HENHMETAFILE hMetaFile)
\r
164 ATLASSERT(::IsWindow(m_hWnd));
\r
165 return (HENHMETAFILE)::SendMessage(m_hWnd, STM_SETIMAGE, IMAGE_ENHMETAFILE, (LPARAM)hMetaFile);
\r
167 #else // CE specific
\r
168 HICON GetIcon() const
\r
170 ATLASSERT(::IsWindow(m_hWnd));
\r
171 return (HICON)::SendMessage(m_hWnd, STM_GETIMAGE, IMAGE_ICON, 0L);
\r
174 HICON SetIcon(HICON hIcon)
\r
176 ATLASSERT(::IsWindow(m_hWnd));
\r
177 return (HICON)::SendMessage(m_hWnd, STM_SETIMAGE, IMAGE_ICON, (LPARAM)hIcon);
\r
179 #endif // _WIN32_WCE
\r
181 CBitmapHandle GetBitmap() const
\r
183 ATLASSERT(::IsWindow(m_hWnd));
\r
184 return CBitmapHandle((HBITMAP)::SendMessage(m_hWnd, STM_GETIMAGE, IMAGE_BITMAP, 0L));
\r
187 CBitmapHandle SetBitmap(HBITMAP hBitmap)
\r
189 ATLASSERT(::IsWindow(m_hWnd));
\r
190 return CBitmapHandle((HBITMAP)::SendMessage(m_hWnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap));
\r
193 HCURSOR GetCursor() const
\r
195 ATLASSERT(::IsWindow(m_hWnd));
\r
196 return (HCURSOR)::SendMessage(m_hWnd, STM_GETIMAGE, IMAGE_CURSOR, 0L);
\r
199 HCURSOR SetCursor(HCURSOR hCursor)
\r
201 ATLASSERT(::IsWindow(m_hWnd));
\r
202 return (HCURSOR)::SendMessage(m_hWnd, STM_SETIMAGE, IMAGE_CURSOR, (LPARAM)hCursor);
\r
206 typedef CStaticT<ATL::CWindow> CStatic;
\r
209 ///////////////////////////////////////////////////////////////////////////////
\r
210 // CButton - client side for a Windows BUTTON control
\r
212 template <class TBase>
\r
213 class CButtonT : public TBase
\r
217 CButtonT(HWND hWnd = NULL) : TBase(hWnd)
\r
220 CButtonT< TBase >& operator =(HWND hWnd)
\r
226 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
227 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
228 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
230 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
234 static LPCTSTR GetWndClassName()
\r
236 return _T("BUTTON");
\r
239 UINT GetState() const
\r
241 ATLASSERT(::IsWindow(m_hWnd));
\r
242 return (UINT)::SendMessage(m_hWnd, BM_GETSTATE, 0, 0L);
\r
245 void SetState(BOOL bHighlight)
\r
247 ATLASSERT(::IsWindow(m_hWnd));
\r
248 ::SendMessage(m_hWnd, BM_SETSTATE, bHighlight, 0L);
\r
251 int GetCheck() const
\r
253 ATLASSERT(::IsWindow(m_hWnd));
\r
254 return (int)::SendMessage(m_hWnd, BM_GETCHECK, 0, 0L);
\r
257 void SetCheck(int nCheck)
\r
259 ATLASSERT(::IsWindow(m_hWnd));
\r
260 ::SendMessage(m_hWnd, BM_SETCHECK, nCheck, 0L);
\r
263 UINT GetButtonStyle() const
\r
265 ATLASSERT(::IsWindow(m_hWnd));
\r
266 return (UINT)::GetWindowLong(m_hWnd, GWL_STYLE) & 0xFFFF;
\r
269 void SetButtonStyle(UINT nStyle, BOOL bRedraw = TRUE)
\r
271 ATLASSERT(::IsWindow(m_hWnd));
\r
272 ::SendMessage(m_hWnd, BM_SETSTYLE, nStyle, (LPARAM)bRedraw);
\r
276 HICON GetIcon() const
\r
278 ATLASSERT(::IsWindow(m_hWnd));
\r
279 return (HICON)::SendMessage(m_hWnd, BM_GETIMAGE, IMAGE_ICON, 0L);
\r
282 HICON SetIcon(HICON hIcon)
\r
284 ATLASSERT(::IsWindow(m_hWnd));
\r
285 return (HICON)::SendMessage(m_hWnd, BM_SETIMAGE, IMAGE_ICON, (LPARAM)hIcon);
\r
288 CBitmapHandle GetBitmap() const
\r
290 ATLASSERT(::IsWindow(m_hWnd));
\r
291 return CBitmapHandle((HBITMAP)::SendMessage(m_hWnd, BM_GETIMAGE, IMAGE_BITMAP, 0L));
\r
294 CBitmapHandle SetBitmap(HBITMAP hBitmap)
\r
296 ATLASSERT(::IsWindow(m_hWnd));
\r
297 return CBitmapHandle((HBITMAP)::SendMessage(m_hWnd, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap));
\r
299 #endif // !_WIN32_WCE
\r
301 #if (_WIN32_WINNT >= 0x0501)
\r
302 BOOL GetIdealSize(LPSIZE lpSize) const
\r
304 ATLASSERT(::IsWindow(m_hWnd));
\r
305 return (BOOL)::SendMessage(m_hWnd, BCM_GETIDEALSIZE, 0, (LPARAM)lpSize);
\r
308 BOOL GetImageList(PBUTTON_IMAGELIST pButtonImagelist) const
\r
310 ATLASSERT(::IsWindow(m_hWnd));
\r
311 return (BOOL)::SendMessage(m_hWnd, BCM_GETIMAGELIST, 0, (LPARAM)pButtonImagelist);
\r
314 BOOL SetImageList(PBUTTON_IMAGELIST pButtonImagelist)
\r
316 ATLASSERT(::IsWindow(m_hWnd));
\r
317 return (BOOL)::SendMessage(m_hWnd, BCM_SETIMAGELIST, 0, (LPARAM)pButtonImagelist);
\r
320 BOOL GetTextMargin(LPRECT lpRect) const
\r
322 ATLASSERT(::IsWindow(m_hWnd));
\r
323 return (BOOL)::SendMessage(m_hWnd, BCM_GETTEXTMARGIN, 0, (LPARAM)lpRect);
\r
326 BOOL SetTextMargin(LPRECT lpRect)
\r
328 ATLASSERT(::IsWindow(m_hWnd));
\r
329 return (BOOL)::SendMessage(m_hWnd, BCM_SETTEXTMARGIN, 0, (LPARAM)lpRect);
\r
331 #endif // (_WIN32_WINNT >= 0x0501)
\r
333 #if (WINVER >= 0x0600)
\r
334 void SetDontClick(BOOL bDontClick)
\r
336 ATLASSERT(::IsWindow(m_hWnd));
\r
337 ::SendMessage(m_hWnd, BM_SETDONTCLICK, (WPARAM)bDontClick, 0L);
\r
339 #endif // (WINVER >= 0x0600)
\r
341 #if (_WIN32_WINNT >= 0x0600)
\r
342 BOOL SetDropDownState(BOOL bDropDown)
\r
344 ATLASSERT(::IsWindow(m_hWnd));
\r
345 ATLASSERT((GetStyle() & (BS_SPLITBUTTON | BS_DEFSPLITBUTTON)) != 0);
\r
346 return (BOOL)::SendMessage(m_hWnd, BCM_SETDROPDOWNSTATE, (WPARAM)bDropDown, 0L);
\r
349 BOOL GetSplitInfo(PBUTTON_SPLITINFO pSplitInfo) const
\r
351 ATLASSERT(::IsWindow(m_hWnd));
\r
352 ATLASSERT((GetStyle() & (BS_SPLITBUTTON | BS_DEFSPLITBUTTON)) != 0);
\r
353 return (BOOL)::SendMessage(m_hWnd, BCM_GETSPLITINFO, 0, (LPARAM)pSplitInfo);
\r
356 BOOL SetSplitInfo(PBUTTON_SPLITINFO pSplitInfo)
\r
358 ATLASSERT(::IsWindow(m_hWnd));
\r
359 ATLASSERT((GetStyle() & (BS_SPLITBUTTON | BS_DEFSPLITBUTTON)) != 0);
\r
360 return (BOOL)::SendMessage(m_hWnd, BCM_SETSPLITINFO, 0, (LPARAM)pSplitInfo);
\r
363 int GetNoteLength() const
\r
365 ATLASSERT(::IsWindow(m_hWnd));
\r
366 ATLASSERT((GetStyle() & (BS_COMMANDLINK | BS_DEFCOMMANDLINK)) != 0);
\r
367 return (int)::SendMessage(m_hWnd, BCM_GETNOTELENGTH, 0, 0L);
\r
370 BOOL GetNote(LPWSTR lpstrNoteText, int cchNoteText) const
\r
372 ATLASSERT(::IsWindow(m_hWnd));
\r
373 ATLASSERT((GetStyle() & (BS_COMMANDLINK | BS_DEFCOMMANDLINK)) != 0);
\r
374 return (BOOL)::SendMessage(m_hWnd, BCM_GETNOTE, cchNoteText, (LPARAM)lpstrNoteText);
\r
377 BOOL SetNote(LPCWSTR lpstrNoteText)
\r
379 ATLASSERT(::IsWindow(m_hWnd));
\r
380 ATLASSERT((GetStyle() & (BS_COMMANDLINK | BS_DEFCOMMANDLINK)) != 0);
\r
381 return (BOOL)::SendMessage(m_hWnd, BCM_SETNOTE, 0, (LPARAM)lpstrNoteText);
\r
384 LRESULT SetElevationRequiredState(BOOL bSet)
\r
386 ATLASSERT(::IsWindow(m_hWnd));
\r
387 return ::SendMessage(m_hWnd, BCM_SETSHIELD, 0, (LPARAM)bSet);
\r
389 #endif // (_WIN32_WINNT >= 0x0600)
\r
394 ATLASSERT(::IsWindow(m_hWnd));
\r
395 ::SendMessage(m_hWnd, BM_CLICK, 0, 0L);
\r
399 typedef CButtonT<ATL::CWindow> CButton;
\r
402 ///////////////////////////////////////////////////////////////////////////////
\r
403 // CListBox - client side for a Windows LISTBOX control
\r
405 template <class TBase>
\r
406 class CListBoxT : public TBase
\r
410 CListBoxT(HWND hWnd = NULL) : TBase(hWnd)
\r
413 CListBoxT< TBase >& operator =(HWND hWnd)
\r
419 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
420 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
421 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
423 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
427 static LPCTSTR GetWndClassName()
\r
429 return _T("LISTBOX");
\r
432 // for entire listbox
\r
433 int GetCount() const
\r
435 ATLASSERT(::IsWindow(m_hWnd));
\r
436 return (int)::SendMessage(m_hWnd, LB_GETCOUNT, 0, 0L);
\r
440 int SetCount(int cItems)
\r
442 ATLASSERT(::IsWindow(m_hWnd));
\r
443 ATLASSERT(((GetStyle() & LBS_NODATA) != 0) && ((GetStyle() & LBS_HASSTRINGS) == 0));
\r
444 return (int)::SendMessage(m_hWnd, LB_SETCOUNT, cItems, 0L);
\r
446 #endif // !_WIN32_WCE
\r
448 int GetHorizontalExtent() const
\r
450 ATLASSERT(::IsWindow(m_hWnd));
\r
451 return (int)::SendMessage(m_hWnd, LB_GETHORIZONTALEXTENT, 0, 0L);
\r
454 void SetHorizontalExtent(int cxExtent)
\r
456 ATLASSERT(::IsWindow(m_hWnd));
\r
457 ::SendMessage(m_hWnd, LB_SETHORIZONTALEXTENT, cxExtent, 0L);
\r
460 int GetTopIndex() const
\r
462 ATLASSERT(::IsWindow(m_hWnd));
\r
463 return (int)::SendMessage(m_hWnd, LB_GETTOPINDEX, 0, 0L);
\r
466 int SetTopIndex(int nIndex)
\r
468 ATLASSERT(::IsWindow(m_hWnd));
\r
469 return (int)::SendMessage(m_hWnd, LB_SETTOPINDEX, nIndex, 0L);
\r
472 LCID GetLocale() const
\r
474 ATLASSERT(::IsWindow(m_hWnd));
\r
475 return (LCID)::SendMessage(m_hWnd, LB_GETLOCALE, 0, 0L);
\r
478 LCID SetLocale(LCID nNewLocale)
\r
480 ATLASSERT(::IsWindow(m_hWnd));
\r
481 return (LCID)::SendMessage(m_hWnd, LB_SETLOCALE, (WPARAM)nNewLocale, 0L);
\r
484 #if (WINVER >= 0x0500) && !defined(_WIN32_WCE)
\r
485 DWORD GetListBoxInfo() const
\r
487 ATLASSERT(::IsWindow(m_hWnd));
\r
488 #if (_WIN32_WINNT >= 0x0501)
\r
489 return (DWORD)::SendMessage(m_hWnd, LB_GETLISTBOXINFO, 0, 0L);
\r
490 #else // !(_WIN32_WINNT >= 0x0501)
\r
491 return ::GetListBoxInfo(m_hWnd);
\r
492 #endif // !(_WIN32_WINNT >= 0x0501)
\r
494 #endif // (WINVER >= 0x0500) && !defined(_WIN32_WCE)
\r
496 // for single-selection listboxes
\r
497 int GetCurSel() const
\r
499 ATLASSERT(::IsWindow(m_hWnd));
\r
500 ATLASSERT((GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) == 0);
\r
501 return (int)::SendMessage(m_hWnd, LB_GETCURSEL, 0, 0L);
\r
504 int SetCurSel(int nSelect)
\r
506 ATLASSERT(::IsWindow(m_hWnd));
\r
507 ATLASSERT((GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) == 0);
\r
508 return (int)::SendMessage(m_hWnd, LB_SETCURSEL, nSelect, 0L);
\r
511 // for multiple-selection listboxes
\r
512 int GetSel(int nIndex) const // also works for single-selection
\r
514 ATLASSERT(::IsWindow(m_hWnd));
\r
515 return (int)::SendMessage(m_hWnd, LB_GETSEL, nIndex, 0L);
\r
518 int SetSel(int nIndex, BOOL bSelect = TRUE)
\r
520 ATLASSERT(::IsWindow(m_hWnd));
\r
521 ATLASSERT((GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) != 0);
\r
522 return (int)::SendMessage(m_hWnd, LB_SETSEL, bSelect, nIndex);
\r
525 int GetSelCount() const
\r
527 ATLASSERT(::IsWindow(m_hWnd));
\r
528 ATLASSERT((GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) != 0);
\r
529 return (int)::SendMessage(m_hWnd, LB_GETSELCOUNT, 0, 0L);
\r
532 int GetSelItems(int nMaxItems, LPINT rgIndex) const
\r
534 ATLASSERT(::IsWindow(m_hWnd));
\r
535 ATLASSERT((GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) != 0);
\r
536 return (int)::SendMessage(m_hWnd, LB_GETSELITEMS, nMaxItems, (LPARAM)rgIndex);
\r
539 int GetAnchorIndex() const
\r
541 ATLASSERT(::IsWindow(m_hWnd));
\r
542 ATLASSERT((GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) != 0);
\r
543 return (int)::SendMessage(m_hWnd, LB_GETANCHORINDEX, 0, 0L);
\r
546 void SetAnchorIndex(int nIndex)
\r
548 ATLASSERT(::IsWindow(m_hWnd));
\r
549 ATLASSERT((GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) != 0);
\r
550 ::SendMessage(m_hWnd, LB_SETANCHORINDEX, nIndex, 0L);
\r
553 int GetCaretIndex() const
\r
555 ATLASSERT(::IsWindow(m_hWnd));
\r
556 return (int)::SendMessage(m_hWnd, LB_GETCARETINDEX, 0, 0);
\r
559 int SetCaretIndex(int nIndex, BOOL bScroll = TRUE)
\r
561 ATLASSERT(::IsWindow(m_hWnd));
\r
562 return (int)::SendMessage(m_hWnd, LB_SETCARETINDEX, nIndex, MAKELONG(bScroll, 0));
\r
565 // for listbox items
\r
566 DWORD_PTR GetItemData(int nIndex) const
\r
568 ATLASSERT(::IsWindow(m_hWnd));
\r
569 return (DWORD_PTR)::SendMessage(m_hWnd, LB_GETITEMDATA, nIndex, 0L);
\r
572 int SetItemData(int nIndex, DWORD_PTR dwItemData)
\r
574 ATLASSERT(::IsWindow(m_hWnd));
\r
575 return (int)::SendMessage(m_hWnd, LB_SETITEMDATA, nIndex, (LPARAM)dwItemData);
\r
578 void* GetItemDataPtr(int nIndex) const
\r
580 ATLASSERT(::IsWindow(m_hWnd));
\r
581 return (void*)::SendMessage(m_hWnd, LB_GETITEMDATA, nIndex, 0L);
\r
584 int SetItemDataPtr(int nIndex, void* pData)
\r
586 ATLASSERT(::IsWindow(m_hWnd));
\r
587 return SetItemData(nIndex, (DWORD_PTR)pData);
\r
590 int GetItemRect(int nIndex, LPRECT lpRect) const
\r
592 ATLASSERT(::IsWindow(m_hWnd));
\r
593 return (int)::SendMessage(m_hWnd, LB_GETITEMRECT, nIndex, (LPARAM)lpRect);
\r
596 int GetText(int nIndex, LPTSTR lpszBuffer) const
\r
598 ATLASSERT(::IsWindow(m_hWnd));
\r
599 return (int)::SendMessage(m_hWnd, LB_GETTEXT, nIndex, (LPARAM)lpszBuffer);
\r
602 #ifndef _ATL_NO_COM
\r
604 BOOL GetTextBSTR(int nIndex, BSTR& bstrText) const
\r
607 ATLASSERT(::IsWindow(m_hWnd));
\r
608 ATLASSERT(bstrText == NULL);
\r
610 int nLen = GetTextLen(nIndex);
\r
614 CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff;
\r
615 LPTSTR lpstrText = buff.Allocate(nLen + 1);
\r
616 if(lpstrText == NULL)
\r
619 if(GetText(nIndex, lpstrText) == LB_ERR)
\r
622 bstrText = ::SysAllocString(T2OLE(lpstrText));
\r
623 return (bstrText != NULL) ? TRUE : FALSE;
\r
625 #endif // _OLEAUTO_H_
\r
626 #endif // !_ATL_NO_COM
\r
628 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
\r
629 int GetText(int nIndex, _CSTRING_NS::CString& strText) const
\r
631 ATLASSERT(::IsWindow(m_hWnd));
\r
632 int cchLen = GetTextLen(nIndex);
\r
633 if(cchLen == LB_ERR)
\r
636 LPTSTR lpstr = strText.GetBufferSetLength(cchLen);
\r
639 nRet = GetText(nIndex, lpstr);
\r
640 strText.ReleaseBuffer();
\r
644 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
\r
646 int GetTextLen(int nIndex) const
\r
648 ATLASSERT(::IsWindow(m_hWnd));
\r
649 return (int)::SendMessage(m_hWnd, LB_GETTEXTLEN, nIndex, 0L);
\r
652 int GetItemHeight(int nIndex) const
\r
654 ATLASSERT(::IsWindow(m_hWnd));
\r
655 return (int)::SendMessage(m_hWnd, LB_GETITEMHEIGHT, nIndex, 0L);
\r
658 int SetItemHeight(int nIndex, UINT cyItemHeight)
\r
660 ATLASSERT(::IsWindow(m_hWnd));
\r
661 return (int)::SendMessage(m_hWnd, LB_SETITEMHEIGHT, nIndex, MAKELONG(cyItemHeight, 0));
\r
664 // Settable only attributes
\r
665 void SetColumnWidth(int cxWidth)
\r
667 ATLASSERT(::IsWindow(m_hWnd));
\r
668 ::SendMessage(m_hWnd, LB_SETCOLUMNWIDTH, cxWidth, 0L);
\r
671 BOOL SetTabStops(int nTabStops, LPINT rgTabStops)
\r
673 ATLASSERT(::IsWindow(m_hWnd));
\r
674 ATLASSERT((GetStyle() & LBS_USETABSTOPS) != 0);
\r
675 return (BOOL)::SendMessage(m_hWnd, LB_SETTABSTOPS, nTabStops, (LPARAM)rgTabStops);
\r
680 ATLASSERT(::IsWindow(m_hWnd));
\r
681 ATLASSERT((GetStyle() & LBS_USETABSTOPS) != 0);
\r
682 return (BOOL)::SendMessage(m_hWnd, LB_SETTABSTOPS, 0, 0L);
\r
685 BOOL SetTabStops(const int& cxEachStop) // takes an 'int'
\r
687 ATLASSERT(::IsWindow(m_hWnd));
\r
688 ATLASSERT((GetStyle() & LBS_USETABSTOPS) != 0);
\r
689 return (BOOL)::SendMessage(m_hWnd, LB_SETTABSTOPS, 1, (LPARAM)(LPINT)&cxEachStop);
\r
693 int InitStorage(int nItems, UINT nBytes)
\r
695 ATLASSERT(::IsWindow(m_hWnd));
\r
696 return (int)::SendMessage(m_hWnd, LB_INITSTORAGE, (WPARAM)nItems, nBytes);
\r
699 void ResetContent()
\r
701 ATLASSERT(::IsWindow(m_hWnd));
\r
702 ::SendMessage(m_hWnd, LB_RESETCONTENT, 0, 0L);
\r
705 UINT ItemFromPoint(POINT pt, BOOL& bOutside) const
\r
707 ATLASSERT(::IsWindow(m_hWnd));
\r
708 DWORD dw = (DWORD)::SendMessage(m_hWnd, LB_ITEMFROMPOINT, 0, MAKELPARAM(pt.x, pt.y));
\r
709 bOutside = (BOOL)HIWORD(dw);
\r
710 return (UINT)LOWORD(dw);
\r
713 // manipulating listbox items
\r
714 int AddString(LPCTSTR lpszItem)
\r
716 ATLASSERT(::IsWindow(m_hWnd));
\r
717 return (int)::SendMessage(m_hWnd, LB_ADDSTRING, 0, (LPARAM)lpszItem);
\r
720 int DeleteString(UINT nIndex)
\r
722 ATLASSERT(::IsWindow(m_hWnd));
\r
723 return (int)::SendMessage(m_hWnd, LB_DELETESTRING, nIndex, 0L);
\r
726 int InsertString(int nIndex, LPCTSTR lpszItem)
\r
728 ATLASSERT(::IsWindow(m_hWnd));
\r
729 return (int)::SendMessage(m_hWnd, LB_INSERTSTRING, nIndex, (LPARAM)lpszItem);
\r
733 int Dir(UINT attr, LPCTSTR lpszWildCard)
\r
735 ATLASSERT(::IsWindow(m_hWnd));
\r
736 return (int)::SendMessage(m_hWnd, LB_DIR, attr, (LPARAM)lpszWildCard);
\r
739 int AddFile(LPCTSTR lpstrFileName)
\r
741 ATLASSERT(::IsWindow(m_hWnd));
\r
742 return (int)::SendMessage(m_hWnd, LB_ADDFILE, 0, (LPARAM)lpstrFileName);
\r
744 #endif // !_WIN32_WCE
\r
746 // selection helpers
\r
747 int FindString(int nStartAfter, LPCTSTR lpszItem) const
\r
749 ATLASSERT(::IsWindow(m_hWnd));
\r
750 return (int)::SendMessage(m_hWnd, LB_FINDSTRING, nStartAfter, (LPARAM)lpszItem);
\r
753 int FindStringExact(int nIndexStart, LPCTSTR lpszFind) const
\r
755 ATLASSERT(::IsWindow(m_hWnd));
\r
756 return (int)::SendMessage(m_hWnd, LB_FINDSTRINGEXACT, nIndexStart, (LPARAM)lpszFind);
\r
759 int SelectString(int nStartAfter, LPCTSTR lpszItem)
\r
761 ATLASSERT(::IsWindow(m_hWnd));
\r
762 return (int)::SendMessage(m_hWnd, LB_SELECTSTRING, nStartAfter, (LPARAM)lpszItem);
\r
765 int SelItemRange(BOOL bSelect, int nFirstItem, int nLastItem)
\r
767 ATLASSERT(::IsWindow(m_hWnd));
\r
768 ATLASSERT((GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) != 0);
\r
769 ATLASSERT(nFirstItem <= nLastItem);
\r
770 return bSelect ? (int)::SendMessage(m_hWnd, LB_SELITEMRANGEEX, nFirstItem, nLastItem) : (int)::SendMessage(m_hWnd, LB_SELITEMRANGEEX, nLastItem, nFirstItem);
\r
773 #ifdef WIN32_PLATFORM_WFSP // SmartPhone only messages
\r
774 DWORD GetInputMode(BOOL bCurrentMode = TRUE)
\r
776 return SendMessage(LB_GETINPUTMODE, 0, (LPARAM)bCurrentMode);
\r
779 BOOL SetInputMode(DWORD dwMode)
\r
781 return SendMessage(LB_SETINPUTMODE, 0, (LPARAM)dwMode);
\r
783 #endif // WIN32_PLATFORM_WFSP
\r
786 typedef CListBoxT<ATL::CWindow> CListBox;
\r
789 ///////////////////////////////////////////////////////////////////////////////
\r
790 // CComboBox - client side for a Windows COMBOBOX control
\r
792 #ifndef WIN32_PLATFORM_WFSP // No COMBOBOX on SmartPhones
\r
794 template <class TBase>
\r
795 class CComboBoxT : public TBase
\r
799 CComboBoxT(HWND hWnd = NULL) : TBase(hWnd)
\r
802 CComboBoxT< TBase >& operator =(HWND hWnd)
\r
808 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
809 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
810 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
812 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
816 static LPCTSTR GetWndClassName()
\r
818 return _T("COMBOBOX");
\r
821 // for entire combo box
\r
822 int GetCount() const
\r
824 ATLASSERT(::IsWindow(m_hWnd));
\r
825 return (int)::SendMessage(m_hWnd, CB_GETCOUNT, 0, 0L);
\r
828 int GetCurSel() const
\r
830 ATLASSERT(::IsWindow(m_hWnd));
\r
831 return (int)::SendMessage(m_hWnd, CB_GETCURSEL, 0, 0L);
\r
834 int SetCurSel(int nSelect)
\r
836 ATLASSERT(::IsWindow(m_hWnd));
\r
837 return (int)::SendMessage(m_hWnd, CB_SETCURSEL, nSelect, 0L);
\r
840 LCID GetLocale() const
\r
842 ATLASSERT(::IsWindow(m_hWnd));
\r
843 return (LCID)::SendMessage(m_hWnd, CB_GETLOCALE, 0, 0L);
\r
846 LCID SetLocale(LCID nNewLocale)
\r
848 ATLASSERT(::IsWindow(m_hWnd));
\r
849 return (LCID)::SendMessage(m_hWnd, CB_SETLOCALE, (WPARAM)nNewLocale, 0L);
\r
852 int GetTopIndex() const
\r
854 ATLASSERT(::IsWindow(m_hWnd));
\r
855 return (int)::SendMessage(m_hWnd, CB_GETTOPINDEX, 0, 0L);
\r
858 int SetTopIndex(int nIndex)
\r
860 ATLASSERT(::IsWindow(m_hWnd));
\r
861 return (int)::SendMessage(m_hWnd, CB_SETTOPINDEX, nIndex, 0L);
\r
864 UINT GetHorizontalExtent() const
\r
866 ATLASSERT(::IsWindow(m_hWnd));
\r
867 return (UINT)::SendMessage(m_hWnd, CB_GETHORIZONTALEXTENT, 0, 0L);
\r
870 void SetHorizontalExtent(UINT nExtent)
\r
872 ATLASSERT(::IsWindow(m_hWnd));
\r
873 ::SendMessage(m_hWnd, CB_SETHORIZONTALEXTENT, nExtent, 0L);
\r
876 int GetDroppedWidth() const
\r
878 ATLASSERT(::IsWindow(m_hWnd));
\r
879 return (int)::SendMessage(m_hWnd, CB_GETDROPPEDWIDTH, 0, 0L);
\r
882 int SetDroppedWidth(UINT nWidth)
\r
884 ATLASSERT(::IsWindow(m_hWnd));
\r
885 return (int)::SendMessage(m_hWnd, CB_SETDROPPEDWIDTH, nWidth, 0L);
\r
888 #if ((WINVER >= 0x0500) && !defined(_WIN32_WCE)) || (defined(_WIN32_WCE) && (_WIN32_WCE >= 420))
\r
889 BOOL GetComboBoxInfo(PCOMBOBOXINFO pComboBoxInfo) const
\r
891 ATLASSERT(::IsWindow(m_hWnd));
\r
892 #if ((_WIN32_WINNT >= 0x0501) && !defined(_WIN32_WCE)) || (defined(_WIN32_WCE) && (_WIN32_WCE >= 420))
\r
893 return (BOOL)::SendMessage(m_hWnd, CB_GETCOMBOBOXINFO, 0, (LPARAM)pComboBoxInfo);
\r
894 #else // !((_WIN32_WINNT >= 0x0501) && !defined(_WIN32_WCE)) || (defined(_WIN32_WCE) && (_WIN32_WCE >= 420))
\r
895 return ::GetComboBoxInfo(m_hWnd, pComboBoxInfo);
\r
896 #endif // !((_WIN32_WINNT >= 0x0501) && !defined(_WIN32_WCE)) || (defined(_WIN32_WCE) && (_WIN32_WCE >= 420))
\r
898 #endif // ((WINVER >= 0x0500) && !defined(_WIN32_WCE)) || (defined(_WIN32_WCE) && (_WIN32_WCE >= 420))
\r
900 // for edit control
\r
901 DWORD GetEditSel() const
\r
903 ATLASSERT(::IsWindow(m_hWnd));
\r
904 return (DWORD)::SendMessage(m_hWnd, CB_GETEDITSEL, 0, 0L);
\r
907 BOOL SetEditSel(int nStartChar, int nEndChar)
\r
909 ATLASSERT(::IsWindow(m_hWnd));
\r
910 return (BOOL)::SendMessage(m_hWnd, CB_SETEDITSEL, 0, MAKELONG(nStartChar, nEndChar));
\r
913 // for combobox item
\r
914 DWORD_PTR GetItemData(int nIndex) const
\r
916 ATLASSERT(::IsWindow(m_hWnd));
\r
917 return (DWORD_PTR)::SendMessage(m_hWnd, CB_GETITEMDATA, nIndex, 0L);
\r
920 int SetItemData(int nIndex, DWORD_PTR dwItemData)
\r
922 ATLASSERT(::IsWindow(m_hWnd));
\r
923 return (int)::SendMessage(m_hWnd, CB_SETITEMDATA, nIndex, (LPARAM)dwItemData);
\r
926 void* GetItemDataPtr(int nIndex) const
\r
928 ATLASSERT(::IsWindow(m_hWnd));
\r
929 return (void*)GetItemData(nIndex);
\r
932 int SetItemDataPtr(int nIndex, void* pData)
\r
934 ATLASSERT(::IsWindow(m_hWnd));
\r
935 return SetItemData(nIndex, (DWORD_PTR)pData);
\r
938 int GetLBText(int nIndex, LPTSTR lpszText) const
\r
940 ATLASSERT(::IsWindow(m_hWnd));
\r
941 return (int)::SendMessage(m_hWnd, CB_GETLBTEXT, nIndex, (LPARAM)lpszText);
\r
944 #ifndef _ATL_NO_COM
\r
945 BOOL GetLBTextBSTR(int nIndex, BSTR& bstrText) const
\r
948 ATLASSERT(::IsWindow(m_hWnd));
\r
949 ATLASSERT(bstrText == NULL);
\r
951 int nLen = GetLBTextLen(nIndex);
\r
955 CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff;
\r
956 LPTSTR lpstrText = buff.Allocate(nLen + 1);
\r
957 if(lpstrText == NULL)
\r
960 if(GetLBText(nIndex, lpstrText) == CB_ERR)
\r
963 bstrText = ::SysAllocString(T2OLE(lpstrText));
\r
964 return (bstrText != NULL) ? TRUE : FALSE;
\r
966 #endif // !_ATL_NO_COM
\r
968 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
\r
969 int GetLBText(int nIndex, _CSTRING_NS::CString& strText) const
\r
971 ATLASSERT(::IsWindow(m_hWnd));
\r
972 int cchLen = GetLBTextLen(nIndex);
\r
973 if(cchLen == CB_ERR)
\r
976 LPTSTR lpstr = strText.GetBufferSetLength(cchLen);
\r
979 nRet = GetLBText(nIndex, lpstr);
\r
980 strText.ReleaseBuffer();
\r
984 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
\r
986 int GetLBTextLen(int nIndex) const
\r
988 ATLASSERT(::IsWindow(m_hWnd));
\r
989 return (int)::SendMessage(m_hWnd, CB_GETLBTEXTLEN, nIndex, 0L);
\r
992 int GetItemHeight(int nIndex) const
\r
994 ATLASSERT(::IsWindow(m_hWnd));
\r
995 return (int)::SendMessage(m_hWnd, CB_GETITEMHEIGHT, nIndex, 0L);
\r
998 int SetItemHeight(int nIndex, UINT cyItemHeight)
\r
1000 ATLASSERT(::IsWindow(m_hWnd));
\r
1001 return (int)::SendMessage(m_hWnd, CB_SETITEMHEIGHT, nIndex, MAKELONG(cyItemHeight, 0));
\r
1004 BOOL GetExtendedUI() const
\r
1006 ATLASSERT(::IsWindow(m_hWnd));
\r
1007 return (BOOL)::SendMessage(m_hWnd, CB_GETEXTENDEDUI, 0, 0L);
\r
1010 int SetExtendedUI(BOOL bExtended = TRUE)
\r
1012 ATLASSERT(::IsWindow(m_hWnd));
\r
1013 return (int)::SendMessage(m_hWnd, CB_SETEXTENDEDUI, bExtended, 0L);
\r
1016 void GetDroppedControlRect(LPRECT lprect) const
\r
1018 ATLASSERT(::IsWindow(m_hWnd));
\r
1019 ::SendMessage(m_hWnd, CB_GETDROPPEDCONTROLRECT, 0, (LPARAM)lprect);
\r
1022 BOOL GetDroppedState() const
\r
1024 ATLASSERT(::IsWindow(m_hWnd));
\r
1025 return (BOOL)::SendMessage(m_hWnd, CB_GETDROPPEDSTATE, 0, 0L);
\r
1028 #if (_WIN32_WINNT >= 0x0501)
\r
1029 int GetMinVisible() const
\r
1031 ATLASSERT(::IsWindow(m_hWnd));
\r
1032 return (int)::SendMessage(m_hWnd, CB_GETMINVISIBLE, 0, 0L);
\r
1035 BOOL SetMinVisible(int nMinVisible)
\r
1037 ATLASSERT(::IsWindow(m_hWnd));
\r
1038 return (BOOL)::SendMessage(m_hWnd, CB_SETMINVISIBLE, nMinVisible, 0L);
\r
1042 BOOL GetCueBannerText(LPWSTR lpwText, int cchText) const
\r
1044 #ifndef CB_GETCUEBANNER
\r
1045 const UINT CB_GETCUEBANNER = (CBM_FIRST + 4);
\r
1047 ATLASSERT(::IsWindow(m_hWnd));
\r
1048 return (BOOL)::SendMessage(m_hWnd, CB_GETCUEBANNER, (WPARAM)lpwText, cchText);
\r
1052 BOOL SetCueBannerText(LPCWSTR lpcwText)
\r
1054 #ifndef CB_SETCUEBANNER
\r
1055 const UINT CB_SETCUEBANNER = (CBM_FIRST + 3);
\r
1057 ATLASSERT(::IsWindow(m_hWnd));
\r
1058 return (BOOL)::SendMessage(m_hWnd, CB_SETCUEBANNER, 0, (LPARAM)lpcwText);
\r
1060 #endif // (_WIN32_WINNT >= 0x0501)
\r
1063 int InitStorage(int nItems, UINT nBytes)
\r
1065 ATLASSERT(::IsWindow(m_hWnd));
\r
1066 return (int)::SendMessage(m_hWnd, CB_INITSTORAGE, (WPARAM)nItems, nBytes);
\r
1069 void ResetContent()
\r
1071 ATLASSERT(::IsWindow(m_hWnd));
\r
1072 ::SendMessage(m_hWnd, CB_RESETCONTENT, 0, 0L);
\r
1075 // for edit control
\r
1076 BOOL LimitText(int nMaxChars)
\r
1078 ATLASSERT(::IsWindow(m_hWnd));
\r
1079 return (BOOL)::SendMessage(m_hWnd, CB_LIMITTEXT, nMaxChars, 0L);
\r
1082 // for drop-down combo boxes
\r
1083 void ShowDropDown(BOOL bShowIt = TRUE)
\r
1085 ATLASSERT(::IsWindow(m_hWnd));
\r
1086 ::SendMessage(m_hWnd, CB_SHOWDROPDOWN, bShowIt, 0L);
\r
1089 // manipulating listbox items
\r
1090 int AddString(LPCTSTR lpszString)
\r
1092 ATLASSERT(::IsWindow(m_hWnd));
\r
1093 return (int)::SendMessage(m_hWnd, CB_ADDSTRING, 0, (LPARAM)lpszString);
\r
1096 int DeleteString(UINT nIndex)
\r
1098 ATLASSERT(::IsWindow(m_hWnd));
\r
1099 return (int)::SendMessage(m_hWnd, CB_DELETESTRING, nIndex, 0L);
\r
1102 int InsertString(int nIndex, LPCTSTR lpszString)
\r
1104 ATLASSERT(::IsWindow(m_hWnd));
\r
1105 return (int)::SendMessage(m_hWnd, CB_INSERTSTRING, nIndex, (LPARAM)lpszString);
\r
1108 #ifndef _WIN32_WCE
\r
1109 int Dir(UINT attr, LPCTSTR lpszWildCard)
\r
1111 ATLASSERT(::IsWindow(m_hWnd));
\r
1112 return (int)::SendMessage(m_hWnd, CB_DIR, attr, (LPARAM)lpszWildCard);
\r
1114 #endif // !_WIN32_WCE
\r
1116 // selection helpers
\r
1117 int FindString(int nStartAfter, LPCTSTR lpszString) const
\r
1119 ATLASSERT(::IsWindow(m_hWnd));
\r
1120 return (int)::SendMessage(m_hWnd, CB_FINDSTRING, nStartAfter, (LPARAM)lpszString);
\r
1123 int FindStringExact(int nIndexStart, LPCTSTR lpszFind) const
\r
1125 ATLASSERT(::IsWindow(m_hWnd));
\r
1126 return (int)::SendMessage(m_hWnd, CB_FINDSTRINGEXACT, nIndexStart, (LPARAM)lpszFind);
\r
1129 int SelectString(int nStartAfter, LPCTSTR lpszString)
\r
1131 ATLASSERT(::IsWindow(m_hWnd));
\r
1132 return (int)::SendMessage(m_hWnd, CB_SELECTSTRING, nStartAfter, (LPARAM)lpszString);
\r
1135 // Clipboard operations
\r
1138 ATLASSERT(::IsWindow(m_hWnd));
\r
1139 ::SendMessage(m_hWnd, WM_CLEAR, 0, 0L);
\r
1144 ATLASSERT(::IsWindow(m_hWnd));
\r
1145 ::SendMessage(m_hWnd, WM_COPY, 0, 0L);
\r
1150 ATLASSERT(::IsWindow(m_hWnd));
\r
1151 ::SendMessage(m_hWnd, WM_CUT, 0, 0L);
\r
1156 ATLASSERT(::IsWindow(m_hWnd));
\r
1157 ::SendMessage(m_hWnd, WM_PASTE, 0, 0L);
\r
1161 typedef CComboBoxT<ATL::CWindow> CComboBox;
\r
1163 #endif // !WIN32_PLATFORM_WFSP
\r
1165 ///////////////////////////////////////////////////////////////////////////////
\r
1166 // CEdit - client side for a Windows EDIT control
\r
1168 template <class TBase>
\r
1169 class CEditT : public TBase
\r
1173 CEditT(HWND hWnd = NULL) : TBase(hWnd)
\r
1176 CEditT< TBase >& operator =(HWND hWnd)
\r
1182 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
1183 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
1184 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
1186 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
1190 static LPCTSTR GetWndClassName()
\r
1192 return _T("EDIT");
\r
1195 BOOL CanUndo() const
\r
1197 ATLASSERT(::IsWindow(m_hWnd));
\r
1198 return (BOOL)::SendMessage(m_hWnd, EM_CANUNDO, 0, 0L);
\r
1201 int GetLineCount() const
\r
1203 ATLASSERT(::IsWindow(m_hWnd));
\r
1204 return (int)::SendMessage(m_hWnd, EM_GETLINECOUNT, 0, 0L);
\r
1207 BOOL GetModify() const
\r
1209 ATLASSERT(::IsWindow(m_hWnd));
\r
1210 return (BOOL)::SendMessage(m_hWnd, EM_GETMODIFY, 0, 0L);
\r
1213 void SetModify(BOOL bModified = TRUE)
\r
1215 ATLASSERT(::IsWindow(m_hWnd));
\r
1216 ::SendMessage(m_hWnd, EM_SETMODIFY, bModified, 0L);
\r
1219 void GetRect(LPRECT lpRect) const
\r
1221 ATLASSERT(::IsWindow(m_hWnd));
\r
1222 ::SendMessage(m_hWnd, EM_GETRECT, 0, (LPARAM)lpRect);
\r
1225 DWORD GetSel() const
\r
1227 ATLASSERT(::IsWindow(m_hWnd));
\r
1228 return (DWORD)::SendMessage(m_hWnd, EM_GETSEL, 0, 0L);
\r
1231 void GetSel(int& nStartChar, int& nEndChar) const
\r
1233 ATLASSERT(::IsWindow(m_hWnd));
\r
1234 ::SendMessage(m_hWnd, EM_GETSEL, (WPARAM)&nStartChar, (LPARAM)&nEndChar);
\r
1237 #ifndef _WIN32_WCE
\r
1238 HLOCAL GetHandle() const
\r
1240 ATLASSERT(::IsWindow(m_hWnd));
\r
1241 return (HLOCAL)::SendMessage(m_hWnd, EM_GETHANDLE, 0, 0L);
\r
1244 void SetHandle(HLOCAL hBuffer)
\r
1246 ATLASSERT(::IsWindow(m_hWnd));
\r
1247 ::SendMessage(m_hWnd, EM_SETHANDLE, (WPARAM)hBuffer, 0L);
\r
1249 #endif // !_WIN32_WCE
\r
1251 DWORD GetMargins() const
\r
1253 ATLASSERT(::IsWindow(m_hWnd));
\r
1254 return (DWORD)::SendMessage(m_hWnd, EM_GETMARGINS, 0, 0L);
\r
1257 void SetMargins(UINT nLeft, UINT nRight)
\r
1259 ATLASSERT(::IsWindow(m_hWnd));
\r
1260 ::SendMessage(m_hWnd, EM_SETMARGINS, EC_LEFTMARGIN|EC_RIGHTMARGIN, MAKELONG(nLeft, nRight));
\r
1263 UINT GetLimitText() const
\r
1265 ATLASSERT(::IsWindow(m_hWnd));
\r
1266 return (UINT)::SendMessage(m_hWnd, EM_GETLIMITTEXT, 0, 0L);
\r
1269 void SetLimitText(UINT nMax)
\r
1271 ATLASSERT(::IsWindow(m_hWnd));
\r
1272 ::SendMessage(m_hWnd, EM_SETLIMITTEXT, nMax, 0L);
\r
1275 POINT PosFromChar(UINT nChar) const
\r
1277 ATLASSERT(::IsWindow(m_hWnd));
\r
1278 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, EM_POSFROMCHAR, nChar, 0);
\r
1279 POINT point = { GET_X_LPARAM(dwRet), GET_Y_LPARAM(dwRet) };
\r
1283 int CharFromPos(POINT pt, int* pLine = NULL) const
\r
1285 ATLASSERT(::IsWindow(m_hWnd));
\r
1286 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, EM_CHARFROMPOS, 0, MAKELPARAM(pt.x, pt.y));
\r
1288 *pLine = (int)(short)HIWORD(dwRet);
\r
1289 return (int)(short)LOWORD(dwRet);
\r
1292 // NOTE: first word in lpszBuffer must contain the size of the buffer!
\r
1293 int GetLine(int nIndex, LPTSTR lpszBuffer) const
\r
1295 ATLASSERT(::IsWindow(m_hWnd));
\r
1296 return (int)::SendMessage(m_hWnd, EM_GETLINE, nIndex, (LPARAM)lpszBuffer);
\r
1299 int GetLine(int nIndex, LPTSTR lpszBuffer, int nMaxLength) const
\r
1301 ATLASSERT(::IsWindow(m_hWnd));
\r
1302 *(LPWORD)lpszBuffer = (WORD)nMaxLength;
\r
1303 return (int)::SendMessage(m_hWnd, EM_GETLINE, nIndex, (LPARAM)lpszBuffer);
\r
1306 TCHAR GetPasswordChar() const
\r
1308 ATLASSERT(::IsWindow(m_hWnd));
\r
1309 return (TCHAR)::SendMessage(m_hWnd, EM_GETPASSWORDCHAR, 0, 0L);
\r
1312 void SetPasswordChar(TCHAR ch)
\r
1314 ATLASSERT(::IsWindow(m_hWnd));
\r
1315 ::SendMessage(m_hWnd, EM_SETPASSWORDCHAR, ch, 0L);
\r
1318 #ifndef _WIN32_WCE
\r
1319 EDITWORDBREAKPROC GetWordBreakProc() const
\r
1321 ATLASSERT(::IsWindow(m_hWnd));
\r
1322 return (EDITWORDBREAKPROC)::SendMessage(m_hWnd, EM_GETWORDBREAKPROC, 0, 0L);
\r
1325 void SetWordBreakProc(EDITWORDBREAKPROC ewbprc)
\r
1327 ATLASSERT(::IsWindow(m_hWnd));
\r
1328 ::SendMessage(m_hWnd, EM_SETWORDBREAKPROC, 0, (LPARAM)ewbprc);
\r
1330 #endif // !_WIN32_WCE
\r
1332 int GetFirstVisibleLine() const
\r
1334 ATLASSERT(::IsWindow(m_hWnd));
\r
1335 return (int)::SendMessage(m_hWnd, EM_GETFIRSTVISIBLELINE, 0, 0L);
\r
1338 #ifndef _WIN32_WCE
\r
1339 int GetThumb() const
\r
1341 ATLASSERT(::IsWindow(m_hWnd));
\r
1342 ATLASSERT((GetStyle() & ES_MULTILINE) != 0);
\r
1343 return (int)::SendMessage(m_hWnd, EM_GETTHUMB, 0, 0L);
\r
1345 #endif // !_WIN32_WCE
\r
1347 BOOL SetReadOnly(BOOL bReadOnly = TRUE)
\r
1349 ATLASSERT(::IsWindow(m_hWnd));
\r
1350 return (BOOL)::SendMessage(m_hWnd, EM_SETREADONLY, bReadOnly, 0L);
\r
1353 #if (WINVER >= 0x0500) && !defined(_WIN32_WCE)
\r
1354 UINT GetImeStatus(UINT uStatus) const
\r
1356 ATLASSERT(::IsWindow(m_hWnd));
\r
1357 return (UINT)::SendMessage(m_hWnd, EM_GETIMESTATUS, uStatus, 0L);
\r
1360 UINT SetImeStatus(UINT uStatus, UINT uData)
\r
1362 ATLASSERT(::IsWindow(m_hWnd));
\r
1363 return (UINT)::SendMessage(m_hWnd, EM_SETIMESTATUS, uStatus, uData);
\r
1365 #endif // (WINVER >= 0x0500) && !defined(_WIN32_WCE)
\r
1367 #if (_WIN32_WINNT >= 0x0501)
\r
1368 BOOL GetCueBannerText(LPCWSTR lpstrText, int cchText) const
\r
1370 ATLASSERT(::IsWindow(m_hWnd));
\r
1371 return (BOOL)::SendMessage(m_hWnd, EM_GETCUEBANNER, (WPARAM)lpstrText, cchText);
\r
1374 // bKeepWithFocus - Vista only
\r
1375 BOOL SetCueBannerText(LPCWSTR lpstrText, BOOL bKeepWithFocus = FALSE)
\r
1377 ATLASSERT(::IsWindow(m_hWnd));
\r
1378 return (BOOL)::SendMessage(m_hWnd, EM_SETCUEBANNER, (WPARAM)bKeepWithFocus, (LPARAM)(lpstrText));
\r
1380 #endif // (_WIN32_WINNT >= 0x0501)
\r
1383 void EmptyUndoBuffer()
\r
1385 ATLASSERT(::IsWindow(m_hWnd));
\r
1386 ::SendMessage(m_hWnd, EM_EMPTYUNDOBUFFER, 0, 0L);
\r
1389 BOOL FmtLines(BOOL bAddEOL)
\r
1391 ATLASSERT(::IsWindow(m_hWnd));
\r
1392 return (BOOL)::SendMessage(m_hWnd, EM_FMTLINES, bAddEOL, 0L);
\r
1395 void LimitText(int nChars = 0)
\r
1397 ATLASSERT(::IsWindow(m_hWnd));
\r
1398 ::SendMessage(m_hWnd, EM_LIMITTEXT, nChars, 0L);
\r
1401 int LineFromChar(int nIndex = -1) const
\r
1403 ATLASSERT(::IsWindow(m_hWnd));
\r
1404 return (int)::SendMessage(m_hWnd, EM_LINEFROMCHAR, nIndex, 0L);
\r
1407 int LineIndex(int nLine = -1) const
\r
1409 ATLASSERT(::IsWindow(m_hWnd));
\r
1410 return (int)::SendMessage(m_hWnd, EM_LINEINDEX, nLine, 0L);
\r
1413 int LineLength(int nLine = -1) const
\r
1415 ATLASSERT(::IsWindow(m_hWnd));
\r
1416 return (int)::SendMessage(m_hWnd, EM_LINELENGTH, nLine, 0L);
\r
1419 void LineScroll(int nLines, int nChars = 0)
\r
1421 ATLASSERT(::IsWindow(m_hWnd));
\r
1422 ::SendMessage(m_hWnd, EM_LINESCROLL, nChars, nLines);
\r
1425 void ReplaceSel(LPCTSTR lpszNewText, BOOL bCanUndo = FALSE)
\r
1427 ATLASSERT(::IsWindow(m_hWnd));
\r
1428 ::SendMessage(m_hWnd, EM_REPLACESEL, (WPARAM) bCanUndo, (LPARAM)lpszNewText);
\r
1431 void SetRect(LPCRECT lpRect)
\r
1433 ATLASSERT(::IsWindow(m_hWnd));
\r
1434 ::SendMessage(m_hWnd, EM_SETRECT, 0, (LPARAM)lpRect);
\r
1437 void SetRectNP(LPCRECT lpRect)
\r
1439 ATLASSERT(::IsWindow(m_hWnd));
\r
1440 ::SendMessage(m_hWnd, EM_SETRECTNP, 0, (LPARAM)lpRect);
\r
1443 void SetSel(DWORD dwSelection, BOOL bNoScroll = FALSE)
\r
1445 ATLASSERT(::IsWindow(m_hWnd));
\r
1446 ::SendMessage(m_hWnd, EM_SETSEL, LOWORD(dwSelection), HIWORD(dwSelection));
\r
1448 ::SendMessage(m_hWnd, EM_SCROLLCARET, 0, 0L);
\r
1451 void SetSel(int nStartChar, int nEndChar, BOOL bNoScroll = FALSE)
\r
1453 ATLASSERT(::IsWindow(m_hWnd));
\r
1454 ::SendMessage(m_hWnd, EM_SETSEL, nStartChar, nEndChar);
\r
1456 ::SendMessage(m_hWnd, EM_SCROLLCARET, 0, 0L);
\r
1459 void SetSelAll(BOOL bNoScroll = FALSE)
\r
1461 SetSel(0, -1, bNoScroll);
\r
1464 void SetSelNone(BOOL bNoScroll = FALSE)
\r
1466 SetSel(-1, 0, bNoScroll);
\r
1469 BOOL SetTabStops(int nTabStops, LPINT rgTabStops)
\r
1471 ATLASSERT(::IsWindow(m_hWnd));
\r
1472 return (BOOL)::SendMessage(m_hWnd, EM_SETTABSTOPS, nTabStops, (LPARAM)rgTabStops);
\r
1475 BOOL SetTabStops()
\r
1477 ATLASSERT(::IsWindow(m_hWnd));
\r
1478 return (BOOL)::SendMessage(m_hWnd, EM_SETTABSTOPS, 0, 0L);
\r
1481 BOOL SetTabStops(const int& cxEachStop) // takes an 'int'
\r
1483 ATLASSERT(::IsWindow(m_hWnd));
\r
1484 return (BOOL)::SendMessage(m_hWnd, EM_SETTABSTOPS, 1, (LPARAM)(LPINT)&cxEachStop);
\r
1487 void ScrollCaret()
\r
1489 ATLASSERT(::IsWindow(m_hWnd));
\r
1490 ::SendMessage(m_hWnd, EM_SCROLLCARET, 0, 0L);
\r
1493 int Scroll(int nScrollAction)
\r
1495 ATLASSERT(::IsWindow(m_hWnd));
\r
1496 ATLASSERT((GetStyle() & ES_MULTILINE) != 0);
\r
1497 LRESULT lRet = ::SendMessage(m_hWnd, EM_SCROLL, nScrollAction, 0L);
\r
1498 if(!(BOOL)HIWORD(lRet))
\r
1499 return -1; // failed
\r
1500 return (int)(short)LOWORD(lRet);
\r
1504 void InsertText(int nInsertAfterChar, LPCTSTR lpstrText, BOOL bNoScroll = FALSE, BOOL bCanUndo = FALSE)
\r
1506 SetSel(nInsertAfterChar, nInsertAfterChar, bNoScroll);
\r
1507 ReplaceSel(lpstrText, bCanUndo);
\r
1510 void AppendText(LPCTSTR lpstrText, BOOL bNoScroll = FALSE, BOOL bCanUndo = FALSE)
\r
1512 InsertText(GetWindowTextLength(), lpstrText, bNoScroll, bCanUndo);
\r
1515 #if (_WIN32_WINNT >= 0x0501)
\r
1516 BOOL ShowBalloonTip(PEDITBALLOONTIP pEditBaloonTip)
\r
1518 ATLASSERT(::IsWindow(m_hWnd));
\r
1519 return (BOOL)::SendMessage(m_hWnd, EM_SHOWBALLOONTIP, 0, (LPARAM)pEditBaloonTip);
\r
1522 BOOL HideBalloonTip()
\r
1524 ATLASSERT(::IsWindow(m_hWnd));
\r
1525 return (BOOL)::SendMessage(m_hWnd, EM_HIDEBALLOONTIP, 0, 0L);
\r
1527 #endif // (_WIN32_WINNT >= 0x0501)
\r
1529 #if (_WIN32_WINNT >= 0x0600)
\r
1530 DWORD GetHilite() const
\r
1532 ATLASSERT(::IsWindow(m_hWnd));
\r
1533 return (DWORD)::SendMessage(m_hWnd, EM_GETHILITE, 0, 0L);
\r
1536 void GetHilite(int& nStartChar, int& nEndChar) const
\r
1538 ATLASSERT(::IsWindow(m_hWnd));
\r
1539 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, EM_GETHILITE, 0, 0L);
\r
1540 nStartChar = (int)(short)LOWORD(dwRet);
\r
1541 nEndChar = (int)(short)HIWORD(dwRet);
\r
1544 void SetHilite(int nStartChar, int nEndChar)
\r
1546 ATLASSERT(::IsWindow(m_hWnd));
\r
1547 ::SendMessage(m_hWnd, EM_SETHILITE, nStartChar, nEndChar);
\r
1549 #endif // (_WIN32_WINNT >= 0x0600)
\r
1551 // Clipboard operations
\r
1554 ATLASSERT(::IsWindow(m_hWnd));
\r
1555 return (BOOL)::SendMessage(m_hWnd, EM_UNDO, 0, 0L);
\r
1560 ATLASSERT(::IsWindow(m_hWnd));
\r
1561 ::SendMessage(m_hWnd, WM_CLEAR, 0, 0L);
\r
1566 ATLASSERT(::IsWindow(m_hWnd));
\r
1567 ::SendMessage(m_hWnd, WM_COPY, 0, 0L);
\r
1572 ATLASSERT(::IsWindow(m_hWnd));
\r
1573 ::SendMessage(m_hWnd, WM_CUT, 0, 0L);
\r
1578 ATLASSERT(::IsWindow(m_hWnd));
\r
1579 ::SendMessage(m_hWnd, WM_PASTE, 0, 0L);
\r
1582 #ifdef WIN32_PLATFORM_WFSP // SmartPhone only messages
\r
1583 DWORD GetExtendedStyle()
\r
1585 return SendMessage(EM_GETEXTENDEDSTYLE);
\r
1588 DWORD SetExtendedStyle(DWORD dwMask, DWORD dwExStyle)
\r
1590 return SendMessage(EM_SETEXTENDEDSTYLE, (WPARAM)dwMask, (LPARAM)dwExStyle);
\r
1593 DWORD GetInputMode(BOOL bCurrentMode = TRUE)
\r
1595 return SendMessage(EM_GETINPUTMODE, 0, (LPARAM)bCurrentMode);
\r
1598 BOOL SetInputMode(DWORD dwMode)
\r
1600 return SendMessage(EM_SETINPUTMODE, 0, (LPARAM)dwMode);
\r
1603 BOOL SetSymbols(LPCTSTR szSymbols)
\r
1605 return SendMessage(EM_SETSYMBOLS, 0, (LPARAM)szSymbols);
\r
1608 BOOL ResetSymbols()
\r
1610 return SendMessage(EM_SETSYMBOLS);
\r
1612 #endif // WIN32_PLATFORM_WFSP
\r
1615 typedef CEditT<ATL::CWindow> CEdit;
\r
1618 ///////////////////////////////////////////////////////////////////////////////
\r
1619 // CEditCommands - message handlers for standard EDIT commands
\r
1621 // Chain to CEditCommands message map. Your class must also derive from CEdit.
\r
1623 // class CMyEdit : public CWindowImpl<CMyEdit, CEdit>,
\r
1624 // public CEditCommands<CMyEdit>
\r
1627 // BEGIN_MSG_MAP(CMyEdit)
\r
1628 // // your handlers...
\r
1629 // CHAIN_MSG_MAP_ALT(CEditCommands<CMyEdit>, 1)
\r
1631 // // other stuff...
\r
1634 template <class T>
\r
1635 class CEditCommands
\r
1638 BEGIN_MSG_MAP(CEditCommands< T >)
\r
1640 COMMAND_ID_HANDLER(ID_EDIT_CLEAR, OnEditClear)
\r
1641 COMMAND_ID_HANDLER(ID_EDIT_CLEAR_ALL, OnEditClearAll)
\r
1642 COMMAND_ID_HANDLER(ID_EDIT_COPY, OnEditCopy)
\r
1643 COMMAND_ID_HANDLER(ID_EDIT_CUT, OnEditCut)
\r
1644 COMMAND_ID_HANDLER(ID_EDIT_PASTE, OnEditPaste)
\r
1645 COMMAND_ID_HANDLER(ID_EDIT_SELECT_ALL, OnEditSelectAll)
\r
1646 COMMAND_ID_HANDLER(ID_EDIT_UNDO, OnEditUndo)
\r
1649 LRESULT OnEditClear(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
\r
1651 T* pT = static_cast<T*>(this);
\r
1656 LRESULT OnEditClearAll(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
\r
1658 T* pT = static_cast<T*>(this);
\r
1659 pT->SetSel(0, -1);
\r
1664 LRESULT OnEditCopy(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
\r
1666 T* pT = static_cast<T*>(this);
\r
1671 LRESULT OnEditCut(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
\r
1673 T* pT = static_cast<T*>(this);
\r
1678 LRESULT OnEditPaste(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
\r
1680 T* pT = static_cast<T*>(this);
\r
1685 LRESULT OnEditSelectAll(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
\r
1687 T* pT = static_cast<T*>(this);
\r
1688 pT->SetSel(0, -1);
\r
1692 LRESULT OnEditUndo(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
\r
1694 T* pT = static_cast<T*>(this);
\r
1699 // State (update UI) helpers
\r
1700 BOOL CanCut() const
\r
1701 { return HasSelection(); }
\r
1703 BOOL CanCopy() const
\r
1704 { return HasSelection(); }
\r
1706 BOOL CanClear() const
\r
1707 { return HasSelection(); }
\r
1709 BOOL CanSelectAll() const
\r
1710 { return HasText(); }
\r
1712 BOOL CanFind() const
\r
1713 { return HasText(); }
\r
1715 BOOL CanRepeat() const
\r
1716 { return HasText(); }
\r
1718 BOOL CanReplace() const
\r
1719 { return HasText(); }
\r
1721 BOOL CanClearAll() const
\r
1722 { return HasText(); }
\r
1725 BOOL HasSelection() const
\r
1727 const T* pT = static_cast<const T*>(this);
\r
1729 ::SendMessage(pT->m_hWnd, EM_GETSEL, (WPARAM)&nMin, (LPARAM)&nMax);
\r
1730 return (nMin != nMax);
\r
1733 BOOL HasText() const
\r
1735 const T* pT = static_cast<const T*>(this);
\r
1736 return (pT->GetWindowTextLength() > 0);
\r
1741 ///////////////////////////////////////////////////////////////////////////////
\r
1742 // CScrollBar - client side for a Windows SCROLLBAR control
\r
1744 template <class TBase>
\r
1745 class CScrollBarT : public TBase
\r
1749 CScrollBarT(HWND hWnd = NULL) : TBase(hWnd)
\r
1752 CScrollBarT< TBase >& operator =(HWND hWnd)
\r
1758 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
1759 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
1760 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
1762 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
1766 static LPCTSTR GetWndClassName()
\r
1768 return _T("SCROLLBAR");
\r
1771 #ifndef _WIN32_WCE
\r
1772 int GetScrollPos() const
\r
1774 ATLASSERT(::IsWindow(m_hWnd));
\r
1775 return ::GetScrollPos(m_hWnd, SB_CTL);
\r
1777 #endif // !_WIN32_WCE
\r
1779 int SetScrollPos(int nPos, BOOL bRedraw = TRUE)
\r
1781 ATLASSERT(::IsWindow(m_hWnd));
\r
1782 return ::SetScrollPos(m_hWnd, SB_CTL, nPos, bRedraw);
\r
1785 #ifndef _WIN32_WCE
\r
1786 void GetScrollRange(LPINT lpMinPos, LPINT lpMaxPos) const
\r
1788 ATLASSERT(::IsWindow(m_hWnd));
\r
1789 ::GetScrollRange(m_hWnd, SB_CTL, lpMinPos, lpMaxPos);
\r
1791 #endif // !_WIN32_WCE
\r
1793 void SetScrollRange(int nMinPos, int nMaxPos, BOOL bRedraw = TRUE)
\r
1795 ATLASSERT(::IsWindow(m_hWnd));
\r
1796 ::SetScrollRange(m_hWnd, SB_CTL, nMinPos, nMaxPos, bRedraw);
\r
1799 BOOL GetScrollInfo(LPSCROLLINFO lpScrollInfo) const
\r
1801 ATLASSERT(::IsWindow(m_hWnd));
\r
1802 return ::GetScrollInfo(m_hWnd, SB_CTL, lpScrollInfo);
\r
1805 int SetScrollInfo(LPSCROLLINFO lpScrollInfo, BOOL bRedraw = TRUE)
\r
1807 ATLASSERT(::IsWindow(m_hWnd));
\r
1808 return ::SetScrollInfo(m_hWnd, SB_CTL, lpScrollInfo, bRedraw);
\r
1811 #ifndef _WIN32_WCE
\r
1812 int GetScrollLimit() const
\r
1814 int nMin = 0, nMax = 0;
\r
1815 ::GetScrollRange(m_hWnd, SB_CTL, &nMin, &nMax);
\r
1816 SCROLLINFO info = { 0 };
\r
1817 info.cbSize = sizeof(SCROLLINFO);
\r
1818 info.fMask = SIF_PAGE;
\r
1819 if(::GetScrollInfo(m_hWnd, SB_CTL, &info))
\r
1820 nMax -= ((info.nPage - 1) > 0) ? (info.nPage - 1) : 0;
\r
1825 #if (WINVER >= 0x0500)
\r
1826 BOOL GetScrollBarInfo(PSCROLLBARINFO pScrollBarInfo) const
\r
1828 ATLASSERT(::IsWindow(m_hWnd));
\r
1829 #if (_WIN32_WINNT >= 0x0501)
\r
1830 return (BOOL)::SendMessage(m_hWnd, SBM_GETSCROLLBARINFO, 0, (LPARAM)pScrollBarInfo);
\r
1831 #else // !(_WIN32_WINNT >= 0x0501)
\r
1832 return ::GetScrollBarInfo(m_hWnd, OBJID_CLIENT, pScrollBarInfo);
\r
1833 #endif // !(_WIN32_WINNT >= 0x0501)
\r
1835 #endif // (WINVER >= 0x0500)
\r
1838 void ShowScrollBar(BOOL bShow = TRUE)
\r
1840 ATLASSERT(::IsWindow(m_hWnd));
\r
1841 ::ShowScrollBar(m_hWnd, SB_CTL, bShow);
\r
1844 BOOL EnableScrollBar(UINT nArrowFlags = ESB_ENABLE_BOTH)
\r
1846 ATLASSERT(::IsWindow(m_hWnd));
\r
1847 return ::EnableScrollBar(m_hWnd, SB_CTL, nArrowFlags);
\r
1849 #endif // !_WIN32_WCE
\r
1852 typedef CScrollBarT<ATL::CWindow> CScrollBar;
\r
1855 // --- Windows Common Controls ---
\r
1857 ///////////////////////////////////////////////////////////////////////////////
\r
1863 HIMAGELIST m_hImageList;
\r
1866 CImageList(HIMAGELIST hImageList = NULL) : m_hImageList(hImageList)
\r
1869 // Operators, etc.
\r
1870 CImageList& operator =(HIMAGELIST hImageList)
\r
1872 m_hImageList = hImageList;
\r
1876 operator HIMAGELIST() const { return m_hImageList; }
\r
1878 void Attach(HIMAGELIST hImageList)
\r
1880 ATLASSERT(m_hImageList == NULL);
\r
1881 ATLASSERT(hImageList != NULL);
\r
1882 m_hImageList = hImageList;
\r
1885 HIMAGELIST Detach()
\r
1887 HIMAGELIST hImageList = m_hImageList;
\r
1888 m_hImageList = NULL;
\r
1889 return hImageList;
\r
1892 bool IsNull() const { return (m_hImageList == NULL); }
\r
1895 int GetImageCount() const
\r
1897 ATLASSERT(m_hImageList != NULL);
\r
1898 return ImageList_GetImageCount(m_hImageList);
\r
1901 COLORREF GetBkColor() const
\r
1903 ATLASSERT(m_hImageList != NULL);
\r
1904 return ImageList_GetBkColor(m_hImageList);
\r
1907 COLORREF SetBkColor(COLORREF cr)
\r
1909 ATLASSERT(m_hImageList != NULL);
\r
1910 return ImageList_SetBkColor(m_hImageList, cr);
\r
1913 BOOL GetImageInfo(int nImage, IMAGEINFO* pImageInfo) const
\r
1915 ATLASSERT(m_hImageList != NULL);
\r
1916 return ImageList_GetImageInfo(m_hImageList, nImage, pImageInfo);
\r
1919 HICON GetIcon(int nIndex, UINT uFlags = ILD_NORMAL) const
\r
1921 ATLASSERT(m_hImageList != NULL);
\r
1922 return ImageList_GetIcon(m_hImageList, nIndex, uFlags);
\r
1925 BOOL GetIconSize(int& cx, int& cy) const
\r
1927 ATLASSERT(m_hImageList != NULL);
\r
1928 return ImageList_GetIconSize(m_hImageList, &cx, &cy);
\r
1931 BOOL GetIconSize(SIZE& size) const
\r
1933 ATLASSERT(m_hImageList != NULL);
\r
1934 return ImageList_GetIconSize(m_hImageList, (int*)&size.cx, (int*)&size.cy);
\r
1937 BOOL SetIconSize(int cx, int cy)
\r
1939 ATLASSERT(m_hImageList != NULL);
\r
1940 return ImageList_SetIconSize(m_hImageList, cx, cy);
\r
1943 BOOL SetIconSize(SIZE size)
\r
1945 ATLASSERT(m_hImageList != NULL);
\r
1946 return ImageList_SetIconSize(m_hImageList, size.cx, size.cy);
\r
1949 BOOL SetImageCount(UINT uNewCount)
\r
1951 ATLASSERT(m_hImageList != NULL);
\r
1952 return ImageList_SetImageCount(m_hImageList, uNewCount);
\r
1955 BOOL SetOverlayImage(int nImage, int nOverlay)
\r
1957 ATLASSERT(m_hImageList != NULL);
\r
1958 return ImageList_SetOverlayImage(m_hImageList, nImage, nOverlay);
\r
1962 BOOL Create(int cx, int cy, UINT nFlags, int nInitial, int nGrow)
\r
1964 ATLASSERT(m_hImageList == NULL);
\r
1965 m_hImageList = ImageList_Create(cx, cy, nFlags, nInitial, nGrow);
\r
1966 return (m_hImageList != NULL) ? TRUE : FALSE;
\r
1969 BOOL Create(ATL::_U_STRINGorID bitmap, int cx, int nGrow, COLORREF crMask)
\r
1971 ATLASSERT(m_hImageList == NULL);
\r
1972 m_hImageList = ImageList_LoadBitmap(ModuleHelper::GetResourceInstance(), bitmap.m_lpstr, cx, nGrow, crMask);
\r
1973 return (m_hImageList != NULL) ? TRUE : FALSE;
\r
1976 BOOL CreateFromImage(ATL::_U_STRINGorID image, int cx, int nGrow, COLORREF crMask, UINT uType, UINT uFlags = LR_DEFAULTCOLOR | LR_DEFAULTSIZE)
\r
1978 ATLASSERT(m_hImageList == NULL);
\r
1979 m_hImageList = ImageList_LoadImage(ModuleHelper::GetResourceInstance(), image.m_lpstr, cx, nGrow, crMask, uType, uFlags);
\r
1980 return (m_hImageList != NULL) ? TRUE : FALSE;
\r
1983 BOOL Merge(HIMAGELIST hImageList1, int nImage1, HIMAGELIST hImageList2, int nImage2, int dx, int dy)
\r
1985 ATLASSERT(m_hImageList == NULL);
\r
1986 m_hImageList = ImageList_Merge(hImageList1, nImage1, hImageList2, nImage2, dx, dy);
\r
1987 return (m_hImageList != NULL) ? TRUE : FALSE;
\r
1990 #ifndef _WIN32_WCE
\r
1991 #ifdef __IStream_INTERFACE_DEFINED__
\r
1992 BOOL CreateFromStream(LPSTREAM lpStream)
\r
1994 ATLASSERT(m_hImageList == NULL);
\r
1995 m_hImageList = ImageList_Read(lpStream);
\r
1996 return (m_hImageList != NULL) ? TRUE : FALSE;
\r
1998 #endif // __IStream_INTERFACE_DEFINED__
\r
1999 #endif // !_WIN32_WCE
\r
2003 if (m_hImageList == NULL)
\r
2005 BOOL bRet = ImageList_Destroy(m_hImageList);
\r
2007 m_hImageList = NULL;
\r
2011 int Add(HBITMAP hBitmap, HBITMAP hBitmapMask = NULL)
\r
2013 ATLASSERT(m_hImageList != NULL);
\r
2014 return ImageList_Add(m_hImageList, hBitmap, hBitmapMask);
\r
2017 int Add(HBITMAP hBitmap, COLORREF crMask)
\r
2019 ATLASSERT(m_hImageList != NULL);
\r
2020 return ImageList_AddMasked(m_hImageList, hBitmap, crMask);
\r
2023 BOOL Remove(int nImage)
\r
2025 ATLASSERT(m_hImageList != NULL);
\r
2026 return ImageList_Remove(m_hImageList, nImage);
\r
2031 ATLASSERT(m_hImageList != NULL);
\r
2032 return ImageList_RemoveAll(m_hImageList);
\r
2035 BOOL Replace(int nImage, HBITMAP hBitmap, HBITMAP hBitmapMask)
\r
2037 ATLASSERT(m_hImageList != NULL);
\r
2038 return ImageList_Replace(m_hImageList, nImage, hBitmap, hBitmapMask);
\r
2041 int AddIcon(HICON hIcon)
\r
2043 ATLASSERT(m_hImageList != NULL);
\r
2044 return ImageList_AddIcon(m_hImageList, hIcon);
\r
2047 int ReplaceIcon(int nImage, HICON hIcon)
\r
2049 ATLASSERT(m_hImageList != NULL);
\r
2050 return ImageList_ReplaceIcon(m_hImageList, nImage, hIcon);
\r
2053 HICON ExtractIcon(int nImage)
\r
2055 ATLASSERT(m_hImageList != NULL);
\r
2056 return ImageList_ExtractIcon(NULL, m_hImageList, nImage);
\r
2059 BOOL Draw(HDC hDC, int nImage, int x, int y, UINT nStyle)
\r
2061 ATLASSERT(m_hImageList != NULL);
\r
2062 ATLASSERT(hDC != NULL);
\r
2063 return ImageList_Draw(m_hImageList, nImage, hDC, x, y, nStyle);
\r
2066 BOOL Draw(HDC hDC, int nImage, POINT pt, UINT nStyle)
\r
2068 ATLASSERT(m_hImageList != NULL);
\r
2069 ATLASSERT(hDC != NULL);
\r
2070 return ImageList_Draw(m_hImageList, nImage, hDC, pt.x, pt.y, nStyle);
\r
2073 BOOL DrawEx(int nImage, HDC hDC, int x, int y, int dx, int dy, COLORREF rgbBk, COLORREF rgbFg, UINT fStyle)
\r
2075 ATLASSERT(m_hImageList != NULL);
\r
2076 ATLASSERT(hDC != NULL);
\r
2077 return ImageList_DrawEx(m_hImageList, nImage, hDC, x, y, dx, dy, rgbBk, rgbFg, fStyle);
\r
2080 BOOL DrawEx(int nImage, HDC hDC, RECT& rect, COLORREF rgbBk, COLORREF rgbFg, UINT fStyle)
\r
2082 ATLASSERT(m_hImageList != NULL);
\r
2083 ATLASSERT(hDC != NULL);
\r
2084 return ImageList_DrawEx(m_hImageList, nImage, hDC, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, rgbBk, rgbFg, fStyle);
\r
2087 static BOOL DrawIndirect(IMAGELISTDRAWPARAMS* pimldp)
\r
2089 return ImageList_DrawIndirect(pimldp);
\r
2092 BOOL Copy(int nSrc, int nDst, UINT uFlags = ILCF_MOVE)
\r
2094 ATLASSERT(m_hImageList != NULL);
\r
2095 return ImageList_Copy(m_hImageList, nDst, m_hImageList, nSrc, uFlags);
\r
2098 #ifdef __IStream_INTERFACE_DEFINED__
\r
2099 #ifndef _WIN32_WCE
\r
2100 static HIMAGELIST Read(LPSTREAM lpStream)
\r
2102 return ImageList_Read(lpStream);
\r
2105 BOOL Write(LPSTREAM lpStream)
\r
2107 ATLASSERT(m_hImageList != NULL);
\r
2108 return ImageList_Write(m_hImageList, lpStream);
\r
2110 #endif // !_WIN32_WCE
\r
2112 #if (_WIN32_WINNT >= 0x0501)
\r
2113 static HRESULT ReadEx(DWORD dwFlags, LPSTREAM lpStream, REFIID riid, PVOID* ppv)
\r
2115 return ImageList_ReadEx(dwFlags, lpStream, riid, ppv);
\r
2118 HRESULT WriteEx(DWORD dwFlags, LPSTREAM lpStream)
\r
2120 ATLASSERT(m_hImageList != NULL);
\r
2121 return ImageList_WriteEx(m_hImageList, dwFlags, lpStream);
\r
2123 #endif // (_WIN32_WINNT >= 0x0501)
\r
2124 #endif // __IStream_INTERFACE_DEFINED__
\r
2126 // Drag operations
\r
2127 BOOL BeginDrag(int nImage, POINT ptHotSpot)
\r
2129 ATLASSERT(m_hImageList != NULL);
\r
2130 return ImageList_BeginDrag(m_hImageList, nImage, ptHotSpot.x, ptHotSpot.y);
\r
2133 BOOL BeginDrag(int nImage, int xHotSpot, int yHotSpot)
\r
2135 ATLASSERT(m_hImageList != NULL);
\r
2136 return ImageList_BeginDrag(m_hImageList, nImage, xHotSpot, yHotSpot);
\r
2139 static void EndDrag()
\r
2141 ImageList_EndDrag();
\r
2144 static BOOL DragMove(POINT pt)
\r
2146 return ImageList_DragMove(pt.x, pt.y);
\r
2149 static BOOL DragMove(int x, int y)
\r
2151 return ImageList_DragMove(x, y);
\r
2154 BOOL SetDragCursorImage(int nDrag, POINT ptHotSpot)
\r
2156 ATLASSERT(m_hImageList != NULL);
\r
2157 return ImageList_SetDragCursorImage(m_hImageList, nDrag, ptHotSpot.x, ptHotSpot.y);
\r
2160 BOOL SetDragCursorImage(int nDrag, int xHotSpot, int yHotSpot)
\r
2162 ATLASSERT(m_hImageList != NULL);
\r
2163 return ImageList_SetDragCursorImage(m_hImageList, nDrag, xHotSpot, yHotSpot);
\r
2166 static BOOL DragShowNolock(BOOL bShow = TRUE)
\r
2168 return ImageList_DragShowNolock(bShow);
\r
2171 static CImageList GetDragImage(LPPOINT lpPoint, LPPOINT lpPointHotSpot)
\r
2173 return CImageList(ImageList_GetDragImage(lpPoint, lpPointHotSpot));
\r
2176 static BOOL DragEnter(HWND hWnd, POINT point)
\r
2178 return ImageList_DragEnter(hWnd, point.x, point.y);
\r
2181 static BOOL DragEnter(HWND hWnd, int x, int y)
\r
2183 return ImageList_DragEnter(hWnd, x, y);
\r
2186 static BOOL DragLeave(HWND hWnd)
\r
2188 return ImageList_DragLeave(hWnd);
\r
2191 #if (_WIN32_IE >= 0x0400)
\r
2192 CImageList Duplicate() const
\r
2194 ATLASSERT(m_hImageList != NULL);
\r
2195 return CImageList(ImageList_Duplicate(m_hImageList));
\r
2198 static CImageList Duplicate(HIMAGELIST hImageList)
\r
2200 ATLASSERT(hImageList != NULL);
\r
2201 return CImageList(ImageList_Duplicate(hImageList));
\r
2203 #endif // (_WIN32_IE >= 0x0400)
\r
2207 ///////////////////////////////////////////////////////////////////////////////
\r
2210 #ifndef _WIN32_WCE
\r
2212 class CToolInfo : public TOOLINFO
\r
2215 CToolInfo(UINT nFlags, HWND hWnd, UINT nIDTool = 0, LPRECT lpRect = NULL, LPTSTR lpstrText = LPSTR_TEXTCALLBACK, LPARAM lUserParam = NULL)
\r
2217 Init(nFlags, hWnd, nIDTool, lpRect, lpstrText, lUserParam);
\r
2220 operator LPTOOLINFO() { return this; }
\r
2222 operator LPARAM() { return (LPARAM)this; }
\r
2224 void Init(UINT nFlags, HWND hWnd, UINT nIDTool = 0, LPRECT lpRect = NULL, LPTSTR lpstrText = LPSTR_TEXTCALLBACK, LPARAM lUserParam = NULL)
\r
2226 ATLASSERT(::IsWindow(hWnd));
\r
2227 memset(this, 0, sizeof(TOOLINFO));
\r
2228 cbSize = sizeof(TOOLINFO);
\r
2232 hwnd = ::GetParent(hWnd);
\r
2233 uFlags |= TTF_IDISHWND;
\r
2234 uId = (UINT_PTR)hWnd;
\r
2241 if(lpRect != NULL)
\r
2243 hinst = ModuleHelper::GetResourceInstance();
\r
2244 lpszText = lpstrText;
\r
2245 lParam = lUserParam;
\r
2249 template <class TBase>
\r
2250 class CToolTipCtrlT : public TBase
\r
2254 CToolTipCtrlT(HWND hWnd = NULL) : TBase(hWnd)
\r
2257 CToolTipCtrlT< TBase >& operator =(HWND hWnd)
\r
2263 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
2264 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
2265 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
2267 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
2271 static LPCTSTR GetWndClassName()
\r
2273 return TOOLTIPS_CLASS;
\r
2276 void GetText(LPTOOLINFO lpToolInfo) const
\r
2278 ATLASSERT(::IsWindow(m_hWnd));
\r
2279 ::SendMessage(m_hWnd, TTM_GETTEXT, 0, (LPARAM)&lpToolInfo);
\r
2282 void GetText(LPTSTR lpstrText, HWND hWnd, UINT nIDTool = 0) const
\r
2284 ATLASSERT(::IsWindow(m_hWnd));
\r
2285 ATLASSERT(hWnd != NULL);
\r
2286 CToolInfo ti(0, hWnd, nIDTool, NULL, lpstrText);
\r
2287 ::SendMessage(m_hWnd, TTM_GETTEXT, 0, ti);
\r
2290 BOOL GetToolInfo(LPTOOLINFO lpToolInfo) const
\r
2292 ATLASSERT(::IsWindow(m_hWnd));
\r
2293 return (BOOL)::SendMessage(m_hWnd, TTM_GETTOOLINFO, 0, (LPARAM)lpToolInfo);
\r
2296 BOOL GetToolInfo(HWND hWnd, UINT nIDTool, UINT* puFlags, LPRECT lpRect, LPTSTR lpstrText) const
\r
2298 ATLASSERT(::IsWindow(m_hWnd));
\r
2299 ATLASSERT(hWnd != NULL);
\r
2300 ATLASSERT(puFlags != NULL);
\r
2301 ATLASSERT(lpRect != NULL);
\r
2302 CToolInfo ti(0, hWnd, nIDTool, NULL, lpstrText);
\r
2303 BOOL bRet = (BOOL)::SendMessage(m_hWnd, TTM_GETTOOLINFO, 0, ti);
\r
2306 *puFlags = ti.uFlags;
\r
2307 *lpRect = ti.rect;
\r
2312 void SetToolInfo(LPTOOLINFO lpToolInfo)
\r
2314 ATLASSERT(::IsWindow(m_hWnd));
\r
2315 ::SendMessage(m_hWnd, TTM_SETTOOLINFO, 0, (LPARAM)lpToolInfo);
\r
2318 void SetToolRect(LPTOOLINFO lpToolInfo)
\r
2320 ATLASSERT(::IsWindow(m_hWnd));
\r
2321 ::SendMessage(m_hWnd, TTM_NEWTOOLRECT, 0, (LPARAM)lpToolInfo);
\r
2324 void SetToolRect(HWND hWnd, UINT nIDTool, LPCRECT lpRect)
\r
2326 ATLASSERT(::IsWindow(m_hWnd));
\r
2327 ATLASSERT(hWnd != NULL);
\r
2328 ATLASSERT(nIDTool != 0);
\r
2330 CToolInfo ti(0, hWnd, nIDTool, (LPRECT)lpRect, NULL);
\r
2331 ::SendMessage(m_hWnd, TTM_NEWTOOLRECT, 0, ti);
\r
2334 int GetToolCount() const
\r
2336 ATLASSERT(::IsWindow(m_hWnd));
\r
2337 return (int)::SendMessage(m_hWnd, TTM_GETTOOLCOUNT, 0, 0L);
\r
2340 int GetDelayTime(DWORD dwType) const
\r
2342 ATLASSERT(::IsWindow(m_hWnd));
\r
2343 return (int)::SendMessage(m_hWnd, TTM_GETDELAYTIME, dwType, 0L);
\r
2346 void SetDelayTime(DWORD dwType, int nTime)
\r
2348 ATLASSERT(::IsWindow(m_hWnd));
\r
2349 ::SendMessage(m_hWnd, TTM_SETDELAYTIME, dwType, MAKELPARAM(nTime, 0));
\r
2352 void GetMargin(LPRECT lpRect) const
\r
2354 ATLASSERT(::IsWindow(m_hWnd));
\r
2355 ::SendMessage(m_hWnd, TTM_GETMARGIN, 0, (LPARAM)lpRect);
\r
2358 void SetMargin(LPRECT lpRect)
\r
2360 ATLASSERT(::IsWindow(m_hWnd));
\r
2361 ::SendMessage(m_hWnd, TTM_SETMARGIN, 0, (LPARAM)lpRect);
\r
2364 int GetMaxTipWidth() const
\r
2366 ATLASSERT(::IsWindow(m_hWnd));
\r
2367 return (int)::SendMessage(m_hWnd, TTM_GETMAXTIPWIDTH, 0, 0L);
\r
2370 int SetMaxTipWidth(int nWidth)
\r
2372 ATLASSERT(::IsWindow(m_hWnd));
\r
2373 return (int)::SendMessage(m_hWnd, TTM_SETMAXTIPWIDTH, 0, nWidth);
\r
2376 COLORREF GetTipBkColor() const
\r
2378 ATLASSERT(::IsWindow(m_hWnd));
\r
2379 return (COLORREF)::SendMessage(m_hWnd, TTM_GETTIPBKCOLOR, 0, 0L);
\r
2382 void SetTipBkColor(COLORREF clr)
\r
2384 ATLASSERT(::IsWindow(m_hWnd));
\r
2385 ::SendMessage(m_hWnd, TTM_SETTIPBKCOLOR, (WPARAM)clr, 0L);
\r
2388 COLORREF GetTipTextColor() const
\r
2390 ATLASSERT(::IsWindow(m_hWnd));
\r
2391 return (COLORREF)::SendMessage(m_hWnd, TTM_GETTIPTEXTCOLOR, 0, 0L);
\r
2394 void SetTipTextColor(COLORREF clr)
\r
2396 ATLASSERT(::IsWindow(m_hWnd));
\r
2397 ::SendMessage(m_hWnd, TTM_SETTIPTEXTCOLOR, (WPARAM)clr, 0L);
\r
2400 BOOL GetCurrentTool(LPTOOLINFO lpToolInfo) const
\r
2402 ATLASSERT(::IsWindow(m_hWnd));
\r
2403 return (BOOL)::SendMessage(m_hWnd, TTM_GETCURRENTTOOL, 0, (LPARAM)lpToolInfo);
\r
2406 #if (_WIN32_IE >= 0x0500)
\r
2407 SIZE GetBubbleSize(LPTOOLINFO lpToolInfo) const
\r
2409 ATLASSERT(::IsWindow(m_hWnd));
\r
2410 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, TTM_GETBUBBLESIZE, 0, (LPARAM)lpToolInfo);
\r
2411 SIZE size = { GET_X_LPARAM(dwRet), GET_Y_LPARAM(dwRet) };
\r
2415 BOOL SetTitle(UINT uIcon, LPCTSTR lpstrTitle)
\r
2417 ATLASSERT(::IsWindow(m_hWnd));
\r
2418 return (BOOL)::SendMessage(m_hWnd, TTM_SETTITLE, uIcon, (LPARAM)lpstrTitle);
\r
2420 #endif // (_WIN32_IE >= 0x0500)
\r
2422 #if (_WIN32_WINNT >= 0x0501)
\r
2423 void GetTitle(PTTGETTITLE pTTGetTitle) const
\r
2425 ATLASSERT(::IsWindow(m_hWnd));
\r
2426 ::SendMessage(m_hWnd, TTM_GETTITLE, 0, (LPARAM)pTTGetTitle);
\r
2429 void SetWindowTheme(LPCWSTR lpstrTheme)
\r
2431 ATLASSERT(::IsWindow(m_hWnd));
\r
2432 ::SendMessage(m_hWnd, TTM_SETWINDOWTHEME, 0, (LPARAM)lpstrTheme);
\r
2434 #endif // (_WIN32_WINNT >= 0x0501)
\r
2437 void Activate(BOOL bActivate)
\r
2439 ATLASSERT(::IsWindow(m_hWnd));
\r
2440 ::SendMessage(m_hWnd, TTM_ACTIVATE, bActivate, 0L);
\r
2443 BOOL AddTool(LPTOOLINFO lpToolInfo)
\r
2445 ATLASSERT(::IsWindow(m_hWnd));
\r
2446 return (BOOL)::SendMessage(m_hWnd, TTM_ADDTOOL, 0, (LPARAM)lpToolInfo);
\r
2449 BOOL AddTool(HWND hWnd, ATL::_U_STRINGorID text = LPSTR_TEXTCALLBACK, LPCRECT lpRectTool = NULL, UINT nIDTool = 0)
\r
2451 ATLASSERT(::IsWindow(m_hWnd));
\r
2452 ATLASSERT(hWnd != NULL);
\r
2453 // the toolrect and toolid must both be zero or both valid
\r
2454 ATLASSERT((lpRectTool != NULL && nIDTool != 0) || (lpRectTool == NULL && nIDTool == 0));
\r
2456 CToolInfo ti(0, hWnd, nIDTool, (LPRECT)lpRectTool, (LPTSTR)text.m_lpstr);
\r
2457 return (BOOL)::SendMessage(m_hWnd, TTM_ADDTOOL, 0, ti);
\r
2460 void DelTool(LPTOOLINFO lpToolInfo)
\r
2462 ATLASSERT(::IsWindow(m_hWnd));
\r
2463 ::SendMessage(m_hWnd, TTM_DELTOOL, 0, (LPARAM)lpToolInfo);
\r
2466 void DelTool(HWND hWnd, UINT nIDTool = 0)
\r
2468 ATLASSERT(::IsWindow(m_hWnd));
\r
2469 ATLASSERT(hWnd != NULL);
\r
2471 CToolInfo ti(0, hWnd, nIDTool, NULL, NULL);
\r
2472 ::SendMessage(m_hWnd, TTM_DELTOOL, 0, ti);
\r
2475 BOOL HitTest(LPTTHITTESTINFO lpHitTestInfo) const
\r
2477 ATLASSERT(::IsWindow(m_hWnd));
\r
2478 return (BOOL)::SendMessage(m_hWnd, TTM_HITTEST, 0, (LPARAM)lpHitTestInfo);
\r
2481 BOOL HitTest(HWND hWnd, POINT pt, LPTOOLINFO lpToolInfo) const
\r
2483 ATLASSERT(::IsWindow(m_hWnd));
\r
2484 ATLASSERT(hWnd != NULL);
\r
2485 ATLASSERT(lpToolInfo != NULL);
\r
2487 TTHITTESTINFO hti = { 0 };
\r
2488 hti.ti.cbSize = sizeof(TOOLINFO);
\r
2492 if((BOOL)::SendMessage(m_hWnd, TTM_HITTEST, 0, (LPARAM)&hti) != FALSE)
\r
2494 *lpToolInfo = hti.ti;
\r
2500 void RelayEvent(LPMSG lpMsg)
\r
2502 ATLASSERT(::IsWindow(m_hWnd));
\r
2503 ::SendMessage(m_hWnd, TTM_RELAYEVENT, 0, (LPARAM)lpMsg);
\r
2506 void UpdateTipText(LPTOOLINFO lpToolInfo)
\r
2508 ATLASSERT(::IsWindow(m_hWnd));
\r
2509 ::SendMessage(m_hWnd, TTM_UPDATETIPTEXT, 0, (LPARAM)lpToolInfo);
\r
2512 void UpdateTipText(ATL::_U_STRINGorID text, HWND hWnd, UINT nIDTool = 0)
\r
2514 ATLASSERT(::IsWindow(m_hWnd));
\r
2515 ATLASSERT(hWnd != NULL);
\r
2517 CToolInfo ti(0, hWnd, nIDTool, NULL, (LPTSTR)text.m_lpstr);
\r
2518 ::SendMessage(m_hWnd, TTM_UPDATETIPTEXT, 0, ti);
\r
2521 BOOL EnumTools(UINT nTool, LPTOOLINFO lpToolInfo) const
\r
2523 ATLASSERT(::IsWindow(m_hWnd));
\r
2524 return (BOOL)::SendMessage(m_hWnd, TTM_ENUMTOOLS, nTool, (LPARAM)lpToolInfo);
\r
2529 ATLASSERT(::IsWindow(m_hWnd));
\r
2530 ::SendMessage(m_hWnd, TTM_POP, 0, 0L);
\r
2533 void TrackActivate(LPTOOLINFO lpToolInfo, BOOL bActivate)
\r
2535 ATLASSERT(::IsWindow(m_hWnd));
\r
2536 ::SendMessage(m_hWnd, TTM_TRACKACTIVATE, bActivate, (LPARAM)lpToolInfo);
\r
2539 void TrackPosition(int xPos, int yPos)
\r
2541 ATLASSERT(::IsWindow(m_hWnd));
\r
2542 ::SendMessage(m_hWnd, TTM_TRACKPOSITION, 0, MAKELPARAM(xPos, yPos));
\r
2545 #if (_WIN32_IE >= 0x0400)
\r
2548 ATLASSERT(::IsWindow(m_hWnd));
\r
2549 ::SendMessage(m_hWnd, TTM_UPDATE, 0, 0L);
\r
2551 #endif // (_WIN32_IE >= 0x0400)
\r
2553 #if (_WIN32_IE >= 0x0500)
\r
2554 BOOL AdjustRect(LPRECT lpRect, BOOL bLarger /*= TRUE*/)
\r
2556 ATLASSERT(::IsWindow(m_hWnd));
\r
2557 return (BOOL)::SendMessage(m_hWnd, TTM_ADJUSTRECT, bLarger, (LPARAM)lpRect);
\r
2559 #endif // (_WIN32_IE >= 0x0500)
\r
2561 #if (_WIN32_WINNT >= 0x0501)
\r
2564 ATLASSERT(::IsWindow(m_hWnd));
\r
2565 ::SendMessage(m_hWnd, TTM_POPUP, 0, 0L);
\r
2567 #endif // (_WIN32_WINNT >= 0x0501)
\r
2570 typedef CToolTipCtrlT<ATL::CWindow> CToolTipCtrl;
\r
2572 #endif // !_WIN32_WCE
\r
2575 ///////////////////////////////////////////////////////////////////////////////
\r
2578 template <class TBase>
\r
2579 class CHeaderCtrlT : public TBase
\r
2583 CHeaderCtrlT(HWND hWnd = NULL) : TBase(hWnd)
\r
2586 CHeaderCtrlT< TBase >& operator =(HWND hWnd)
\r
2592 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
2593 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
2594 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
2596 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
2600 static LPCTSTR GetWndClassName()
\r
2605 int GetItemCount() const
\r
2607 ATLASSERT(::IsWindow(m_hWnd));
\r
2608 return (int)::SendMessage(m_hWnd, HDM_GETITEMCOUNT, 0, 0L);
\r
2611 BOOL GetItem(int nIndex, LPHDITEM pHeaderItem) const
\r
2613 ATLASSERT(::IsWindow(m_hWnd));
\r
2614 return (BOOL)::SendMessage(m_hWnd, HDM_GETITEM, nIndex, (LPARAM)pHeaderItem);
\r
2617 BOOL SetItem(int nIndex, LPHDITEM pHeaderItem)
\r
2619 ATLASSERT(::IsWindow(m_hWnd));
\r
2620 return (BOOL)::SendMessage(m_hWnd, HDM_SETITEM, nIndex, (LPARAM)pHeaderItem);
\r
2623 CImageList GetImageList() const
\r
2625 ATLASSERT(::IsWindow(m_hWnd));
\r
2626 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, HDM_GETIMAGELIST, 0, 0L));
\r
2629 CImageList SetImageList(HIMAGELIST hImageList)
\r
2631 ATLASSERT(::IsWindow(m_hWnd));
\r
2632 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, HDM_SETIMAGELIST, 0, (LPARAM)hImageList));
\r
2635 BOOL GetOrderArray(int nSize, int* lpnArray) const
\r
2637 ATLASSERT(::IsWindow(m_hWnd));
\r
2638 return (BOOL)::SendMessage(m_hWnd, HDM_GETORDERARRAY, nSize, (LPARAM)lpnArray);
\r
2641 BOOL SetOrderArray(int nSize, int* lpnArray)
\r
2643 ATLASSERT(::IsWindow(m_hWnd));
\r
2644 return (BOOL)::SendMessage(m_hWnd, HDM_SETORDERARRAY, nSize, (LPARAM)lpnArray);
\r
2647 BOOL GetItemRect(int nIndex, LPRECT lpItemRect) const
\r
2649 ATLASSERT(::IsWindow(m_hWnd));
\r
2650 return (BOOL)::SendMessage(m_hWnd, HDM_GETITEMRECT, nIndex, (LPARAM)lpItemRect);
\r
2653 int SetHotDivider(BOOL bPos, DWORD dwInputValue)
\r
2655 ATLASSERT(::IsWindow(m_hWnd));
\r
2656 return (int)::SendMessage(m_hWnd, HDM_SETHOTDIVIDER, bPos, dwInputValue);
\r
2659 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
2660 BOOL GetUnicodeFormat() const
\r
2662 ATLASSERT(::IsWindow(m_hWnd));
\r
2663 return (BOOL)::SendMessage(m_hWnd, HDM_GETUNICODEFORMAT, 0, 0L);
\r
2666 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
\r
2668 ATLASSERT(::IsWindow(m_hWnd));
\r
2669 return (BOOL)::SendMessage(m_hWnd, HDM_SETUNICODEFORMAT, bUnicode, 0L);
\r
2671 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
2673 #if (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)
\r
2674 int GetBitmapMargin() const
\r
2676 ATLASSERT(::IsWindow(m_hWnd));
\r
2677 return (int)::SendMessage(m_hWnd, HDM_GETBITMAPMARGIN, 0, 0L);
\r
2680 int SetBitmapMargin(int nWidth)
\r
2682 ATLASSERT(::IsWindow(m_hWnd));
\r
2683 return (int)::SendMessage(m_hWnd, HDM_SETBITMAPMARGIN, nWidth, 0L);
\r
2686 int SetFilterChangeTimeout(DWORD dwTimeOut)
\r
2688 ATLASSERT(::IsWindow(m_hWnd));
\r
2689 return (int)::SendMessage(m_hWnd, HDM_SETFILTERCHANGETIMEOUT, 0, dwTimeOut);
\r
2691 #endif // (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)
\r
2693 #if (_WIN32_WINNT >= 0x0600)
\r
2694 BOOL GetItemDropDownRect(int nIndex, LPRECT lpRect) const
\r
2696 ATLASSERT(::IsWindow(m_hWnd));
\r
2697 return (BOOL)::SendMessage(m_hWnd, HDM_GETITEMDROPDOWNRECT, nIndex, (LPARAM)lpRect);
\r
2700 BOOL GetOverflowRect(LPRECT lpRect) const
\r
2702 ATLASSERT(::IsWindow(m_hWnd));
\r
2703 return (BOOL)::SendMessage(m_hWnd, HDM_GETOVERFLOWRECT, 0, (LPARAM)lpRect);
\r
2706 int GetFocusedItem() const
\r
2708 ATLASSERT(::IsWindow(m_hWnd));
\r
2709 return (int)::SendMessage(m_hWnd, HDM_GETFOCUSEDITEM, 0, 0L);
\r
2712 BOOL SetFocusedItem(int nIndex)
\r
2714 ATLASSERT(::IsWindow(m_hWnd));
\r
2715 return (BOOL)::SendMessage(m_hWnd, HDM_SETFOCUSEDITEM, 0, nIndex);
\r
2717 #endif // (_WIN32_WINNT >= 0x0600)
\r
2720 int InsertItem(int nIndex, LPHDITEM phdi)
\r
2722 ATLASSERT(::IsWindow(m_hWnd));
\r
2723 return (int)::SendMessage(m_hWnd, HDM_INSERTITEM, nIndex, (LPARAM)phdi);
\r
2726 int AddItem(LPHDITEM phdi)
\r
2728 return InsertItem(GetItemCount(), phdi);
\r
2731 BOOL DeleteItem(int nIndex)
\r
2733 ATLASSERT(::IsWindow(m_hWnd));
\r
2734 return (BOOL)::SendMessage(m_hWnd, HDM_DELETEITEM, nIndex, 0L);
\r
2737 BOOL Layout(HD_LAYOUT* pHeaderLayout)
\r
2739 ATLASSERT(::IsWindow(m_hWnd));
\r
2740 return (BOOL)::SendMessage(m_hWnd, HDM_LAYOUT, 0, (LPARAM)pHeaderLayout);
\r
2743 int HitTest(LPHDHITTESTINFO lpHitTestInfo) const
\r
2745 ATLASSERT(::IsWindow(m_hWnd));
\r
2746 return (int)::SendMessage(m_hWnd, HDM_HITTEST, 0, (LPARAM)lpHitTestInfo);
\r
2749 int OrderToIndex(int nOrder)
\r
2751 ATLASSERT(::IsWindow(m_hWnd));
\r
2752 return (int)::SendMessage(m_hWnd, HDM_ORDERTOINDEX, nOrder, 0L);
\r
2755 CImageList CreateDragImage(int nIndex)
\r
2757 ATLASSERT(::IsWindow(m_hWnd));
\r
2758 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, HDM_CREATEDRAGIMAGE, nIndex, 0L));
\r
2761 #if (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)
\r
2762 int EditFilter(int nColumn, BOOL bDiscardChanges)
\r
2764 ATLASSERT(::IsWindow(m_hWnd));
\r
2765 return (int)::SendMessage(m_hWnd, HDM_EDITFILTER, nColumn, MAKELPARAM(bDiscardChanges, 0));
\r
2768 int ClearFilter(int nColumn)
\r
2770 ATLASSERT(::IsWindow(m_hWnd));
\r
2771 return (int)::SendMessage(m_hWnd, HDM_CLEARFILTER, nColumn, 0L);
\r
2774 int ClearAllFilters()
\r
2776 ATLASSERT(::IsWindow(m_hWnd));
\r
2777 return (int)::SendMessage(m_hWnd, HDM_CLEARFILTER, (WPARAM)-1, 0L);
\r
2779 #endif // (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)
\r
2782 typedef CHeaderCtrlT<ATL::CWindow> CHeaderCtrl;
\r
2785 ///////////////////////////////////////////////////////////////////////////////
\r
2788 template <class TBase>
\r
2789 class CListViewCtrlT : public TBase
\r
2793 CListViewCtrlT(HWND hWnd = NULL) : TBase(hWnd)
\r
2796 CListViewCtrlT< TBase >& operator =(HWND hWnd)
\r
2802 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
2803 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
2804 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
2806 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
2810 static LPCTSTR GetWndClassName()
\r
2812 return WC_LISTVIEW;
\r
2815 COLORREF GetBkColor() const
\r
2817 ATLASSERT(::IsWindow(m_hWnd));
\r
2818 return (COLORREF)::SendMessage(m_hWnd, LVM_GETBKCOLOR, 0, 0L);
\r
2821 BOOL SetBkColor(COLORREF cr)
\r
2823 ATLASSERT(::IsWindow(m_hWnd));
\r
2824 return (BOOL)::SendMessage(m_hWnd, LVM_SETBKCOLOR, 0, cr);
\r
2827 CImageList GetImageList(int nImageListType) const
\r
2829 ATLASSERT(::IsWindow(m_hWnd));
\r
2830 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, LVM_GETIMAGELIST, nImageListType, 0L));
\r
2833 CImageList SetImageList(HIMAGELIST hImageList, int nImageList)
\r
2835 ATLASSERT(::IsWindow(m_hWnd));
\r
2836 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, LVM_SETIMAGELIST, nImageList, (LPARAM)hImageList));
\r
2839 int GetItemCount() const
\r
2841 ATLASSERT(::IsWindow(m_hWnd));
\r
2842 return (int)::SendMessage(m_hWnd, LVM_GETITEMCOUNT, 0, 0L);
\r
2845 BOOL SetItemCount(int nItems)
\r
2847 ATLASSERT(::IsWindow(m_hWnd));
\r
2848 return (BOOL)::SendMessage(m_hWnd, LVM_SETITEMCOUNT, nItems, 0L);
\r
2851 BOOL GetItem(LPLVITEM pItem) const
\r
2853 ATLASSERT(::IsWindow(m_hWnd));
\r
2854 return (BOOL)::SendMessage(m_hWnd, LVM_GETITEM, 0, (LPARAM)pItem);
\r
2857 BOOL SetItem(const LVITEM* pItem)
\r
2859 ATLASSERT(::IsWindow(m_hWnd));
\r
2860 return (BOOL)::SendMessage(m_hWnd, LVM_SETITEM, 0, (LPARAM)pItem);
\r
2863 BOOL SetItem(int nItem, int nSubItem, UINT nMask, LPCTSTR lpszItem,
\r
2864 int nImage, UINT nState, UINT nStateMask, LPARAM lParam)
\r
2866 ATLASSERT(::IsWindow(m_hWnd));
\r
2867 LVITEM lvi = { 0 };
\r
2869 lvi.iItem = nItem;
\r
2870 lvi.iSubItem = nSubItem;
\r
2871 lvi.stateMask = nStateMask;
\r
2872 lvi.state = nState;
\r
2873 lvi.pszText = (LPTSTR) lpszItem;
\r
2874 lvi.iImage = nImage;
\r
2875 lvi.lParam = lParam;
\r
2876 return (BOOL)::SendMessage(m_hWnd, LVM_SETITEM, 0, (LPARAM)&lvi);
\r
2879 UINT GetItemState(int nItem, UINT nMask) const
\r
2881 ATLASSERT(::IsWindow(m_hWnd));
\r
2882 return (UINT)::SendMessage(m_hWnd, LVM_GETITEMSTATE, nItem, nMask);
\r
2885 BOOL SetItemState(int nItem, UINT nState, UINT nStateMask)
\r
2887 ATLASSERT(::IsWindow(m_hWnd));
\r
2888 LVITEM lvi = { 0 };
\r
2889 lvi.state = nState;
\r
2890 lvi.stateMask = nStateMask;
\r
2891 return (BOOL)::SendMessage(m_hWnd, LVM_SETITEMSTATE, nItem, (LPARAM)&lvi);
\r
2894 BOOL SetItemState(int nItem, LPLVITEM pItem)
\r
2896 ATLASSERT(::IsWindow(m_hWnd));
\r
2897 return (BOOL)::SendMessage(m_hWnd, LVM_SETITEMSTATE, nItem, (LPARAM)pItem);
\r
2900 #ifndef _ATL_NO_COM
\r
2901 BOOL GetItemText(int nItem, int nSubItem, BSTR& bstrText) const
\r
2904 ATLASSERT(::IsWindow(m_hWnd));
\r
2905 ATLASSERT(bstrText == NULL);
\r
2906 LVITEM lvi = { 0 };
\r
2907 lvi.iSubItem = nSubItem;
\r
2909 LPTSTR lpstrText = NULL;
\r
2911 for(int nLen = 256; ; nLen *= 2)
\r
2913 ATLTRY(lpstrText = new TCHAR[nLen]);
\r
2914 if(lpstrText == NULL)
\r
2916 lpstrText[0] = NULL;
\r
2917 lvi.cchTextMax = nLen;
\r
2918 lvi.pszText = lpstrText;
\r
2919 nRes = (int)::SendMessage(m_hWnd, LVM_GETITEMTEXT, (WPARAM)nItem, (LPARAM)&lvi);
\r
2920 if(nRes < nLen - 1)
\r
2922 delete [] lpstrText;
\r
2926 if(lpstrText != NULL)
\r
2929 bstrText = ::SysAllocString(T2OLE(lpstrText));
\r
2930 delete [] lpstrText;
\r
2933 return (bstrText != NULL) ? TRUE : FALSE;
\r
2935 #endif // !_ATL_NO_COM
\r
2937 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
\r
2938 int GetItemText(int nItem, int nSubItem, _CSTRING_NS::CString& strText) const
\r
2940 ATLASSERT(::IsWindow(m_hWnd));
\r
2941 LVITEM lvi = { 0 };
\r
2942 lvi.iSubItem = nSubItem;
\r
2946 for(int nLen = 256; ; nLen *= 2)
\r
2948 lvi.cchTextMax = nLen;
\r
2949 lvi.pszText = strText.GetBufferSetLength(nLen);
\r
2950 if(lvi.pszText == NULL)
\r
2955 nRes = (int)::SendMessage(m_hWnd, LVM_GETITEMTEXT, (WPARAM)nItem, (LPARAM)&lvi);
\r
2956 if(nRes < nLen - 1)
\r
2959 strText.ReleaseBuffer();
\r
2962 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
\r
2964 int GetItemText(int nItem, int nSubItem, LPTSTR lpszText, int nLen) const
\r
2966 ATLASSERT(::IsWindow(m_hWnd));
\r
2967 LVITEM lvi = { 0 };
\r
2968 lvi.iSubItem = nSubItem;
\r
2969 lvi.cchTextMax = nLen;
\r
2970 lvi.pszText = lpszText;
\r
2971 return (int)::SendMessage(m_hWnd, LVM_GETITEMTEXT, (WPARAM)nItem, (LPARAM)&lvi);
\r
2974 BOOL SetItemText(int nItem, int nSubItem, LPCTSTR lpszText)
\r
2976 ATLASSERT(::IsWindow(m_hWnd));
\r
2977 return SetItem(nItem, nSubItem, LVIF_TEXT, lpszText, 0, 0, 0, 0);
\r
2980 DWORD_PTR GetItemData(int nItem) const
\r
2982 ATLASSERT(::IsWindow(m_hWnd));
\r
2983 LVITEM lvi = { 0 };
\r
2984 lvi.iItem = nItem;
\r
2985 lvi.mask = LVIF_PARAM;
\r
2986 BOOL bRet = (BOOL)::SendMessage(m_hWnd, LVM_GETITEM, 0, (LPARAM)&lvi);
\r
2987 return (DWORD_PTR)(bRet ? lvi.lParam : NULL);
\r
2990 BOOL SetItemData(int nItem, DWORD_PTR dwData)
\r
2992 ATLASSERT(::IsWindow(m_hWnd));
\r
2993 return SetItem(nItem, 0, LVIF_PARAM, NULL, 0, 0, 0, (LPARAM)dwData);
\r
2996 UINT GetCallbackMask() const
\r
2998 ATLASSERT(::IsWindow(m_hWnd));
\r
2999 return (UINT)::SendMessage(m_hWnd, LVM_GETCALLBACKMASK, 0, 0L);
\r
3002 BOOL SetCallbackMask(UINT nMask)
\r
3004 ATLASSERT(::IsWindow(m_hWnd));
\r
3005 return (BOOL)::SendMessage(m_hWnd, LVM_SETCALLBACKMASK, nMask, 0L);
\r
3008 BOOL GetItemPosition(int nItem, LPPOINT lpPoint) const
\r
3010 ATLASSERT(::IsWindow(m_hWnd));
\r
3011 return (BOOL)::SendMessage(m_hWnd, LVM_GETITEMPOSITION, nItem, (LPARAM)lpPoint);
\r
3014 BOOL SetItemPosition(int nItem, POINT pt)
\r
3016 ATLASSERT(::IsWindow(m_hWnd));
\r
3017 ATLASSERT(((GetStyle() & LVS_TYPEMASK) == LVS_ICON) || ((GetStyle() & LVS_TYPEMASK) == LVS_SMALLICON));
\r
3018 return (BOOL)::SendMessage(m_hWnd, LVM_SETITEMPOSITION32, nItem, (LPARAM)&pt);
\r
3021 BOOL SetItemPosition(int nItem, int x, int y)
\r
3023 ATLASSERT(::IsWindow(m_hWnd));
\r
3024 ATLASSERT(((GetStyle() & LVS_TYPEMASK) == LVS_ICON) || ((GetStyle() & LVS_TYPEMASK) == LVS_SMALLICON));
\r
3025 POINT pt = { x, y };
\r
3026 return (BOOL)::SendMessage(m_hWnd, LVM_SETITEMPOSITION32, nItem, (LPARAM)&pt);
\r
3029 int GetStringWidth(LPCTSTR lpsz) const
\r
3031 ATLASSERT(::IsWindow(m_hWnd));
\r
3032 return (int)::SendMessage(m_hWnd, LVM_GETSTRINGWIDTH, 0, (LPARAM)lpsz);
\r
3035 CEdit GetEditControl() const
\r
3037 ATLASSERT(::IsWindow(m_hWnd));
\r
3038 return CEdit((HWND)::SendMessage(m_hWnd, LVM_GETEDITCONTROL, 0, 0L));
\r
3041 BOOL GetColumn(int nCol, LVCOLUMN* pColumn) const
\r
3043 ATLASSERT(::IsWindow(m_hWnd));
\r
3044 return (BOOL)::SendMessage(m_hWnd, LVM_GETCOLUMN, nCol, (LPARAM)pColumn);
\r
3047 BOOL SetColumn(int nCol, const LVCOLUMN* pColumn)
\r
3049 ATLASSERT(::IsWindow(m_hWnd));
\r
3050 return (BOOL)::SendMessage(m_hWnd, LVM_SETCOLUMN, nCol, (LPARAM)pColumn);
\r
3053 int GetColumnWidth(int nCol) const
\r
3055 ATLASSERT(::IsWindow(m_hWnd));
\r
3056 return (int)::SendMessage(m_hWnd, LVM_GETCOLUMNWIDTH, nCol, 0L);
\r
3059 BOOL SetColumnWidth(int nCol, int cx)
\r
3061 ATLASSERT(::IsWindow(m_hWnd));
\r
3062 return (BOOL)::SendMessage(m_hWnd, LVM_SETCOLUMNWIDTH, nCol, MAKELPARAM(cx, 0));
\r
3065 BOOL GetViewRect(LPRECT lpRect) const
\r
3067 ATLASSERT(::IsWindow(m_hWnd));
\r
3068 return (BOOL)::SendMessage(m_hWnd, LVM_GETVIEWRECT, 0, (LPARAM)lpRect);
\r
3071 COLORREF GetTextColor() const
\r
3073 ATLASSERT(::IsWindow(m_hWnd));
\r
3074 return (COLORREF)::SendMessage(m_hWnd, LVM_GETTEXTCOLOR, 0, 0L);
\r
3077 BOOL SetTextColor(COLORREF cr)
\r
3079 ATLASSERT(::IsWindow(m_hWnd));
\r
3080 return (BOOL)::SendMessage(m_hWnd, LVM_SETTEXTCOLOR, 0, cr);
\r
3083 COLORREF GetTextBkColor() const
\r
3085 ATLASSERT(::IsWindow(m_hWnd));
\r
3086 return (COLORREF)::SendMessage(m_hWnd, LVM_GETTEXTBKCOLOR, 0, 0L);
\r
3089 BOOL SetTextBkColor(COLORREF cr)
\r
3091 ATLASSERT(::IsWindow(m_hWnd));
\r
3092 return (BOOL)::SendMessage(m_hWnd, LVM_SETTEXTBKCOLOR, 0, cr);
\r
3095 int GetTopIndex() const
\r
3097 ATLASSERT(::IsWindow(m_hWnd));
\r
3098 return (int)::SendMessage(m_hWnd, LVM_GETTOPINDEX, 0, 0L);
\r
3101 int GetCountPerPage() const
\r
3103 ATLASSERT(::IsWindow(m_hWnd));
\r
3104 return (int)::SendMessage(m_hWnd, LVM_GETCOUNTPERPAGE, 0, 0L);
\r
3107 BOOL GetOrigin(LPPOINT lpPoint) const
\r
3109 ATLASSERT(::IsWindow(m_hWnd));
\r
3110 return (BOOL)::SendMessage(m_hWnd, LVM_GETORIGIN, 0, (LPARAM)lpPoint);
\r
3113 UINT GetSelectedCount() const
\r
3115 ATLASSERT(::IsWindow(m_hWnd));
\r
3116 return (UINT)::SendMessage(m_hWnd, LVM_GETSELECTEDCOUNT, 0, 0L);
\r
3119 BOOL GetItemRect(int nItem, LPRECT lpRect, UINT nCode) const
\r
3121 ATLASSERT(::IsWindow(m_hWnd));
\r
3122 lpRect->left = nCode;
\r
3123 return (BOOL)::SendMessage(m_hWnd, LVM_GETITEMRECT, (WPARAM)nItem, (LPARAM)lpRect);
\r
3126 #ifndef _WIN32_WCE
\r
3127 HCURSOR GetHotCursor() const
\r
3129 ATLASSERT(::IsWindow(m_hWnd));
\r
3130 return (HCURSOR)::SendMessage(m_hWnd, LVM_GETHOTCURSOR, 0, 0L);
\r
3133 HCURSOR SetHotCursor(HCURSOR hHotCursor)
\r
3135 ATLASSERT(::IsWindow(m_hWnd));
\r
3136 return (HCURSOR)::SendMessage(m_hWnd, LVM_SETHOTCURSOR, 0, (LPARAM)hHotCursor);
\r
3139 int GetHotItem() const
\r
3141 ATLASSERT(::IsWindow(m_hWnd));
\r
3142 return (int)::SendMessage(m_hWnd, LVM_GETHOTITEM, 0, 0L);
\r
3145 int SetHotItem(int nIndex)
\r
3147 ATLASSERT(::IsWindow(m_hWnd));
\r
3148 return (int)::SendMessage(m_hWnd, LVM_SETHOTITEM, nIndex, 0L);
\r
3150 #endif // !_WIN32_WCE
\r
3152 BOOL GetColumnOrderArray(int nCount, int* lpnArray) const
\r
3154 ATLASSERT(::IsWindow(m_hWnd));
\r
3155 return (BOOL)::SendMessage(m_hWnd, LVM_GETCOLUMNORDERARRAY, nCount, (LPARAM)lpnArray);
\r
3158 BOOL SetColumnOrderArray(int nCount, int* lpnArray)
\r
3160 ATLASSERT(::IsWindow(m_hWnd));
\r
3161 return (BOOL)::SendMessage(m_hWnd, LVM_SETCOLUMNORDERARRAY, nCount, (LPARAM)lpnArray);
\r
3164 CHeaderCtrl GetHeader() const
\r
3166 ATLASSERT(::IsWindow(m_hWnd));
\r
3167 return CHeaderCtrl((HWND)::SendMessage(m_hWnd, LVM_GETHEADER, 0, 0L));
\r
3170 BOOL GetSubItemRect(int nItem, int nSubItem, int nFlag, LPRECT lpRect) const
\r
3172 ATLASSERT(::IsWindow(m_hWnd));
\r
3173 ATLASSERT((GetStyle() & LVS_TYPEMASK) == LVS_REPORT);
\r
3174 ATLASSERT(lpRect != NULL);
\r
3175 lpRect->top = nSubItem;
\r
3176 lpRect->left = nFlag;
\r
3177 return (BOOL)::SendMessage(m_hWnd, LVM_GETSUBITEMRECT, nItem, (LPARAM)lpRect);
\r
3180 DWORD SetIconSpacing(int cx, int cy)
\r
3182 ATLASSERT(::IsWindow(m_hWnd));
\r
3183 ATLASSERT((GetStyle() & LVS_TYPEMASK) == LVS_ICON);
\r
3184 return (DWORD)::SendMessage(m_hWnd, LVM_SETICONSPACING, 0, MAKELPARAM(cx, cy));
\r
3187 int GetISearchString(LPTSTR lpstr) const
\r
3189 ATLASSERT(::IsWindow(m_hWnd));
\r
3190 return (int)::SendMessage(m_hWnd, LVM_GETISEARCHSTRING, 0, (LPARAM)lpstr);
\r
3193 void GetItemSpacing(SIZE& sizeSpacing, BOOL bSmallIconView = FALSE) const
\r
3195 ATLASSERT(::IsWindow(m_hWnd));
\r
3196 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, LVM_GETITEMSPACING, bSmallIconView, 0L);
\r
3197 sizeSpacing.cx = GET_X_LPARAM(dwRet);
\r
3198 sizeSpacing.cy = GET_Y_LPARAM(dwRet);
\r
3201 #if (_WIN32_WCE >= 410)
\r
3202 void SetItemSpacing(INT cySpacing)
\r
3204 ATLASSERT(::IsWindow(m_hWnd));
\r
3205 ListView_SetItemSpacing(m_hWnd, cySpacing);
\r
3207 #endif // (_WIN32_WCE >= 410)
\r
3209 // single-selection only
\r
3210 int GetSelectedIndex() const
\r
3212 ATLASSERT(::IsWindow(m_hWnd));
\r
3213 ATLASSERT((GetStyle() & LVS_SINGLESEL) != 0);
\r
3214 return (int)::SendMessage(m_hWnd, LVM_GETNEXTITEM, (WPARAM)-1, MAKELPARAM(LVNI_ALL | LVNI_SELECTED, 0));
\r
3217 BOOL GetSelectedItem(LPLVITEM pItem) const
\r
3219 ATLASSERT(::IsWindow(m_hWnd));
\r
3220 ATLASSERT((GetStyle() & LVS_SINGLESEL) != 0);
\r
3221 ATLASSERT(pItem != NULL);
\r
3222 pItem->iItem = (int)::SendMessage(m_hWnd, LVM_GETNEXTITEM, (WPARAM)-1, MAKELPARAM(LVNI_ALL | LVNI_SELECTED, 0));
\r
3223 if(pItem->iItem == -1)
\r
3225 return (BOOL)::SendMessage(m_hWnd, LVM_GETITEM, 0, (LPARAM)pItem);
\r
3228 // extended list view styles
\r
3229 DWORD GetExtendedListViewStyle() const
\r
3231 ATLASSERT(::IsWindow(m_hWnd));
\r
3232 return (DWORD)::SendMessage(m_hWnd, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0L);
\r
3235 // dwExMask = 0 means all styles
\r
3236 DWORD SetExtendedListViewStyle(DWORD dwExStyle, DWORD dwExMask = 0)
\r
3238 ATLASSERT(::IsWindow(m_hWnd));
\r
3239 return (DWORD)::SendMessage(m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, dwExMask, dwExStyle);
\r
3242 // checkboxes only
\r
3243 BOOL GetCheckState(int nIndex) const
\r
3245 ATLASSERT(::IsWindow(m_hWnd));
\r
3246 ATLASSERT((GetExtendedListViewStyle() & LVS_EX_CHECKBOXES) != 0);
\r
3247 UINT uRet = GetItemState(nIndex, LVIS_STATEIMAGEMASK);
\r
3248 return (uRet >> 12) - 1;
\r
3251 BOOL SetCheckState(int nItem, BOOL bCheck)
\r
3253 int nCheck = bCheck ? 2 : 1; // one based index
\r
3254 return SetItemState(nItem, INDEXTOSTATEIMAGEMASK(nCheck), LVIS_STATEIMAGEMASK);
\r
3258 DWORD GetViewType() const
\r
3260 ATLASSERT(::IsWindow(m_hWnd));
\r
3261 return (GetStyle() & LVS_TYPEMASK);
\r
3264 DWORD SetViewType(DWORD dwType)
\r
3266 ATLASSERT(::IsWindow(m_hWnd));
\r
3267 ATLASSERT(dwType == LVS_ICON || dwType == LVS_SMALLICON || dwType == LVS_LIST || dwType == LVS_REPORT);
\r
3268 DWORD dwOldType = GetViewType();
\r
3269 if(dwType != dwOldType)
\r
3270 ModifyStyle(LVS_TYPEMASK, (dwType & LVS_TYPEMASK));
\r
3274 #if (_WIN32_IE >= 0x0400)
\r
3275 #ifndef _WIN32_WCE
\r
3276 BOOL GetBkImage(LPLVBKIMAGE plvbki) const
\r
3278 ATLASSERT(::IsWindow(m_hWnd));
\r
3279 return (BOOL)::SendMessage(m_hWnd, LVM_GETBKIMAGE, 0, (LPARAM)plvbki);
\r
3282 BOOL SetBkImage(LPLVBKIMAGE plvbki)
\r
3284 ATLASSERT(::IsWindow(m_hWnd));
\r
3285 return (BOOL)::SendMessage(m_hWnd, LVM_SETBKIMAGE, 0, (LPARAM)plvbki);
\r
3287 #endif // !_WIN32_WCE
\r
3289 int GetSelectionMark() const
\r
3291 ATLASSERT(::IsWindow(m_hWnd));
\r
3292 return (int)::SendMessage(m_hWnd, LVM_GETSELECTIONMARK, 0, 0L);
\r
3295 int SetSelectionMark(int nIndex)
\r
3297 ATLASSERT(::IsWindow(m_hWnd));
\r
3298 return (int)::SendMessage(m_hWnd, LVM_SETSELECTIONMARK, 0, nIndex);
\r
3301 #ifndef _WIN32_WCE
\r
3302 BOOL GetWorkAreas(int nWorkAreas, LPRECT lpRect) const
\r
3304 ATLASSERT(::IsWindow(m_hWnd));
\r
3305 return (BOOL)::SendMessage(m_hWnd, LVM_GETWORKAREAS, nWorkAreas, (LPARAM)lpRect);
\r
3308 BOOL SetWorkAreas(int nWorkAreas, LPRECT lpRect)
\r
3310 ATLASSERT(::IsWindow(m_hWnd));
\r
3311 return (BOOL)::SendMessage(m_hWnd, LVM_SETWORKAREAS, nWorkAreas, (LPARAM)lpRect);
\r
3314 DWORD GetHoverTime() const
\r
3316 ATLASSERT(::IsWindow(m_hWnd));
\r
3317 ATLASSERT((GetExtendedListViewStyle() & (LVS_EX_TRACKSELECT | LVS_EX_ONECLICKACTIVATE | LVS_EX_TWOCLICKACTIVATE)) != 0);
\r
3318 return (DWORD)::SendMessage(m_hWnd, LVM_GETHOVERTIME, 0, 0L);
\r
3321 DWORD SetHoverTime(DWORD dwHoverTime)
\r
3323 ATLASSERT(::IsWindow(m_hWnd));
\r
3324 ATLASSERT((GetExtendedListViewStyle() & (LVS_EX_TRACKSELECT | LVS_EX_ONECLICKACTIVATE | LVS_EX_TWOCLICKACTIVATE)) != 0);
\r
3325 return (DWORD)::SendMessage(m_hWnd, LVM_SETHOVERTIME, 0, dwHoverTime);
\r
3328 BOOL GetNumberOfWorkAreas(int* pnWorkAreas) const
\r
3330 ATLASSERT(::IsWindow(m_hWnd));
\r
3331 return (BOOL)::SendMessage(m_hWnd, LVM_GETNUMBEROFWORKAREAS, 0, (LPARAM)pnWorkAreas);
\r
3333 #endif // !_WIN32_WCE
\r
3335 BOOL SetItemCountEx(int nItems, DWORD dwFlags)
\r
3337 ATLASSERT(::IsWindow(m_hWnd));
\r
3338 ATLASSERT(((GetStyle() & LVS_OWNERDATA) != 0) && (((GetStyle() & LVS_TYPEMASK) == LVS_REPORT) || ((GetStyle() & LVS_TYPEMASK) == LVS_LIST)));
\r
3339 return (BOOL)::SendMessage(m_hWnd, LVM_SETITEMCOUNT, nItems, dwFlags);
\r
3342 #ifndef _WIN32_WCE
\r
3343 CToolTipCtrl GetToolTips() const
\r
3345 ATLASSERT(::IsWindow(m_hWnd));
\r
3346 return CToolTipCtrl((HWND)::SendMessage(m_hWnd, LVM_GETTOOLTIPS, 0, 0L));
\r
3349 CToolTipCtrl SetToolTips(HWND hWndTT)
\r
3351 ATLASSERT(::IsWindow(m_hWnd));
\r
3352 return CToolTipCtrl((HWND)::SendMessage(m_hWnd, LVM_SETTOOLTIPS, (WPARAM)hWndTT, 0L));
\r
3355 BOOL GetUnicodeFormat() const
\r
3357 ATLASSERT(::IsWindow(m_hWnd));
\r
3358 return (BOOL)::SendMessage(m_hWnd, LVM_GETUNICODEFORMAT, 0, 0L);
\r
3361 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
\r
3363 ATLASSERT(::IsWindow(m_hWnd));
\r
3364 return (BOOL)::SendMessage(m_hWnd, LVM_SETUNICODEFORMAT, bUnicode, 0L);
\r
3366 #endif // !_WIN32_WCE
\r
3367 #endif // (_WIN32_IE >= 0x0400)
\r
3369 #if (_WIN32_WINNT >= 0x0501)
\r
3370 int GetSelectedColumn() const
\r
3372 ATLASSERT(::IsWindow(m_hWnd));
\r
3373 return (int)::SendMessage(m_hWnd, LVM_GETSELECTEDCOLUMN, 0, 0L);
\r
3376 void SetSelectedColumn(int nColumn)
\r
3378 ATLASSERT(::IsWindow(m_hWnd));
\r
3379 ::SendMessage(m_hWnd, LVM_SETSELECTEDCOLUMN, nColumn, 0L);
\r
3382 DWORD GetView() const
\r
3384 ATLASSERT(::IsWindow(m_hWnd));
\r
3385 return (DWORD)::SendMessage(m_hWnd, LVM_GETVIEW, 0, 0L);
\r
3388 int SetView(DWORD dwView)
\r
3390 ATLASSERT(::IsWindow(m_hWnd));
\r
3391 return (int)::SendMessage(m_hWnd, LVM_SETVIEW, dwView, 0L);
\r
3394 BOOL IsGroupViewEnabled() const
\r
3396 ATLASSERT(::IsWindow(m_hWnd));
\r
3397 return (BOOL)::SendMessage(m_hWnd, LVM_ISGROUPVIEWENABLED, 0, 0L);
\r
3400 int GetGroupInfo(int nGroupID, PLVGROUP pGroup) const
\r
3402 ATLASSERT(::IsWindow(m_hWnd));
\r
3403 return (int)::SendMessage(m_hWnd, LVM_GETGROUPINFO, nGroupID, (LPARAM)pGroup);
\r
3406 int SetGroupInfo(int nGroupID, PLVGROUP pGroup)
\r
3408 ATLASSERT(::IsWindow(m_hWnd));
\r
3409 return (int)::SendMessage(m_hWnd, LVM_SETGROUPINFO, nGroupID, (LPARAM)pGroup);
\r
3412 void GetGroupMetrics(PLVGROUPMETRICS pGroupMetrics) const
\r
3414 ATLASSERT(::IsWindow(m_hWnd));
\r
3415 ::SendMessage(m_hWnd, LVM_GETGROUPMETRICS, 0, (LPARAM)pGroupMetrics);
\r
3418 void SetGroupMetrics(PLVGROUPMETRICS pGroupMetrics)
\r
3420 ATLASSERT(::IsWindow(m_hWnd));
\r
3421 ::SendMessage(m_hWnd, LVM_SETGROUPMETRICS, 0, (LPARAM)pGroupMetrics);
\r
3424 void GetTileViewInfo(PLVTILEVIEWINFO pTileViewInfo) const
\r
3426 ATLASSERT(::IsWindow(m_hWnd));
\r
3427 ::SendMessage(m_hWnd, LVM_GETTILEVIEWINFO, 0, (LPARAM)pTileViewInfo);
\r
3430 BOOL SetTileViewInfo(PLVTILEVIEWINFO pTileViewInfo)
\r
3432 ATLASSERT(::IsWindow(m_hWnd));
\r
3433 return (BOOL)::SendMessage(m_hWnd, LVM_SETTILEVIEWINFO, 0, (LPARAM)pTileViewInfo);
\r
3436 void GetTileInfo(PLVTILEINFO pTileInfo) const
\r
3438 ATLASSERT(::IsWindow(m_hWnd));
\r
3439 ::SendMessage(m_hWnd, LVM_GETTILEINFO, 0, (LPARAM)pTileInfo);
\r
3442 BOOL SetTileInfo(PLVTILEINFO pTileInfo)
\r
3444 ATLASSERT(::IsWindow(m_hWnd));
\r
3445 return (BOOL)::SendMessage(m_hWnd, LVM_SETTILEINFO, 0, (LPARAM)pTileInfo);
\r
3448 BOOL GetInsertMark(LPLVINSERTMARK pInsertMark) const
\r
3450 ATLASSERT(::IsWindow(m_hWnd));
\r
3451 return (BOOL)::SendMessage(m_hWnd, LVM_GETINSERTMARK, 0, (LPARAM)pInsertMark);
\r
3454 BOOL SetInsertMark(LPLVINSERTMARK pInsertMark)
\r
3456 ATLASSERT(::IsWindow(m_hWnd));
\r
3457 return (BOOL)::SendMessage(m_hWnd, LVM_SETINSERTMARK, 0, (LPARAM)pInsertMark);
\r
3460 int GetInsertMarkRect(LPRECT lpRect) const
\r
3462 ATLASSERT(::IsWindow(m_hWnd));
\r
3463 return (int)::SendMessage(m_hWnd, LVM_GETINSERTMARKRECT, 0, (LPARAM)lpRect);
\r
3466 COLORREF GetInsertMarkColor() const
\r
3468 ATLASSERT(::IsWindow(m_hWnd));
\r
3469 return (COLORREF)::SendMessage(m_hWnd, LVM_GETINSERTMARKCOLOR, 0, 0L);
\r
3472 COLORREF SetInsertMarkColor(COLORREF clr)
\r
3474 ATLASSERT(::IsWindow(m_hWnd));
\r
3475 return (COLORREF)::SendMessage(m_hWnd, LVM_SETINSERTMARKCOLOR, 0, clr);
\r
3478 COLORREF GetOutlineColor() const
\r
3480 ATLASSERT(::IsWindow(m_hWnd));
\r
3481 return (COLORREF)::SendMessage(m_hWnd, LVM_GETOUTLINECOLOR, 0, 0L);
\r
3484 COLORREF SetOutlineColor(COLORREF clr)
\r
3486 ATLASSERT(::IsWindow(m_hWnd));
\r
3487 return (COLORREF)::SendMessage(m_hWnd, LVM_SETOUTLINECOLOR, 0, clr);
\r
3489 #endif // (_WIN32_WINNT >= 0x0501)
\r
3491 #if (_WIN32_WINNT >= 0x0600)
\r
3492 int GetGroupCount() const
\r
3494 ATLASSERT(::IsWindow(m_hWnd));
\r
3495 return (int)::SendMessage(m_hWnd, LVM_GETGROUPCOUNT, 0, 0L);
\r
3498 BOOL GetGroupInfoByIndex(int nIndex, PLVGROUP pGroup) const
\r
3500 ATLASSERT(::IsWindow(m_hWnd));
\r
3501 return (BOOL)::SendMessage(m_hWnd, LVM_GETGROUPINFOBYINDEX, nIndex, (LPARAM)pGroup);
\r
3504 BOOL GetGroupRect(int nGroupID, int nType, LPRECT lpRect) const
\r
3506 ATLASSERT(::IsWindow(m_hWnd));
\r
3507 ATLASSERT(lpRect != NULL);
\r
3508 if(lpRect != NULL)
\r
3509 lpRect->top = nType;
\r
3510 return (BOOL)::SendMessage(m_hWnd, LVM_GETGROUPRECT, nGroupID, (LPARAM)lpRect);
\r
3513 UINT GetGroupState(int nGroupID, UINT uMask) const
\r
3515 ATLASSERT(::IsWindow(m_hWnd));
\r
3516 return (UINT)::SendMessage(m_hWnd, LVM_GETGROUPSTATE, nGroupID, (LPARAM)uMask);
\r
3519 int GetFocusedGroup() const
\r
3521 ATLASSERT(::IsWindow(m_hWnd));
\r
3522 return (int)::SendMessage(m_hWnd, LVM_GETFOCUSEDGROUP, 0, 0L);
\r
3525 BOOL GetEmptyText(LPWSTR lpstrText, int cchText) const
\r
3527 ATLASSERT(::IsWindow(m_hWnd));
\r
3528 return (BOOL)::SendMessage(m_hWnd, LVM_GETEMPTYTEXT, cchText, (LPARAM)lpstrText);
\r
3531 BOOL GetFooterRect(LPRECT lpRect) const
\r
3533 ATLASSERT(::IsWindow(m_hWnd));
\r
3534 return (BOOL)::SendMessage(m_hWnd, LVM_GETFOOTERRECT, 0, (LPARAM)lpRect);
\r
3537 BOOL GetFooterInfo(LPLVFOOTERINFO lpFooterInfo) const
\r
3539 ATLASSERT(::IsWindow(m_hWnd));
\r
3540 return (BOOL)::SendMessage(m_hWnd, LVM_GETFOOTERINFO, 0, (LPARAM)lpFooterInfo);
\r
3543 BOOL GetFooterItemRect(int nItem, LPRECT lpRect) const
\r
3545 ATLASSERT(::IsWindow(m_hWnd));
\r
3546 return (BOOL)::SendMessage(m_hWnd, LVM_GETFOOTERITEMRECT, nItem, (LPARAM)lpRect);
\r
3549 BOOL GetFooterItem(int nItem, LPLVFOOTERITEM lpFooterItem) const
\r
3551 ATLASSERT(::IsWindow(m_hWnd));
\r
3552 return (BOOL)::SendMessage(m_hWnd, LVM_GETFOOTERITEM, nItem, (LPARAM)lpFooterItem);
\r
3555 BOOL GetItemIndexRect(PLVITEMINDEX pItemIndex, int nSubItem, int nType, LPRECT lpRect) const
\r
3557 ATLASSERT(::IsWindow(m_hWnd));
\r
3558 ATLASSERT(pItemIndex != NULL);
\r
3559 ATLASSERT(lpRect != NULL);
\r
3560 if(lpRect != NULL)
\r
3562 lpRect->top = nSubItem;
\r
3563 lpRect->left = nType;
\r
3565 return (BOOL)::SendMessage(m_hWnd, LVM_GETITEMINDEXRECT, (WPARAM)pItemIndex, (LPARAM)lpRect);
\r
3568 BOOL SetItemIndexState(PLVITEMINDEX pItemIndex, UINT uState, UINT dwMask)
\r
3570 ATLASSERT(::IsWindow(m_hWnd));
\r
3571 LVITEM lvi = { 0 };
\r
3572 lvi.state = uState;
\r
3573 lvi.stateMask = dwMask;
\r
3574 return (BOOL)::SendMessage(m_hWnd, LVM_SETITEMINDEXSTATE, (WPARAM)pItemIndex, (LPARAM)&lvi);
\r
3577 BOOL GetNextItemIndex(PLVITEMINDEX pItemIndex, WORD wFlags) const
\r
3579 ATLASSERT(::IsWindow(m_hWnd));
\r
3580 return (BOOL)::SendMessage(m_hWnd, LVM_GETNEXTITEMINDEX, (WPARAM)pItemIndex, MAKELPARAM(wFlags, 0));
\r
3582 #endif // (_WIN32_WINNT >= 0x0600)
\r
3585 int InsertColumn(int nCol, const LVCOLUMN* pColumn)
\r
3587 ATLASSERT(::IsWindow(m_hWnd));
\r
3588 return (int)::SendMessage(m_hWnd, LVM_INSERTCOLUMN, nCol, (LPARAM)pColumn);
\r
3591 int InsertColumn(int nCol, LPCTSTR lpszColumnHeading, int nFormat = LVCFMT_LEFT,
\r
3592 int nWidth = -1, int nSubItem = -1, int iImage = -1, int iOrder = -1)
\r
3594 LVCOLUMN column = { 0 };
\r
3595 column.mask = LVCF_TEXT|LVCF_FMT;
\r
3596 column.pszText = (LPTSTR)lpszColumnHeading;
\r
3597 column.fmt = nFormat;
\r
3600 column.mask |= LVCF_WIDTH;
\r
3601 column.cx = nWidth;
\r
3603 if (nSubItem != -1)
\r
3605 column.mask |= LVCF_SUBITEM;
\r
3606 column.iSubItem = nSubItem;
\r
3610 column.mask |= LVCF_IMAGE;
\r
3611 column.iImage = iImage;
\r
3615 column.mask |= LVCF_ORDER;
\r
3616 column.iOrder = iOrder;
\r
3618 return InsertColumn(nCol, &column);
\r
3621 BOOL DeleteColumn(int nCol)
\r
3623 ATLASSERT(::IsWindow(m_hWnd));
\r
3624 return (BOOL)::SendMessage(m_hWnd, LVM_DELETECOLUMN, nCol, 0L);
\r
3627 int InsertItem(UINT nMask, int nItem, LPCTSTR lpszItem, UINT nState, UINT nStateMask, int nImage, LPARAM lParam)
\r
3629 ATLASSERT(::IsWindow(m_hWnd));
\r
3630 LVITEM item = { 0 };
\r
3631 item.mask = nMask;
\r
3632 item.iItem = nItem;
\r
3633 item.iSubItem = 0;
\r
3634 item.pszText = (LPTSTR)lpszItem;
\r
3635 item.state = nState;
\r
3636 item.stateMask = nStateMask;
\r
3637 item.iImage = nImage;
\r
3638 item.lParam = lParam;
\r
3639 return InsertItem(&item);
\r
3642 int InsertItem(const LVITEM* pItem)
\r
3644 ATLASSERT(::IsWindow(m_hWnd));
\r
3645 return (int)::SendMessage(m_hWnd, LVM_INSERTITEM, 0, (LPARAM)pItem);
\r
3648 int InsertItem(int nItem, LPCTSTR lpszItem)
\r
3650 ATLASSERT(::IsWindow(m_hWnd));
\r
3651 return InsertItem(LVIF_TEXT, nItem, lpszItem, 0, 0, 0, 0);
\r
3654 int InsertItem(int nItem, LPCTSTR lpszItem, int nImage)
\r
3656 ATLASSERT(::IsWindow(m_hWnd));
\r
3657 return InsertItem(LVIF_TEXT|LVIF_IMAGE, nItem, lpszItem, 0, 0, nImage, 0);
\r
3660 int GetNextItem(int nItem, int nFlags) const
\r
3662 ATLASSERT(::IsWindow(m_hWnd));
\r
3663 return (int)::SendMessage(m_hWnd, LVM_GETNEXTITEM, nItem, MAKELPARAM(nFlags, 0));
\r
3666 BOOL DeleteItem(int nItem)
\r
3668 ATLASSERT(::IsWindow(m_hWnd));
\r
3669 return (BOOL)::SendMessage(m_hWnd, LVM_DELETEITEM, nItem, 0L);
\r
3672 BOOL DeleteAllItems()
\r
3674 ATLASSERT(::IsWindow(m_hWnd));
\r
3675 return (BOOL)::SendMessage(m_hWnd, LVM_DELETEALLITEMS, 0, 0L);
\r
3678 int FindItem(LVFINDINFO* pFindInfo, int nStart) const
\r
3680 ATLASSERT(::IsWindow(m_hWnd));
\r
3681 return (int)::SendMessage(m_hWnd, LVM_FINDITEM, nStart, (LPARAM)pFindInfo);
\r
3684 int HitTest(LVHITTESTINFO* pHitTestInfo) const
\r
3686 ATLASSERT(::IsWindow(m_hWnd));
\r
3687 return (int)::SendMessage(m_hWnd, LVM_HITTEST, 0, (LPARAM)pHitTestInfo);
\r
3690 int HitTest(POINT pt, UINT* pFlags) const
\r
3692 ATLASSERT(::IsWindow(m_hWnd));
\r
3693 LVHITTESTINFO hti = { 0 };
\r
3695 int nRes = (int)::SendMessage(m_hWnd, LVM_HITTEST, 0, (LPARAM)&hti);
\r
3696 if (pFlags != NULL)
\r
3697 *pFlags = hti.flags;
\r
3701 BOOL EnsureVisible(int nItem, BOOL bPartialOK)
\r
3703 ATLASSERT(::IsWindow(m_hWnd));
\r
3704 return (BOOL)::SendMessage(m_hWnd, LVM_ENSUREVISIBLE, nItem, MAKELPARAM(bPartialOK, 0));
\r
3707 BOOL Scroll(SIZE size)
\r
3709 ATLASSERT(::IsWindow(m_hWnd));
\r
3710 return (BOOL)::SendMessage(m_hWnd, LVM_SCROLL, size.cx, size.cy);
\r
3713 BOOL RedrawItems(int nFirst, int nLast)
\r
3715 ATLASSERT(::IsWindow(m_hWnd));
\r
3716 return (BOOL)::SendMessage(m_hWnd, LVM_REDRAWITEMS, nFirst, nLast);
\r
3719 BOOL Arrange(UINT nCode)
\r
3721 ATLASSERT(::IsWindow(m_hWnd));
\r
3722 return (BOOL)::SendMessage(m_hWnd, LVM_ARRANGE, nCode, 0L);
\r
3725 CEdit EditLabel(int nItem)
\r
3727 ATLASSERT(::IsWindow(m_hWnd));
\r
3728 return CEdit((HWND)::SendMessage(m_hWnd, LVM_EDITLABEL, nItem, 0L));
\r
3731 BOOL Update(int nItem)
\r
3733 ATLASSERT(::IsWindow(m_hWnd));
\r
3734 return (BOOL)::SendMessage(m_hWnd, LVM_UPDATE, nItem, 0L);
\r
3737 BOOL SortItems(PFNLVCOMPARE pfnCompare, LPARAM lParamSort)
\r
3739 ATLASSERT(::IsWindow(m_hWnd));
\r
3740 return (BOOL)::SendMessage(m_hWnd, LVM_SORTITEMS, (WPARAM)lParamSort, (LPARAM)pfnCompare);
\r
3743 CImageList RemoveImageList(int nImageList)
\r
3745 ATLASSERT(::IsWindow(m_hWnd));
\r
3746 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, LVM_SETIMAGELIST, (WPARAM)nImageList, NULL));
\r
3749 CImageList CreateDragImage(int nItem, LPPOINT lpPoint)
\r
3751 ATLASSERT(::IsWindow(m_hWnd));
\r
3752 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, LVM_CREATEDRAGIMAGE, nItem, (LPARAM)lpPoint));
\r
3755 DWORD ApproximateViewRect(int cx = -1, int cy = -1, int nCount = -1)
\r
3757 ATLASSERT(::IsWindow(m_hWnd));
\r
3758 return (DWORD)::SendMessage(m_hWnd, LVM_APPROXIMATEVIEWRECT, nCount, MAKELPARAM(cx, cy));
\r
3761 int SubItemHitTest(LPLVHITTESTINFO lpInfo) const
\r
3763 ATLASSERT(::IsWindow(m_hWnd));
\r
3764 return (int)::SendMessage(m_hWnd, LVM_SUBITEMHITTEST, 0, (LPARAM)lpInfo);
\r
3767 int AddColumn(LPCTSTR strItem, int nItem, int nSubItem = -1,
\r
3768 int nMask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM,
\r
3769 int nFmt = LVCFMT_LEFT)
\r
3771 const int cxOffset = 15;
\r
3772 ATLASSERT(::IsWindow(m_hWnd));
\r
3773 LVCOLUMN lvc = { 0 };
\r
3776 lvc.pszText = (LPTSTR)strItem;
\r
3777 lvc.cx = GetStringWidth(lvc.pszText) + cxOffset;
\r
3778 if(nMask & LVCF_SUBITEM)
\r
3779 lvc.iSubItem = (nSubItem != -1) ? nSubItem : nItem;
\r
3780 return InsertColumn(nItem, &lvc);
\r
3783 int AddItem(int nItem, int nSubItem, LPCTSTR strItem, int nImageIndex = -1)
\r
3785 ATLASSERT(::IsWindow(m_hWnd));
\r
3786 LVITEM lvItem = { 0 };
\r
3787 lvItem.mask = LVIF_TEXT;
\r
3788 lvItem.iItem = nItem;
\r
3789 lvItem.iSubItem = nSubItem;
\r
3790 lvItem.pszText = (LPTSTR)strItem;
\r
3791 if(nImageIndex != -1)
\r
3793 lvItem.mask |= LVIF_IMAGE;
\r
3794 lvItem.iImage = nImageIndex;
\r
3797 return InsertItem(&lvItem);
\r
3798 return SetItem(&lvItem) ? nItem : -1;
\r
3801 #if (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)
\r
3802 BOOL SortItemsEx(PFNLVCOMPARE pfnCompare, LPARAM lParamSort)
\r
3804 ATLASSERT(::IsWindow(m_hWnd));
\r
3805 return (BOOL)::SendMessage(m_hWnd, LVM_SORTITEMSEX, (WPARAM)lParamSort, (LPARAM)pfnCompare);
\r
3807 #endif // (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)
\r
3809 #if (_WIN32_WINNT >= 0x0501)
\r
3810 int InsertGroup(int nItem, PLVGROUP pGroup)
\r
3812 ATLASSERT(::IsWindow(m_hWnd));
\r
3813 return (int)::SendMessage(m_hWnd, LVM_INSERTGROUP, nItem, (LPARAM)pGroup);
\r
3816 int AddGroup(PLVGROUP pGroup)
\r
3818 return InsertGroup(-1, pGroup);
\r
3821 int RemoveGroup(int nGroupID)
\r
3823 ATLASSERT(::IsWindow(m_hWnd));
\r
3824 return (int)::SendMessage(m_hWnd, LVM_REMOVEGROUP, nGroupID, 0L);
\r
3827 void MoveGroup(int nGroupID, int nItem)
\r
3829 ATLASSERT(::IsWindow(m_hWnd));
\r
3830 ::SendMessage(m_hWnd, LVM_MOVEGROUP, nGroupID, nItem);
\r
3833 void MoveItemToGroup(int nItem, int nGroupID)
\r
3835 ATLASSERT(::IsWindow(m_hWnd));
\r
3836 ::SendMessage(m_hWnd, LVM_MOVEITEMTOGROUP, nItem, nGroupID);
\r
3839 int EnableGroupView(BOOL bEnable)
\r
3841 ATLASSERT(::IsWindow(m_hWnd));
\r
3842 return (int)::SendMessage(m_hWnd, LVM_ENABLEGROUPVIEW, bEnable, 0L);
\r
3845 int SortGroups(PFNLVGROUPCOMPARE pCompareFunc, LPVOID lpVoid = NULL)
\r
3847 ATLASSERT(::IsWindow(m_hWnd));
\r
3848 return (int)::SendMessage(m_hWnd, LVM_SORTGROUPS, (WPARAM)pCompareFunc, (LPARAM)lpVoid);
\r
3851 void InsertGroupSorted(PLVINSERTGROUPSORTED pInsertGroupSorted)
\r
3853 ATLASSERT(::IsWindow(m_hWnd));
\r
3854 ::SendMessage(m_hWnd, LVM_INSERTGROUPSORTED, (WPARAM)pInsertGroupSorted, 0L);
\r
3857 void RemoveAllGroups()
\r
3859 ATLASSERT(::IsWindow(m_hWnd));
\r
3860 ::SendMessage(m_hWnd, LVM_REMOVEALLGROUPS, 0, 0L);
\r
3863 BOOL HasGroup(int nGroupID)
\r
3865 ATLASSERT(::IsWindow(m_hWnd));
\r
3866 return (BOOL)::SendMessage(m_hWnd, LVM_HASGROUP, nGroupID, 0L);
\r
3869 BOOL InsertMarkHitTest(LPPOINT lpPoint, LPLVINSERTMARK pInsertMark) const
\r
3871 ATLASSERT(::IsWindow(m_hWnd));
\r
3872 return (BOOL)::SendMessage(m_hWnd, LVM_INSERTMARKHITTEST, (WPARAM)lpPoint, (LPARAM)pInsertMark);
\r
3875 BOOL SetInfoTip(PLVSETINFOTIP pSetInfoTip)
\r
3877 ATLASSERT(::IsWindow(m_hWnd));
\r
3878 return (BOOL)::SendMessage(m_hWnd, LVM_SETINFOTIP, 0, (LPARAM)pSetInfoTip);
\r
3881 void CancelEditLabel()
\r
3883 ATLASSERT(::IsWindow(m_hWnd));
\r
3884 ::SendMessage(m_hWnd, LVM_CANCELEDITLABEL, 0, 0L);
\r
3887 UINT MapIndexToID(int nIndex) const
\r
3889 ATLASSERT(::IsWindow(m_hWnd));
\r
3890 return (UINT)::SendMessage(m_hWnd, LVM_MAPINDEXTOID, nIndex, 0L);
\r
3893 int MapIDToIndex(UINT uID) const
\r
3895 ATLASSERT(::IsWindow(m_hWnd));
\r
3896 return (int)::SendMessage(m_hWnd, LVM_MAPIDTOINDEX, uID, 0L);
\r
3898 #endif // (_WIN32_WINNT >= 0x0501)
\r
3900 #if (_WIN32_WINNT >= 0x0600)
\r
3901 int HitTestEx(LPLVHITTESTINFO lpHitTestInfo) const
\r
3903 ATLASSERT(::IsWindow(m_hWnd));
\r
3904 return (int)::SendMessage(m_hWnd, LVM_HITTEST, (WPARAM)-1, (LPARAM)lpHitTestInfo);
\r
3907 int HitTestEx(POINT pt, UINT* pFlags) const
\r
3909 ATLASSERT(::IsWindow(m_hWnd));
\r
3910 LVHITTESTINFO hti = { 0 };
\r
3912 int nRes = (int)::SendMessage(m_hWnd, LVM_HITTEST, (WPARAM)-1, (LPARAM)&hti);
\r
3913 if (pFlags != NULL)
\r
3914 *pFlags = hti.flags;
\r
3918 int SubItemHitTestEx(LPLVHITTESTINFO lpHitTestInfo) const
\r
3920 ATLASSERT(::IsWindow(m_hWnd));
\r
3921 return (int)::SendMessage(m_hWnd, LVM_SUBITEMHITTEST, (WPARAM)-1, (LPARAM)lpHitTestInfo);
\r
3923 #endif // (_WIN32_WINNT >= 0x0600)
\r
3925 // single-selection only
\r
3926 BOOL SelectItem(int nIndex)
\r
3928 ATLASSERT(::IsWindow(m_hWnd));
\r
3929 ATLASSERT((GetStyle() & LVS_SINGLESEL) != 0);
\r
3931 BOOL bRet = SetItemState(nIndex, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
\r
3933 bRet = EnsureVisible(nIndex, FALSE);
\r
3938 typedef CListViewCtrlT<ATL::CWindow> CListViewCtrl;
\r
3941 ///////////////////////////////////////////////////////////////////////////////
\r
3944 template <class TBase>
\r
3945 class CTreeViewCtrlT : public TBase
\r
3949 CTreeViewCtrlT(HWND hWnd = NULL) : TBase(hWnd)
\r
3952 CTreeViewCtrlT< TBase >& operator =(HWND hWnd)
\r
3958 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
3959 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
3960 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
3962 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
3966 static LPCTSTR GetWndClassName()
\r
3968 return WC_TREEVIEW;
\r
3971 UINT GetCount() const
\r
3973 ATLASSERT(::IsWindow(m_hWnd));
\r
3974 return (UINT)::SendMessage(m_hWnd, TVM_GETCOUNT, 0, 0L);
\r
3977 UINT GetIndent() const
\r
3979 ATLASSERT(::IsWindow(m_hWnd));
\r
3980 return (UINT)::SendMessage(m_hWnd, TVM_GETINDENT, 0, 0L);
\r
3983 void SetIndent(UINT nIndent)
\r
3985 ATLASSERT(::IsWindow(m_hWnd));
\r
3986 ::SendMessage(m_hWnd, TVM_SETINDENT, nIndent, 0L);
\r
3989 CImageList GetImageList(int nImageListType = TVSIL_NORMAL) const
\r
3991 ATLASSERT(::IsWindow(m_hWnd));
\r
3992 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TVM_GETIMAGELIST, (WPARAM)nImageListType, 0L));
\r
3995 CImageList SetImageList(HIMAGELIST hImageList, int nImageListType = TVSIL_NORMAL)
\r
3997 ATLASSERT(::IsWindow(m_hWnd));
\r
3998 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TVM_SETIMAGELIST, (WPARAM)nImageListType, (LPARAM)hImageList));
\r
4001 BOOL GetItem(LPTVITEM pItem) const
\r
4003 ATLASSERT(::IsWindow(m_hWnd));
\r
4004 return (BOOL)::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPARAM)pItem);
\r
4007 BOOL SetItem(LPTVITEM pItem)
\r
4009 ATLASSERT(::IsWindow(m_hWnd));
\r
4010 return (BOOL)::SendMessage(m_hWnd, TVM_SETITEM, 0, (LPARAM)pItem);
\r
4013 BOOL SetItem(HTREEITEM hItem, UINT nMask, LPCTSTR lpszItem, int nImage,
\r
4014 int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam)
\r
4016 ATLASSERT(::IsWindow(m_hWnd));
\r
4017 TVITEM item = { 0 };
\r
4018 item.hItem = hItem;
\r
4019 item.mask = nMask;
\r
4020 item.pszText = (LPTSTR) lpszItem;
\r
4021 item.iImage = nImage;
\r
4022 item.iSelectedImage = nSelectedImage;
\r
4023 item.state = nState;
\r
4024 item.stateMask = nStateMask;
\r
4025 item.lParam = lParam;
\r
4026 return (BOOL)::SendMessage(m_hWnd, TVM_SETITEM, 0, (LPARAM)&item);
\r
4029 BOOL GetItemText(HTREEITEM hItem, LPTSTR lpstrText, int nLen) const
\r
4031 ATLASSERT(::IsWindow(m_hWnd));
\r
4032 ATLASSERT(lpstrText != NULL);
\r
4034 TVITEM item = { 0 };
\r
4035 item.hItem = hItem;
\r
4036 item.mask = TVIF_TEXT;
\r
4037 item.pszText = lpstrText;
\r
4038 item.cchTextMax = nLen;
\r
4040 return (BOOL)::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPARAM)&item);
\r
4043 #ifndef _ATL_NO_COM
\r
4044 BOOL GetItemText(HTREEITEM hItem, BSTR& bstrText) const
\r
4047 ATLASSERT(::IsWindow(m_hWnd));
\r
4048 ATLASSERT(bstrText == NULL);
\r
4049 TVITEM item = { 0 };
\r
4050 item.hItem = hItem;
\r
4051 item.mask = TVIF_TEXT;
\r
4053 LPTSTR lpstrText = NULL;
\r
4054 BOOL bRet = FALSE;
\r
4055 for(int nLen = 256; ; nLen *= 2)
\r
4057 ATLTRY(lpstrText = new TCHAR[nLen]);
\r
4058 if(lpstrText == NULL)
\r
4060 lpstrText[0] = NULL;
\r
4061 item.pszText = lpstrText;
\r
4062 item.cchTextMax = nLen;
\r
4063 bRet = (BOOL)::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPARAM)&item);
\r
4064 if(!bRet || (lstrlen(item.pszText) < nLen - 1))
\r
4066 delete [] lpstrText;
\r
4070 if(lpstrText != NULL)
\r
4073 bstrText = ::SysAllocString(T2OLE(lpstrText));
\r
4074 delete [] lpstrText;
\r
4077 return (bstrText != NULL) ? TRUE : FALSE;
\r
4079 #endif // !_ATL_NO_COM
\r
4081 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
\r
4082 BOOL GetItemText(HTREEITEM hItem, _CSTRING_NS::CString& strText) const
\r
4084 ATLASSERT(::IsWindow(m_hWnd));
\r
4085 TVITEM item = { 0 };
\r
4086 item.hItem = hItem;
\r
4087 item.mask = TVIF_TEXT;
\r
4090 BOOL bRet = FALSE;
\r
4091 for(int nLen = 256; ; nLen *= 2)
\r
4093 item.pszText = strText.GetBufferSetLength(nLen);
\r
4094 if(item.pszText == NULL)
\r
4099 item.cchTextMax = nLen;
\r
4100 bRet = (BOOL)::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPARAM)&item);
\r
4101 if(!bRet || (lstrlen(item.pszText) < nLen - 1))
\r
4104 strText.ReleaseBuffer();
\r
4107 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
\r
4109 BOOL SetItemText(HTREEITEM hItem, LPCTSTR lpszItem)
\r
4111 ATLASSERT(::IsWindow(m_hWnd));
\r
4112 return SetItem(hItem, TVIF_TEXT, lpszItem, 0, 0, 0, 0, NULL);
\r
4115 BOOL GetItemImage(HTREEITEM hItem, int& nImage, int& nSelectedImage) const
\r
4117 ATLASSERT(::IsWindow(m_hWnd));
\r
4118 TVITEM item = { 0 };
\r
4119 item.hItem = hItem;
\r
4120 item.mask = TVIF_IMAGE|TVIF_SELECTEDIMAGE;
\r
4121 BOOL bRes = (BOOL)::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPARAM)&item);
\r
4124 nImage = item.iImage;
\r
4125 nSelectedImage = item.iSelectedImage;
\r
4130 BOOL SetItemImage(HTREEITEM hItem, int nImage, int nSelectedImage)
\r
4132 ATLASSERT(::IsWindow(m_hWnd));
\r
4133 return SetItem(hItem, TVIF_IMAGE|TVIF_SELECTEDIMAGE, NULL, nImage, nSelectedImage, 0, 0, NULL);
\r
4136 UINT GetItemState(HTREEITEM hItem, UINT nStateMask) const
\r
4138 ATLASSERT(::IsWindow(m_hWnd));
\r
4139 #if (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)
\r
4140 return (((UINT)::SendMessage(m_hWnd, TVM_GETITEMSTATE, (WPARAM)hItem, (LPARAM)nStateMask)) & nStateMask);
\r
4141 #else // !((_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE))
\r
4142 TVITEM item = { 0 };
\r
4143 item.hItem = hItem;
\r
4144 item.mask = TVIF_STATE;
\r
4146 item.stateMask = nStateMask;
\r
4147 ::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPARAM)&item);
\r
4148 return (item.state & nStateMask);
\r
4149 #endif // !((_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE))
\r
4152 BOOL SetItemState(HTREEITEM hItem, UINT nState, UINT nStateMask)
\r
4154 ATLASSERT(::IsWindow(m_hWnd));
\r
4155 return SetItem(hItem, TVIF_STATE, NULL, 0, 0, nState, nStateMask, NULL);
\r
4158 DWORD_PTR GetItemData(HTREEITEM hItem) const
\r
4160 ATLASSERT(::IsWindow(m_hWnd));
\r
4161 TVITEM item = { 0 };
\r
4162 item.hItem = hItem;
\r
4163 item.mask = TVIF_PARAM;
\r
4164 BOOL bRet = (BOOL)::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPARAM)&item);
\r
4165 return (DWORD_PTR)(bRet ? item.lParam : NULL);
\r
4168 BOOL SetItemData(HTREEITEM hItem, DWORD_PTR dwData)
\r
4170 ATLASSERT(::IsWindow(m_hWnd));
\r
4171 return SetItem(hItem, TVIF_PARAM, NULL, 0, 0, 0, 0, (LPARAM)dwData);
\r
4174 CEdit GetEditControl() const
\r
4176 ATLASSERT(::IsWindow(m_hWnd));
\r
4177 return CEdit((HWND)::SendMessage(m_hWnd, TVM_GETEDITCONTROL, 0, 0L));
\r
4180 UINT GetVisibleCount() const
\r
4182 ATLASSERT(::IsWindow(m_hWnd));
\r
4183 return (UINT)::SendMessage(m_hWnd, TVM_GETVISIBLECOUNT, 0, 0L);
\r
4186 BOOL GetItemRect(HTREEITEM hItem, LPRECT lpRect, BOOL bTextOnly) const
\r
4188 ATLASSERT(::IsWindow(m_hWnd));
\r
4189 *(HTREEITEM*)lpRect = hItem;
\r
4190 return (BOOL)::SendMessage(m_hWnd, TVM_GETITEMRECT, (WPARAM)bTextOnly, (LPARAM)lpRect);
\r
4193 BOOL ItemHasChildren(HTREEITEM hItem) const
\r
4195 ATLASSERT(::IsWindow(m_hWnd));
\r
4196 TVITEM item = { 0 };
\r
4197 item.hItem = hItem;
\r
4198 item.mask = TVIF_CHILDREN;
\r
4199 ::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPARAM)&item);
\r
4200 return item.cChildren;
\r
4203 #ifndef _WIN32_WCE
\r
4204 CToolTipCtrl GetToolTips() const
\r
4206 ATLASSERT(::IsWindow(m_hWnd));
\r
4207 return CToolTipCtrl((HWND)::SendMessage(m_hWnd, TVM_GETTOOLTIPS, 0, 0L));
\r
4210 CToolTipCtrl SetToolTips(HWND hWndTT)
\r
4212 ATLASSERT(::IsWindow(m_hWnd));
\r
4213 return CToolTipCtrl((HWND)::SendMessage(m_hWnd, TVM_SETTOOLTIPS, (WPARAM)hWndTT, 0L));
\r
4215 #endif // !_WIN32_WCE
\r
4217 int GetISearchString(LPTSTR lpstr) const
\r
4219 ATLASSERT(::IsWindow(m_hWnd));
\r
4220 return (int)::SendMessage(m_hWnd, TVM_GETISEARCHSTRING, 0, (LPARAM)lpstr);
\r
4223 // checkboxes only
\r
4224 BOOL GetCheckState(HTREEITEM hItem) const
\r
4226 ATLASSERT(::IsWindow(m_hWnd));
\r
4227 ATLASSERT((GetStyle() & TVS_CHECKBOXES) != 0);
\r
4228 UINT uRet = GetItemState(hItem, TVIS_STATEIMAGEMASK);
\r
4229 return (uRet >> 12) - 1;
\r
4232 BOOL SetCheckState(HTREEITEM hItem, BOOL bCheck)
\r
4234 int nCheck = bCheck ? 2 : 1; // one based index
\r
4235 return SetItemState(hItem, INDEXTOSTATEIMAGEMASK(nCheck), TVIS_STATEIMAGEMASK);
\r
4238 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
4239 COLORREF GetBkColor() const
\r
4241 ATLASSERT(::IsWindow(m_hWnd));
\r
4242 return (COLORREF)::SendMessage(m_hWnd, TVM_GETBKCOLOR, 0, 0L);
\r
4245 COLORREF SetBkColor(COLORREF clr)
\r
4247 ATLASSERT(::IsWindow(m_hWnd));
\r
4248 return (COLORREF)::SendMessage(m_hWnd, TVM_SETBKCOLOR, 0, (LPARAM)clr);
\r
4251 COLORREF GetInsertMarkColor() const
\r
4253 ATLASSERT(::IsWindow(m_hWnd));
\r
4254 return (COLORREF)::SendMessage(m_hWnd, TVM_GETINSERTMARKCOLOR, 0, 0L);
\r
4257 COLORREF SetInsertMarkColor(COLORREF clr)
\r
4259 ATLASSERT(::IsWindow(m_hWnd));
\r
4260 return (COLORREF)::SendMessage(m_hWnd, TVM_SETINSERTMARKCOLOR, 0, (LPARAM)clr);
\r
4263 int GetItemHeight() const
\r
4265 ATLASSERT(::IsWindow(m_hWnd));
\r
4266 return (int)::SendMessage(m_hWnd, TVM_GETITEMHEIGHT, 0, 0L);
\r
4269 int SetItemHeight(int cyHeight)
\r
4271 ATLASSERT(::IsWindow(m_hWnd));
\r
4272 return (int)::SendMessage(m_hWnd, TVM_SETITEMHEIGHT, cyHeight, 0L);
\r
4275 int GetScrollTime() const
\r
4277 ATLASSERT(::IsWindow(m_hWnd));
\r
4278 return (int)::SendMessage(m_hWnd, TVM_GETSCROLLTIME, 0, 0L);
\r
4281 int SetScrollTime(int nScrollTime)
\r
4283 ATLASSERT(::IsWindow(m_hWnd));
\r
4284 return (int)::SendMessage(m_hWnd, TVM_SETSCROLLTIME, nScrollTime, 0L);
\r
4287 COLORREF GetTextColor() const
\r
4289 ATLASSERT(::IsWindow(m_hWnd));
\r
4290 return (COLORREF)::SendMessage(m_hWnd, TVM_GETTEXTCOLOR, 0, 0L);
\r
4293 COLORREF SetTextColor(COLORREF clr)
\r
4295 ATLASSERT(::IsWindow(m_hWnd));
\r
4296 return (COLORREF)::SendMessage(m_hWnd, TVM_SETTEXTCOLOR, 0, (LPARAM)clr);
\r
4299 BOOL GetUnicodeFormat() const
\r
4301 ATLASSERT(::IsWindow(m_hWnd));
\r
4302 return (BOOL)::SendMessage(m_hWnd, TVM_GETUNICODEFORMAT, 0, 0L);
\r
4305 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
\r
4307 ATLASSERT(::IsWindow(m_hWnd));
\r
4308 return (BOOL)::SendMessage(m_hWnd, TVM_SETUNICODEFORMAT, bUnicode, 0L);
\r
4310 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
4312 #if (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)
\r
4313 COLORREF GetLineColor() const
\r
4315 ATLASSERT(::IsWindow(m_hWnd));
\r
4316 return (COLORREF)::SendMessage(m_hWnd, TVM_GETLINECOLOR, 0, 0L);
\r
4319 COLORREF SetLineColor(COLORREF clrNew /*= CLR_DEFAULT*/)
\r
4321 ATLASSERT(::IsWindow(m_hWnd));
\r
4322 return (COLORREF)::SendMessage(m_hWnd, TVM_SETLINECOLOR, 0, (LPARAM)clrNew);
\r
4324 #endif // (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)
\r
4326 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
4327 BOOL GetItem(LPTVITEMEX pItem) const
\r
4329 ATLASSERT(::IsWindow(m_hWnd));
\r
4330 return (BOOL)::SendMessage(m_hWnd, TVM_GETITEM, 0, (LPARAM)pItem);
\r
4333 BOOL SetItem(LPTVITEMEX pItem)
\r
4335 ATLASSERT(::IsWindow(m_hWnd));
\r
4336 return (BOOL)::SendMessage(m_hWnd, TVM_SETITEM, 0, (LPARAM)pItem);
\r
4338 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
4340 DWORD GetExtendedStyle() const
\r
4342 #ifndef TVM_GETEXTENDEDSTYLE
\r
4343 const UINT TVM_GETEXTENDEDSTYLE = (TV_FIRST + 45);
\r
4345 ATLASSERT(::IsWindow(m_hWnd));
\r
4346 return (DWORD)::SendMessage(m_hWnd, TVM_GETEXTENDEDSTYLE, 0, 0L);
\r
4349 DWORD SetExtendedStyle(DWORD dwStyle, DWORD dwMask)
\r
4351 #ifndef TVM_SETEXTENDEDSTYLE
\r
4352 const UINT TVM_SETEXTENDEDSTYLE = (TV_FIRST + 44);
\r
4354 ATLASSERT(::IsWindow(m_hWnd));
\r
4355 return (DWORD)::SendMessage(m_hWnd, TVM_SETEXTENDEDSTYLE, dwMask, dwStyle);
\r
4358 #if (_WIN32_WINNT >= 0x0600)
\r
4359 BOOL SetAutoScrollInfo(UINT uPixPerSec, UINT uUpdateTime)
\r
4361 ATLASSERT(::IsWindow(m_hWnd));
\r
4362 return (BOOL)::SendMessage(m_hWnd, TVM_SETAUTOSCROLLINFO, (WPARAM)uPixPerSec, (LPARAM)uUpdateTime);
\r
4365 DWORD GetSelectedCount() const
\r
4367 ATLASSERT(::IsWindow(m_hWnd));
\r
4368 return (DWORD)::SendMessage(m_hWnd, TVM_GETSELECTEDCOUNT, 0, 0L);
\r
4371 BOOL GetItemPartRect(HTREEITEM hItem, TVITEMPART partID, LPRECT lpRect) const
\r
4373 ATLASSERT(::IsWindow(m_hWnd));
\r
4374 TVGETITEMPARTRECTINFO gipri = { hItem, lpRect, partID };
\r
4375 return (BOOL)::SendMessage(m_hWnd, TVM_GETITEMPARTRECT, 0, (LPARAM)&gipri);
\r
4377 #endif // (_WIN32_WINNT >= 0x0600)
\r
4380 HTREEITEM InsertItem(LPTVINSERTSTRUCT lpInsertStruct)
\r
4382 ATLASSERT(::IsWindow(m_hWnd));
\r
4383 return (HTREEITEM)::SendMessage(m_hWnd, TVM_INSERTITEM, 0, (LPARAM)lpInsertStruct);
\r
4386 HTREEITEM InsertItem(LPCTSTR lpszItem, int nImage,
\r
4387 int nSelectedImage, HTREEITEM hParent, HTREEITEM hInsertAfter)
\r
4389 ATLASSERT(::IsWindow(m_hWnd));
\r
4390 return InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE, lpszItem, nImage, nSelectedImage, 0, 0, 0, hParent, hInsertAfter);
\r
4393 HTREEITEM InsertItem(LPCTSTR lpszItem, HTREEITEM hParent, HTREEITEM hInsertAfter)
\r
4395 ATLASSERT(::IsWindow(m_hWnd));
\r
4396 return InsertItem(TVIF_TEXT, lpszItem, 0, 0, 0, 0, 0, hParent, hInsertAfter);
\r
4399 HTREEITEM InsertItem(UINT nMask, LPCTSTR lpszItem, int nImage,
\r
4400 int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam,
\r
4401 HTREEITEM hParent, HTREEITEM hInsertAfter)
\r
4403 ATLASSERT(::IsWindow(m_hWnd));
\r
4404 TVINSERTSTRUCT tvis = { 0 };
\r
4405 tvis.hParent = hParent;
\r
4406 tvis.hInsertAfter = hInsertAfter;
\r
4407 tvis.item.mask = nMask;
\r
4408 tvis.item.pszText = (LPTSTR) lpszItem;
\r
4409 tvis.item.iImage = nImage;
\r
4410 tvis.item.iSelectedImage = nSelectedImage;
\r
4411 tvis.item.state = nState;
\r
4412 tvis.item.stateMask = nStateMask;
\r
4413 tvis.item.lParam = lParam;
\r
4414 return (HTREEITEM)::SendMessage(m_hWnd, TVM_INSERTITEM, 0, (LPARAM)&tvis);
\r
4417 BOOL DeleteItem(HTREEITEM hItem)
\r
4419 ATLASSERT(::IsWindow(m_hWnd));
\r
4420 return (BOOL)::SendMessage(m_hWnd, TVM_DELETEITEM, 0, (LPARAM)hItem);
\r
4423 BOOL DeleteAllItems()
\r
4425 ATLASSERT(::IsWindow(m_hWnd));
\r
4426 return (BOOL)::SendMessage(m_hWnd, TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT);
\r
4429 BOOL Expand(HTREEITEM hItem, UINT nCode = TVE_EXPAND)
\r
4431 ATLASSERT(::IsWindow(m_hWnd));
\r
4432 return (BOOL)::SendMessage(m_hWnd, TVM_EXPAND, nCode, (LPARAM)hItem);
\r
4435 HTREEITEM GetNextItem(HTREEITEM hItem, UINT nCode) const
\r
4437 ATLASSERT(::IsWindow(m_hWnd));
\r
4438 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, nCode, (LPARAM)hItem);
\r
4441 HTREEITEM GetChildItem(HTREEITEM hItem) const
\r
4443 ATLASSERT(::IsWindow(m_hWnd));
\r
4444 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_CHILD, (LPARAM)hItem);
\r
4447 HTREEITEM GetNextSiblingItem(HTREEITEM hItem) const
\r
4449 ATLASSERT(::IsWindow(m_hWnd));
\r
4450 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_NEXT, (LPARAM)hItem);
\r
4453 HTREEITEM GetPrevSiblingItem(HTREEITEM hItem) const
\r
4455 ATLASSERT(::IsWindow(m_hWnd));
\r
4456 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_PREVIOUS, (LPARAM)hItem);
\r
4459 HTREEITEM GetParentItem(HTREEITEM hItem) const
\r
4461 ATLASSERT(::IsWindow(m_hWnd));
\r
4462 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_PARENT, (LPARAM)hItem);
\r
4465 HTREEITEM GetFirstVisibleItem() const
\r
4467 ATLASSERT(::IsWindow(m_hWnd));
\r
4468 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_FIRSTVISIBLE, 0L);
\r
4471 HTREEITEM GetNextVisibleItem(HTREEITEM hItem) const
\r
4473 ATLASSERT(::IsWindow(m_hWnd));
\r
4474 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_NEXTVISIBLE, (LPARAM)hItem);
\r
4477 HTREEITEM GetPrevVisibleItem(HTREEITEM hItem) const
\r
4479 ATLASSERT(::IsWindow(m_hWnd));
\r
4480 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_PREVIOUSVISIBLE, (LPARAM)hItem);
\r
4483 HTREEITEM GetSelectedItem() const
\r
4485 ATLASSERT(::IsWindow(m_hWnd));
\r
4486 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_CARET, 0L);
\r
4489 HTREEITEM GetDropHilightItem() const
\r
4491 ATLASSERT(::IsWindow(m_hWnd));
\r
4492 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_DROPHILITE, 0L);
\r
4495 HTREEITEM GetRootItem() const
\r
4497 ATLASSERT(::IsWindow(m_hWnd));
\r
4498 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_ROOT, 0L);
\r
4501 #if !defined(_WIN32_WCE) && (_WIN32_IE >= 0x0400)
\r
4502 HTREEITEM GetLastVisibleItem() const
\r
4504 ATLASSERT(::IsWindow(m_hWnd));
\r
4505 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_LASTVISIBLE, 0L);
\r
4507 #endif // !defined(_WIN32_WCE) && (_WIN32_IE >= 0x0400)
\r
4509 #if (_WIN32_IE >= 0x0600)
\r
4510 HTREEITEM GetNextSelectedItem() const
\r
4512 ATLASSERT(::IsWindow(m_hWnd));
\r
4513 return (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_NEXTSELECTED, 0L);
\r
4515 #endif // (_WIN32_IE >= 0x0600)
\r
4517 BOOL Select(HTREEITEM hItem, UINT nCode)
\r
4519 ATLASSERT(::IsWindow(m_hWnd));
\r
4520 return (BOOL)::SendMessage(m_hWnd, TVM_SELECTITEM, nCode, (LPARAM)hItem);
\r
4523 BOOL SelectItem(HTREEITEM hItem)
\r
4525 ATLASSERT(::IsWindow(m_hWnd));
\r
4526 return (BOOL)::SendMessage(m_hWnd, TVM_SELECTITEM, TVGN_CARET, (LPARAM)hItem);
\r
4529 BOOL SelectDropTarget(HTREEITEM hItem)
\r
4531 ATLASSERT(::IsWindow(m_hWnd));
\r
4532 return (BOOL)::SendMessage(m_hWnd, TVM_SELECTITEM, TVGN_DROPHILITE, (LPARAM)hItem);
\r
4535 BOOL SelectSetFirstVisible(HTREEITEM hItem)
\r
4537 ATLASSERT(::IsWindow(m_hWnd));
\r
4538 return (BOOL)::SendMessage(m_hWnd, TVM_SELECTITEM, TVGN_FIRSTVISIBLE, (LPARAM)hItem);
\r
4541 CEdit EditLabel(HTREEITEM hItem)
\r
4543 ATLASSERT(::IsWindow(m_hWnd));
\r
4544 return CEdit((HWND)::SendMessage(m_hWnd, TVM_EDITLABEL, 0, (LPARAM)hItem));
\r
4547 BOOL EndEditLabelNow(BOOL bCancel)
\r
4549 ATLASSERT(::IsWindow(m_hWnd));
\r
4550 return (BOOL)::SendMessage(m_hWnd, TVM_ENDEDITLABELNOW, bCancel, 0L);
\r
4553 HTREEITEM HitTest(TVHITTESTINFO* pHitTestInfo) const
\r
4555 ATLASSERT(::IsWindow(m_hWnd));
\r
4556 return (HTREEITEM)::SendMessage(m_hWnd, TVM_HITTEST, 0, (LPARAM)pHitTestInfo);
\r
4559 HTREEITEM HitTest(POINT pt, UINT* pFlags) const
\r
4561 ATLASSERT(::IsWindow(m_hWnd));
\r
4562 TVHITTESTINFO hti = { 0 };
\r
4564 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_HITTEST, 0, (LPARAM)&hti);
\r
4565 if (pFlags != NULL)
\r
4566 *pFlags = hti.flags;
\r
4570 BOOL SortChildren(HTREEITEM hItem, BOOL bRecurse = FALSE)
\r
4572 ATLASSERT(::IsWindow(m_hWnd));
\r
4573 return (BOOL)::SendMessage(m_hWnd, TVM_SORTCHILDREN, (WPARAM)bRecurse, (LPARAM)hItem);
\r
4576 BOOL EnsureVisible(HTREEITEM hItem)
\r
4578 ATLASSERT(::IsWindow(m_hWnd));
\r
4579 return (BOOL)::SendMessage(m_hWnd, TVM_ENSUREVISIBLE, 0, (LPARAM)hItem);
\r
4582 BOOL SortChildrenCB(LPTVSORTCB pSort, BOOL bRecurse = FALSE)
\r
4584 ATLASSERT(::IsWindow(m_hWnd));
\r
4585 return (BOOL)::SendMessage(m_hWnd, TVM_SORTCHILDRENCB, (WPARAM)bRecurse, (LPARAM)pSort);
\r
4588 CImageList RemoveImageList(int nImageList)
\r
4590 ATLASSERT(::IsWindow(m_hWnd));
\r
4591 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TVM_SETIMAGELIST, (WPARAM)nImageList, NULL));
\r
4594 CImageList CreateDragImage(HTREEITEM hItem)
\r
4596 ATLASSERT(::IsWindow(m_hWnd));
\r
4597 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TVM_CREATEDRAGIMAGE, 0, (LPARAM)hItem));
\r
4600 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
4601 BOOL SetInsertMark(HTREEITEM hTreeItem, BOOL bAfter)
\r
4603 ATLASSERT(::IsWindow(m_hWnd));
\r
4604 return (BOOL)::SendMessage(m_hWnd, TVM_SETINSERTMARK, bAfter, (LPARAM)hTreeItem);
\r
4607 BOOL RemoveInsertMark()
\r
4609 ATLASSERT(::IsWindow(m_hWnd));
\r
4610 return (BOOL)::SendMessage(m_hWnd, TVM_SETINSERTMARK, 0, 0L);
\r
4612 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
4614 #if (_WIN32_WINNT >= 0x0501)
\r
4615 HTREEITEM MapAccIDToHTREEITEM(UINT uID) const
\r
4617 ATLASSERT(::IsWindow(m_hWnd));
\r
4618 return (HTREEITEM)::SendMessage(m_hWnd, TVM_MAPACCIDTOHTREEITEM, uID, 0L);
\r
4621 UINT MapHTREEITEMToAccID(HTREEITEM hTreeItem) const
\r
4623 ATLASSERT(::IsWindow(m_hWnd));
\r
4624 return (UINT)::SendMessage(m_hWnd, TVM_MAPHTREEITEMTOACCID, (WPARAM)hTreeItem, 0L);
\r
4626 #endif // (_WIN32_WINNT >= 0x0501)
\r
4628 #if (_WIN32_WINNT >= 0x0600)
\r
4629 void ShowInfoTip(HTREEITEM hItem)
\r
4631 ATLASSERT(::IsWindow(m_hWnd));
\r
4632 ::SendMessage(m_hWnd, TVM_SHOWINFOTIP, 0, (LPARAM)hItem);
\r
4634 #endif // (_WIN32_WINNT >= 0x0600)
\r
4637 typedef CTreeViewCtrlT<ATL::CWindow> CTreeViewCtrl;
\r
4640 ///////////////////////////////////////////////////////////////////////////////
\r
4641 // CTreeViewCtrlEx
\r
4643 // forward declaration
\r
4644 template <class TBase> class CTreeViewCtrlExT;
\r
4646 // Note: TBase here is for CTreeViewCtrlExT, and not for CTreeItemT itself
\r
4647 template <class TBase>
\r
4651 HTREEITEM m_hTreeItem;
\r
4652 CTreeViewCtrlExT<TBase>* m_pTreeView;
\r
4655 CTreeItemT(HTREEITEM hTreeItem = NULL, CTreeViewCtrlExT<TBase>* pTreeView = NULL) : m_hTreeItem(hTreeItem), m_pTreeView(pTreeView)
\r
4658 CTreeItemT(const CTreeItemT<TBase>& posSrc)
\r
4663 operator HTREEITEM() { return m_hTreeItem; }
\r
4665 CTreeItemT<TBase>& operator =(const CTreeItemT<TBase>& itemSrc)
\r
4667 m_hTreeItem = itemSrc.m_hTreeItem;
\r
4668 m_pTreeView = itemSrc.m_pTreeView;
\r
4673 CTreeViewCtrlExT<TBase>* GetTreeView() const { return m_pTreeView; }
\r
4675 BOOL operator !() const { return m_hTreeItem == NULL; }
\r
4677 BOOL IsNull() const { return m_hTreeItem == NULL; }
\r
4679 BOOL GetRect(LPRECT lpRect, BOOL bTextOnly) const;
\r
4680 BOOL GetText(LPTSTR lpstrText, int nLen) const;
\r
4681 #ifndef _ATL_NO_COM
\r
4682 BOOL GetText(BSTR& bstrText) const;
\r
4683 #endif // !_ATL_NO_COM
\r
4684 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
\r
4685 BOOL GetText(_CSTRING_NS::CString& strText) const;
\r
4686 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
\r
4687 BOOL SetText(LPCTSTR lpszItem);
\r
4688 BOOL GetImage(int& nImage, int& nSelectedImage) const;
\r
4689 BOOL SetImage(int nImage, int nSelectedImage);
\r
4690 UINT GetState(UINT nStateMask) const;
\r
4691 BOOL SetState(UINT nState, UINT nStateMask);
\r
4692 DWORD_PTR GetData() const;
\r
4693 BOOL SetData(DWORD_PTR dwData);
\r
4694 BOOL SetItem(UINT nMask, LPCTSTR lpszItem, int nImage, int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam);
\r
4697 CTreeItemT<TBase> InsertAfter(LPCTSTR lpstrItem, HTREEITEM hItemAfter, int nImageIndex)
\r
4699 return _Insert(lpstrItem, nImageIndex, hItemAfter);
\r
4702 CTreeItemT<TBase> AddHead(LPCTSTR lpstrItem, int nImageIndex)
\r
4704 return _Insert(lpstrItem, nImageIndex, TVI_FIRST);
\r
4707 CTreeItemT<TBase> AddTail(LPCTSTR lpstrItem, int nImageIndex)
\r
4709 return _Insert(lpstrItem, nImageIndex, TVI_LAST);
\r
4712 CTreeItemT<TBase> GetChild() const;
\r
4713 CTreeItemT<TBase> GetNext(UINT nCode) const;
\r
4714 CTreeItemT<TBase> GetNextSibling() const;
\r
4715 CTreeItemT<TBase> GetPrevSibling() const;
\r
4716 CTreeItemT<TBase> GetParent() const;
\r
4717 CTreeItemT<TBase> GetFirstVisible() const;
\r
4718 CTreeItemT<TBase> GetNextVisible() const;
\r
4719 CTreeItemT<TBase> GetPrevVisible() const;
\r
4720 CTreeItemT<TBase> GetSelected() const;
\r
4721 CTreeItemT<TBase> GetDropHilight() const;
\r
4722 CTreeItemT<TBase> GetRoot() const;
\r
4723 #if !defined(_WIN32_WCE) && (_WIN32_IE >= 0x0400)
\r
4724 CTreeItemT<TBase> GetLastVisible() const;
\r
4725 #endif // !defined(_WIN32_WCE) && (_WIN32_IE >= 0x0400)
\r
4726 #if (_WIN32_IE >= 0x0600)
\r
4727 CTreeItemT<TBase> GetNextSelected() const;
\r
4728 #endif // (_WIN32_IE >= 0x0600)
\r
4729 BOOL HasChildren() const;
\r
4731 BOOL Expand(UINT nCode = TVE_EXPAND);
\r
4732 BOOL Select(UINT nCode);
\r
4734 BOOL SelectDropTarget();
\r
4735 BOOL SelectSetFirstVisible();
\r
4737 HIMAGELIST CreateDragImage();
\r
4738 BOOL SortChildren(BOOL bRecurse = FALSE);
\r
4739 BOOL EnsureVisible();
\r
4740 CTreeItemT<TBase> _Insert(LPCTSTR lpstrItem, int nImageIndex, HTREEITEM hItemAfter);
\r
4741 int GetImageIndex() const;
\r
4742 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
4743 BOOL SetInsertMark(BOOL bAfter);
\r
4744 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
4745 #if (_WIN32_WINNT >= 0x0501)
\r
4746 UINT MapHTREEITEMToAccID() const;
\r
4747 #endif // (_WIN32_WINNT >= 0x0501)
\r
4748 #if (_WIN32_WINNT >= 0x0600)
\r
4749 void ShowInfoTip();
\r
4750 BOOL GetPartRect(TVITEMPART partID, LPRECT lpRect) const;
\r
4751 #endif // (_WIN32_WINNT >= 0x0600)
\r
4754 typedef CTreeItemT<ATL::CWindow> CTreeItem;
\r
4757 template <class TBase>
\r
4758 class CTreeViewCtrlExT : public CTreeViewCtrlT< TBase >
\r
4762 CTreeViewCtrlExT(HWND hWnd = NULL) : CTreeViewCtrlT< TBase >(hWnd)
\r
4765 CTreeViewCtrlExT< TBase >& operator =(HWND hWnd)
\r
4771 // Operations (overides that return CTreeItem)
\r
4772 CTreeItemT<TBase> InsertItem(LPTVINSERTSTRUCT lpInsertStruct)
\r
4774 ATLASSERT(::IsWindow(m_hWnd));
\r
4775 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_INSERTITEM, 0, (LPARAM)lpInsertStruct);
\r
4776 return CTreeItemT<TBase>(hTreeItem, this);
\r
4779 CTreeItemT<TBase> InsertItem(LPCTSTR lpszItem, int nImage,
\r
4780 int nSelectedImage, HTREEITEM hParent, HTREEITEM hInsertAfter)
\r
4782 ATLASSERT(::IsWindow(m_hWnd));
\r
4783 return InsertItem(TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE, lpszItem, nImage, nSelectedImage, 0, 0, 0, hParent, hInsertAfter);
\r
4786 CTreeItemT<TBase> InsertItem(LPCTSTR lpszItem, HTREEITEM hParent, HTREEITEM hInsertAfter)
\r
4788 ATLASSERT(::IsWindow(m_hWnd));
\r
4789 return InsertItem(TVIF_TEXT, lpszItem, 0, 0, 0, 0, 0, hParent, hInsertAfter);
\r
4792 CTreeItemT<TBase> GetNextItem(HTREEITEM hItem, UINT nCode) const
\r
4794 ATLASSERT(::IsWindow(m_hWnd));
\r
4795 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, nCode, (LPARAM)hItem);
\r
4796 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
\r
4799 CTreeItemT<TBase> GetChildItem(HTREEITEM hItem) const
\r
4801 ATLASSERT(::IsWindow(m_hWnd));
\r
4802 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_CHILD, (LPARAM)hItem);
\r
4803 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
\r
4806 CTreeItemT<TBase> GetNextSiblingItem(HTREEITEM hItem) const
\r
4808 ATLASSERT(::IsWindow(m_hWnd));
\r
4809 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_NEXT, (LPARAM)hItem);
\r
4810 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
\r
4813 CTreeItemT<TBase> GetPrevSiblingItem(HTREEITEM hItem) const
\r
4815 ATLASSERT(::IsWindow(m_hWnd));
\r
4816 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_PREVIOUS, (LPARAM)hItem);
\r
4817 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
\r
4820 CTreeItemT<TBase> GetParentItem(HTREEITEM hItem) const
\r
4822 ATLASSERT(::IsWindow(m_hWnd));
\r
4823 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_PARENT, (LPARAM)hItem);
\r
4824 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
\r
4827 CTreeItemT<TBase> GetFirstVisibleItem() const
\r
4829 ATLASSERT(::IsWindow(m_hWnd));
\r
4830 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_FIRSTVISIBLE, 0L);
\r
4831 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
\r
4834 CTreeItemT<TBase> GetNextVisibleItem(HTREEITEM hItem) const
\r
4836 ATLASSERT(::IsWindow(m_hWnd));
\r
4837 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_NEXTVISIBLE, (LPARAM)hItem);
\r
4838 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
\r
4841 CTreeItemT<TBase> GetPrevVisibleItem(HTREEITEM hItem) const
\r
4843 ATLASSERT(::IsWindow(m_hWnd));
\r
4844 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_PREVIOUSVISIBLE, (LPARAM)hItem);
\r
4845 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
\r
4848 CTreeItemT<TBase> GetSelectedItem() const
\r
4850 ATLASSERT(::IsWindow(m_hWnd));
\r
4851 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_CARET, 0L);
\r
4852 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
\r
4855 CTreeItemT<TBase> GetDropHilightItem() const
\r
4857 ATLASSERT(::IsWindow(m_hWnd));
\r
4858 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_DROPHILITE, 0L);
\r
4859 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
\r
4862 CTreeItemT<TBase> GetRootItem() const
\r
4864 ATLASSERT(::IsWindow(m_hWnd));
\r
4865 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_ROOT, 0L);
\r
4866 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
\r
4869 #if !defined(_WIN32_WCE) && (_WIN32_IE >= 0x0400)
\r
4870 CTreeItemT<TBase> GetLastVisibleItem() const
\r
4872 ATLASSERT(::IsWindow(m_hWnd));
\r
4873 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_LASTVISIBLE, 0L);
\r
4874 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
\r
4876 #endif // !defined(_WIN32_WCE) && (_WIN32_IE >= 0x0400)
\r
4878 #if (_WIN32_IE >= 0x0600)
\r
4879 CTreeItemT<TBase> GetNextSelectedItem() const
\r
4881 ATLASSERT(::IsWindow(m_hWnd));
\r
4882 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_GETNEXTITEM, TVGN_NEXTSELECTED, 0L);
\r
4883 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
\r
4885 #endif // (_WIN32_IE >= 0x0600)
\r
4887 CTreeItemT<TBase> HitTest(TVHITTESTINFO* pHitTestInfo) const
\r
4889 ATLASSERT(::IsWindow(m_hWnd));
\r
4890 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_HITTEST, 0, (LPARAM)pHitTestInfo);
\r
4891 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
\r
4894 CTreeItemT<TBase> InsertItem(UINT nMask, LPCTSTR lpszItem, int nImage,
\r
4895 int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam,
\r
4896 HTREEITEM hParent, HTREEITEM hInsertAfter)
\r
4898 ATLASSERT(::IsWindow(m_hWnd));
\r
4899 TVINSERTSTRUCT tvis = { 0 };
\r
4900 tvis.hParent = hParent;
\r
4901 tvis.hInsertAfter = hInsertAfter;
\r
4902 tvis.item.mask = nMask;
\r
4903 tvis.item.pszText = (LPTSTR) lpszItem;
\r
4904 tvis.item.iImage = nImage;
\r
4905 tvis.item.iSelectedImage = nSelectedImage;
\r
4906 tvis.item.state = nState;
\r
4907 tvis.item.stateMask = nStateMask;
\r
4908 tvis.item.lParam = lParam;
\r
4909 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_INSERTITEM, 0, (LPARAM)&tvis);
\r
4910 return CTreeItemT<TBase>(hTreeItem, this);
\r
4913 CTreeItemT<TBase> HitTest(POINT pt, UINT* pFlags) const
\r
4915 ATLASSERT(::IsWindow(m_hWnd));
\r
4916 TVHITTESTINFO hti = { 0 };
\r
4918 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_HITTEST, 0, (LPARAM)&hti);
\r
4919 if (pFlags != NULL)
\r
4920 *pFlags = hti.flags;
\r
4921 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
\r
4924 #if (_WIN32_WINNT >= 0x0501)
\r
4925 CTreeItemT<TBase> MapAccIDToHTREEITEM(UINT uID) const
\r
4927 ATLASSERT(::IsWindow(m_hWnd));
\r
4928 HTREEITEM hTreeItem = (HTREEITEM)::SendMessage(m_hWnd, TVM_MAPACCIDTOHTREEITEM, uID, 0L);
\r
4929 return CTreeItemT<TBase>(hTreeItem, (CTreeViewCtrlExT<TBase>*)this);
\r
4931 #endif // (_WIN32_WINNT >= 0x0501)
\r
4934 typedef CTreeViewCtrlExT<ATL::CWindow> CTreeViewCtrlEx;
\r
4937 // CTreeItem inline methods
\r
4938 template <class TBase>
\r
4939 inline BOOL CTreeItemT<TBase>::GetRect(LPRECT lpRect, BOOL bTextOnly) const
\r
4941 ATLASSERT(m_pTreeView != NULL);
\r
4942 return m_pTreeView->GetItemRect(m_hTreeItem,lpRect,bTextOnly);
\r
4945 template <class TBase>
\r
4946 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetNext(UINT nCode) const
\r
4948 ATLASSERT(m_pTreeView != NULL);
\r
4949 return m_pTreeView->GetNextItem(m_hTreeItem,nCode);
\r
4952 template <class TBase>
\r
4953 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetChild() const
\r
4955 ATLASSERT(m_pTreeView != NULL);
\r
4956 return m_pTreeView->GetChildItem(m_hTreeItem);
\r
4959 template <class TBase>
\r
4960 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetNextSibling() const
\r
4962 ATLASSERT(m_pTreeView != NULL);
\r
4963 return m_pTreeView->GetNextSiblingItem(m_hTreeItem);
\r
4966 template <class TBase>
\r
4967 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetPrevSibling() const
\r
4969 ATLASSERT(m_pTreeView != NULL);
\r
4970 return m_pTreeView->GetPrevSiblingItem(m_hTreeItem);
\r
4973 template <class TBase>
\r
4974 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetParent() const
\r
4976 ATLASSERT(m_pTreeView != NULL);
\r
4977 return m_pTreeView->GetParentItem(m_hTreeItem);
\r
4980 template <class TBase>
\r
4981 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetFirstVisible() const
\r
4983 ATLASSERT(m_pTreeView != NULL);
\r
4984 return m_pTreeView->GetFirstVisibleItem();
\r
4987 template <class TBase>
\r
4988 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetNextVisible() const
\r
4990 ATLASSERT(m_pTreeView != NULL);
\r
4991 return m_pTreeView->GetNextVisibleItem(m_hTreeItem);
\r
4994 template <class TBase>
\r
4995 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetPrevVisible() const
\r
4997 ATLASSERT(m_pTreeView != NULL);
\r
4998 return m_pTreeView->GetPrevVisibleItem(m_hTreeItem);
\r
5001 template <class TBase>
\r
5002 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetSelected() const
\r
5004 ATLASSERT(m_pTreeView != NULL);
\r
5005 return m_pTreeView->GetSelectedItem();
\r
5008 template <class TBase>
\r
5009 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetDropHilight() const
\r
5011 ATLASSERT(m_pTreeView != NULL);
\r
5012 return m_pTreeView->GetDropHilightItem();
\r
5015 template <class TBase>
\r
5016 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetRoot() const
\r
5018 ATLASSERT(m_pTreeView != NULL);
\r
5019 return m_pTreeView->GetRootItem();
\r
5022 #if !defined(_WIN32_WCE) && (_WIN32_IE >= 0x0400)
\r
5023 template <class TBase>
\r
5024 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetLastVisible() const
\r
5026 ATLASSERT(m_pTreeView != NULL);
\r
5027 return m_pTreeView->GetLastVisibleItem();
\r
5029 #endif // !defined(_WIN32_WCE) && (_WIN32_IE >= 0x0400)
\r
5031 #if (_WIN32_IE >= 0x0600)
\r
5032 template <class TBase>
\r
5033 inline CTreeItemT<TBase> CTreeItemT<TBase>::GetNextSelected() const
\r
5035 ATLASSERT(m_pTreeView != NULL);
\r
5036 return m_pTreeView->GetNextSelectedItem();
\r
5038 #endif // (_WIN32_IE >= 0x0600)
\r
5040 template <class TBase>
\r
5041 inline BOOL CTreeItemT<TBase>::GetText(LPTSTR lpstrText, int nLen) const
\r
5043 ATLASSERT(m_pTreeView != NULL);
\r
5044 return m_pTreeView->GetItemText(m_hTreeItem, lpstrText, nLen);
\r
5047 #ifndef _ATL_NO_COM
\r
5048 #ifdef _OLEAUTO_H_
\r
5049 template <class TBase>
\r
5050 inline BOOL CTreeItemT<TBase>::GetText(BSTR& bstrText) const
\r
5052 ATLASSERT(m_pTreeView != NULL);
\r
5053 return m_pTreeView->GetItemText(m_hTreeItem, bstrText);
\r
5055 #endif // _OLEAUTO_H_
\r
5056 #endif // !_ATL_NO_COM
\r
5058 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
\r
5059 template <class TBase>
\r
5060 inline BOOL CTreeItemT<TBase>::GetText(_CSTRING_NS::CString& strText) const
\r
5062 ATLASSERT(m_pTreeView != NULL);
\r
5063 return m_pTreeView->GetItemText(m_hTreeItem, strText);
\r
5065 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
\r
5067 template <class TBase>
\r
5068 inline BOOL CTreeItemT<TBase>::GetImage(int& nImage, int& nSelectedImage) const
\r
5070 ATLASSERT(m_pTreeView != NULL);
\r
5071 return m_pTreeView->GetItemImage(m_hTreeItem,nImage,nSelectedImage);
\r
5074 template <class TBase>
\r
5075 inline UINT CTreeItemT<TBase>::GetState(UINT nStateMask) const
\r
5077 ATLASSERT(m_pTreeView != NULL);
\r
5078 return m_pTreeView->GetItemState(m_hTreeItem,nStateMask);
\r
5081 template <class TBase>
\r
5082 inline DWORD_PTR CTreeItemT<TBase>::GetData() const
\r
5084 ATLASSERT(m_pTreeView != NULL);
\r
5085 return m_pTreeView->GetItemData(m_hTreeItem);
\r
5088 template <class TBase>
\r
5089 inline BOOL CTreeItemT<TBase>::SetItem(UINT nMask, LPCTSTR lpszItem, int nImage,
\r
5090 int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam)
\r
5092 ATLASSERT(m_pTreeView != NULL);
\r
5093 return m_pTreeView->SetItem(m_hTreeItem, nMask, lpszItem, nImage, nSelectedImage, nState, nStateMask, lParam);
\r
5096 template <class TBase>
\r
5097 inline BOOL CTreeItemT<TBase>::SetText(LPCTSTR lpszItem)
\r
5099 ATLASSERT(m_pTreeView != NULL);
\r
5100 return m_pTreeView->SetItemText(m_hTreeItem,lpszItem);
\r
5103 template <class TBase>
\r
5104 inline BOOL CTreeItemT<TBase>::SetImage(int nImage, int nSelectedImage)
\r
5106 ATLASSERT(m_pTreeView != NULL);
\r
5107 return m_pTreeView->SetItemImage(m_hTreeItem,nImage,nSelectedImage);
\r
5110 template <class TBase>
\r
5111 inline BOOL CTreeItemT<TBase>::SetState(UINT nState, UINT nStateMask)
\r
5113 ATLASSERT(m_pTreeView != NULL);
\r
5114 return m_pTreeView->SetItemState(m_hTreeItem,nState,nStateMask);
\r
5117 template <class TBase>
\r
5118 inline BOOL CTreeItemT<TBase>::SetData(DWORD_PTR dwData)
\r
5120 ATLASSERT(m_pTreeView != NULL);
\r
5121 return m_pTreeView->SetItemData(m_hTreeItem,dwData);
\r
5124 template <class TBase>
\r
5125 inline BOOL CTreeItemT<TBase>::HasChildren() const
\r
5127 ATLASSERT(m_pTreeView != NULL);
\r
5128 return m_pTreeView->ItemHasChildren(m_hTreeItem);
\r
5131 template <class TBase>
\r
5132 inline BOOL CTreeItemT<TBase>::Delete()
\r
5134 ATLASSERT(m_pTreeView != NULL);
\r
5135 return m_pTreeView->DeleteItem(m_hTreeItem);
\r
5138 template <class TBase>
\r
5139 inline BOOL CTreeItemT<TBase>::Expand(UINT nCode /*= TVE_EXPAND*/)
\r
5141 ATLASSERT(m_pTreeView != NULL);
\r
5142 return m_pTreeView->Expand(m_hTreeItem,nCode);
\r
5145 template <class TBase>
\r
5146 inline BOOL CTreeItemT<TBase>::Select(UINT nCode)
\r
5148 ATLASSERT(m_pTreeView != NULL);
\r
5149 return m_pTreeView->Select(m_hTreeItem,nCode);
\r
5152 template <class TBase>
\r
5153 inline BOOL CTreeItemT<TBase>::Select()
\r
5155 ATLASSERT(m_pTreeView != NULL);
\r
5156 return m_pTreeView->SelectItem(m_hTreeItem);
\r
5159 template <class TBase>
\r
5160 inline BOOL CTreeItemT<TBase>::SelectDropTarget()
\r
5162 ATLASSERT(m_pTreeView != NULL);
\r
5163 return m_pTreeView->SelectDropTarget(m_hTreeItem);
\r
5166 template <class TBase>
\r
5167 inline BOOL CTreeItemT<TBase>::SelectSetFirstVisible()
\r
5169 ATLASSERT(m_pTreeView != NULL);
\r
5170 return m_pTreeView->SelectSetFirstVisible(m_hTreeItem);
\r
5173 template <class TBase>
\r
5174 inline HWND CTreeItemT<TBase>::EditLabel()
\r
5176 ATLASSERT(m_pTreeView != NULL);
\r
5177 return m_pTreeView->EditLabel(m_hTreeItem);
\r
5180 template <class TBase>
\r
5181 inline HIMAGELIST CTreeItemT<TBase>::CreateDragImage()
\r
5183 ATLASSERT(m_pTreeView != NULL);
\r
5184 return m_pTreeView->CreateDragImage(m_hTreeItem);
\r
5187 template <class TBase>
\r
5188 inline BOOL CTreeItemT<TBase>::SortChildren(BOOL bRecurse /*= FALSE*/)
\r
5190 ATLASSERT(m_pTreeView != NULL);
\r
5191 return m_pTreeView->SortChildren(m_hTreeItem, bRecurse);
\r
5194 template <class TBase>
\r
5195 inline BOOL CTreeItemT<TBase>::EnsureVisible()
\r
5197 ATLASSERT(m_pTreeView != NULL);
\r
5198 return m_pTreeView->EnsureVisible(m_hTreeItem);
\r
5201 template <class TBase>
\r
5202 inline CTreeItemT<TBase> CTreeItemT<TBase>::_Insert(LPCTSTR lpstrItem, int nImageIndex, HTREEITEM hItemAfter)
\r
5204 ATLASSERT(m_pTreeView != NULL);
\r
5205 TVINSERTSTRUCT ins = { 0 };
\r
5206 ins.hParent = m_hTreeItem;
\r
5207 ins.hInsertAfter = hItemAfter;
\r
5208 ins.item.mask = TVIF_TEXT;
\r
5209 ins.item.pszText = (LPTSTR)lpstrItem;
\r
5210 if(nImageIndex != -1)
\r
5212 ins.item.mask |= TVIF_IMAGE | TVIF_SELECTEDIMAGE;
\r
5213 ins.item.iImage = nImageIndex;
\r
5214 ins.item.iSelectedImage = nImageIndex;
\r
5216 return CTreeItemT<TBase>(m_pTreeView->InsertItem(&ins), m_pTreeView);
\r
5219 template <class TBase>
\r
5220 inline int CTreeItemT<TBase>::GetImageIndex() const
\r
5222 ATLASSERT(m_pTreeView != NULL);
\r
5223 TVITEM item = { 0 };
\r
5224 item.mask = TVIF_HANDLE | TVIF_IMAGE;
\r
5225 item.hItem = m_hTreeItem;
\r
5226 m_pTreeView->GetItem(&item);
\r
5227 return item.iImage;
\r
5230 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
5231 template <class TBase>
\r
5232 inline BOOL CTreeItemT<TBase>::SetInsertMark(BOOL bAfter)
\r
5234 ATLASSERT(m_pTreeView != NULL);
\r
5235 return m_pTreeView->SetInsertMark(m_hTreeItem, bAfter);
\r
5237 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
5239 #if (_WIN32_WINNT >= 0x0501)
\r
5240 template <class TBase>
\r
5241 inline UINT CTreeItemT<TBase>::MapHTREEITEMToAccID() const
\r
5243 ATLASSERT(m_pTreeView != NULL);
\r
5244 return m_pTreeView->MapHTREEITEMToAccID(m_hTreeItem);
\r
5246 #endif // (_WIN32_WINNT >= 0x0501)
\r
5248 #if (_WIN32_WINNT >= 0x0600)
\r
5249 template <class TBase>
\r
5250 inline void CTreeItemT<TBase>::ShowInfoTip()
\r
5252 ATLASSERT(m_pTreeView != NULL);
\r
5253 m_pTreeView->ShowInfoTip(m_hTreeItem);
\r
5256 template <class TBase>
\r
5257 inline BOOL CTreeItemT<TBase>::GetPartRect(TVITEMPART partID, LPRECT lpRect) const
\r
5259 ATLASSERT(m_pTreeView != NULL);
\r
5260 return m_pTreeView->GetItemPartRect(m_hTreeItem, partID, lpRect);
\r
5262 #endif // (_WIN32_WINNT >= 0x0600)
\r
5265 ///////////////////////////////////////////////////////////////////////////////
\r
5268 template <class TBase>
\r
5269 class CToolBarCtrlT : public TBase
\r
5273 CToolBarCtrlT(HWND hWnd = NULL) : TBase(hWnd)
\r
5276 CToolBarCtrlT< TBase >& operator =(HWND hWnd)
\r
5282 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
5283 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
5284 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
5286 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
5290 static LPCTSTR GetWndClassName()
\r
5292 return TOOLBARCLASSNAME;
\r
5295 BOOL IsButtonEnabled(int nID) const
\r
5297 ATLASSERT(::IsWindow(m_hWnd));
\r
5298 return (BOOL)::SendMessage(m_hWnd, TB_ISBUTTONENABLED, nID, 0L);
\r
5301 BOOL IsButtonChecked(int nID) const
\r
5303 ATLASSERT(::IsWindow(m_hWnd));
\r
5304 return (BOOL)::SendMessage(m_hWnd, TB_ISBUTTONCHECKED, nID, 0L);
\r
5307 BOOL IsButtonPressed(int nID) const
\r
5309 ATLASSERT(::IsWindow(m_hWnd));
\r
5310 return (BOOL)::SendMessage(m_hWnd, TB_ISBUTTONPRESSED, nID, 0L);
\r
5313 BOOL IsButtonHidden(int nID) const
\r
5315 ATLASSERT(::IsWindow(m_hWnd));
\r
5316 return(BOOL) ::SendMessage(m_hWnd, TB_ISBUTTONHIDDEN, nID, 0L);
\r
5319 BOOL IsButtonIndeterminate(int nID) const
\r
5321 ATLASSERT(::IsWindow(m_hWnd));
\r
5322 return (BOOL)::SendMessage(m_hWnd, TB_ISBUTTONINDETERMINATE, nID, 0L);
\r
5325 int GetState(int nID) const
\r
5327 ATLASSERT(::IsWindow(m_hWnd));
\r
5328 return (int)::SendMessage(m_hWnd, TB_GETSTATE, nID, 0L);
\r
5331 BOOL SetState(int nID, UINT nState)
\r
5333 ATLASSERT(::IsWindow(m_hWnd));
\r
5334 return (BOOL)::SendMessage(m_hWnd, TB_SETSTATE, nID, MAKELPARAM(nState, 0));
\r
5337 BOOL GetButton(int nIndex, LPTBBUTTON lpButton) const
\r
5339 ATLASSERT(::IsWindow(m_hWnd));
\r
5340 return (BOOL)::SendMessage(m_hWnd, TB_GETBUTTON, nIndex, (LPARAM)lpButton);
\r
5343 int GetButtonCount() const
\r
5345 ATLASSERT(::IsWindow(m_hWnd));
\r
5346 return (int)::SendMessage(m_hWnd, TB_BUTTONCOUNT, 0, 0L);
\r
5349 BOOL GetItemRect(int nIndex, LPRECT lpRect) const
\r
5351 ATLASSERT(::IsWindow(m_hWnd));
\r
5352 return (BOOL)::SendMessage(m_hWnd, TB_GETITEMRECT, nIndex, (LPARAM)lpRect);
\r
5355 void SetButtonStructSize(int nSize = sizeof(TBBUTTON))
\r
5357 ATLASSERT(::IsWindow(m_hWnd));
\r
5358 ::SendMessage(m_hWnd, TB_BUTTONSTRUCTSIZE, nSize, 0L);
\r
5361 BOOL SetButtonSize(SIZE size)
\r
5363 ATLASSERT(::IsWindow(m_hWnd));
\r
5364 return (BOOL)::SendMessage(m_hWnd, TB_SETBUTTONSIZE, 0, MAKELPARAM(size.cx, size.cy));
\r
5367 BOOL SetButtonSize(int cx, int cy)
\r
5369 ATLASSERT(::IsWindow(m_hWnd));
\r
5370 return (BOOL)::SendMessage(m_hWnd, TB_SETBUTTONSIZE, 0, MAKELPARAM(cx, cy));
\r
5373 BOOL SetBitmapSize(SIZE size)
\r
5375 ATLASSERT(::IsWindow(m_hWnd));
\r
5376 return (BOOL)::SendMessage(m_hWnd, TB_SETBITMAPSIZE, 0, MAKELPARAM(size.cx, size.cy));
\r
5379 BOOL SetBitmapSize(int cx, int cy)
\r
5381 ATLASSERT(::IsWindow(m_hWnd));
\r
5382 return (BOOL)::SendMessage(m_hWnd, TB_SETBITMAPSIZE, 0, MAKELPARAM(cx, cy));
\r
5385 #ifndef _WIN32_WCE
\r
5386 CToolTipCtrl GetToolTips() const
\r
5388 ATLASSERT(::IsWindow(m_hWnd));
\r
5389 return CToolTipCtrl((HWND)::SendMessage(m_hWnd, TB_GETTOOLTIPS, 0, 0L));
\r
5392 void SetToolTips(HWND hWndToolTip)
\r
5394 ATLASSERT(::IsWindow(m_hWnd));
\r
5395 ::SendMessage(m_hWnd, TB_SETTOOLTIPS, (WPARAM)hWndToolTip, 0L);
\r
5397 #endif // !_WIN32_WCE
\r
5399 void SetNotifyWnd(HWND hWnd)
\r
5401 ATLASSERT(::IsWindow(m_hWnd));
\r
5402 ::SendMessage(m_hWnd, TB_SETPARENT, (WPARAM)hWnd, 0L);
\r
5405 int GetRows() const
\r
5407 ATLASSERT(::IsWindow(m_hWnd));
\r
5408 return (int)::SendMessage(m_hWnd, TB_GETROWS, 0, 0L);
\r
5411 void SetRows(int nRows, BOOL bLarger, LPRECT lpRect)
\r
5413 ATLASSERT(::IsWindow(m_hWnd));
\r
5414 ::SendMessage(m_hWnd, TB_SETROWS, MAKELPARAM(nRows, bLarger), (LPARAM)lpRect);
\r
5417 BOOL SetCmdID(int nIndex, UINT nID)
\r
5419 ATLASSERT(::IsWindow(m_hWnd));
\r
5420 return (BOOL)::SendMessage(m_hWnd, TB_SETCMDID, nIndex, nID);
\r
5423 DWORD GetBitmapFlags() const
\r
5425 ATLASSERT(::IsWindow(m_hWnd));
\r
5426 return (DWORD)::SendMessage(m_hWnd, TB_GETBITMAPFLAGS, 0, 0L);
\r
5429 int GetBitmap(int nID) const
\r
5431 ATLASSERT(::IsWindow(m_hWnd));
\r
5432 return (int)::SendMessage(m_hWnd, TB_GETBITMAP, nID, 0L);
\r
5435 int GetButtonText(int nID, LPTSTR lpstrText) const
\r
5437 ATLASSERT(::IsWindow(m_hWnd));
\r
5438 return (int)::SendMessage(m_hWnd, TB_GETBUTTONTEXT, nID, (LPARAM)lpstrText);
\r
5441 // nIndex - IE5 or higher only
\r
5442 CImageList GetImageList(int nIndex = 0) const
\r
5444 ATLASSERT(::IsWindow(m_hWnd));
\r
5445 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TB_GETIMAGELIST, nIndex, 0L));
\r
5448 // nIndex - IE5 or higher only
\r
5449 CImageList SetImageList(HIMAGELIST hImageList, int nIndex = 0)
\r
5451 ATLASSERT(::IsWindow(m_hWnd));
\r
5452 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TB_SETIMAGELIST, nIndex, (LPARAM)hImageList));
\r
5455 // nIndex - IE5 or higher only
\r
5456 CImageList GetDisabledImageList(int nIndex = 0) const
\r
5458 ATLASSERT(::IsWindow(m_hWnd));
\r
5459 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TB_GETDISABLEDIMAGELIST, nIndex, 0L));
\r
5462 // nIndex - IE5 or higher only
\r
5463 CImageList SetDisabledImageList(HIMAGELIST hImageList, int nIndex = 0)
\r
5465 ATLASSERT(::IsWindow(m_hWnd));
\r
5466 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TB_SETDISABLEDIMAGELIST, nIndex, (LPARAM)hImageList));
\r
5469 #ifndef _WIN32_WCE
\r
5470 // nIndex - IE5 or higher only
\r
5471 CImageList GetHotImageList(int nIndex = 0) const
\r
5473 ATLASSERT(::IsWindow(m_hWnd));
\r
5474 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TB_GETHOTIMAGELIST, nIndex, 0L));
\r
5477 // nIndex - IE5 or higher only
\r
5478 CImageList SetHotImageList(HIMAGELIST hImageList, int nIndex = 0)
\r
5480 ATLASSERT(::IsWindow(m_hWnd));
\r
5481 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TB_SETHOTIMAGELIST, nIndex, (LPARAM)hImageList));
\r
5483 #endif // !_WIN32_WCE
\r
5485 DWORD GetStyle() const
\r
5487 ATLASSERT(::IsWindow(m_hWnd));
\r
5488 return (DWORD)::SendMessage(m_hWnd, TB_GETSTYLE, 0, 0L);
\r
5491 void SetStyle(DWORD dwStyle)
\r
5493 ATLASSERT(::IsWindow(m_hWnd));
\r
5494 ::SendMessage(m_hWnd, TB_SETSTYLE, 0, dwStyle);
\r
5497 DWORD GetButtonSize() const
\r
5499 ATLASSERT(::IsWindow(m_hWnd));
\r
5500 return (DWORD)::SendMessage(m_hWnd, TB_GETBUTTONSIZE, 0, 0L);
\r
5503 void GetButtonSize(SIZE& size) const
\r
5505 ATLASSERT(::IsWindow(m_hWnd));
\r
5506 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, TB_GETBUTTONSIZE, 0, 0L);
\r
5507 size.cx = LOWORD(dwRet);
\r
5508 size.cy = HIWORD(dwRet);
\r
5511 BOOL GetRect(int nID, LPRECT lpRect) const
\r
5513 ATLASSERT(::IsWindow(m_hWnd));
\r
5514 return (BOOL)::SendMessage(m_hWnd, TB_GETRECT, nID, (LPARAM)lpRect);
\r
5517 int GetTextRows() const
\r
5519 ATLASSERT(::IsWindow(m_hWnd));
\r
5520 return (int)::SendMessage(m_hWnd, TB_GETTEXTROWS, 0, 0L);
\r
5523 BOOL SetButtonWidth(int cxMin, int cxMax)
\r
5525 ATLASSERT(::IsWindow(m_hWnd));
\r
5526 return (BOOL)::SendMessage(m_hWnd, TB_SETBUTTONWIDTH, 0, MAKELPARAM(cxMin, cxMax));
\r
5529 BOOL SetIndent(int nIndent)
\r
5531 ATLASSERT(::IsWindow(m_hWnd));
\r
5532 return (BOOL)::SendMessage(m_hWnd, TB_SETINDENT, nIndent, 0L);
\r
5535 BOOL SetMaxTextRows(int nMaxTextRows)
\r
5537 ATLASSERT(::IsWindow(m_hWnd));
\r
5538 return (BOOL)::SendMessage(m_hWnd, TB_SETMAXTEXTROWS, nMaxTextRows, 0L);
\r
5541 #if (_WIN32_IE >= 0x0400)
\r
5542 #ifndef _WIN32_WCE
\r
5543 BOOL GetAnchorHighlight() const
\r
5545 ATLASSERT(::IsWindow(m_hWnd));
\r
5546 return (BOOL)::SendMessage(m_hWnd, TB_GETANCHORHIGHLIGHT, 0, 0L);
\r
5549 BOOL SetAnchorHighlight(BOOL bEnable = TRUE)
\r
5551 ATLASSERT(::IsWindow(m_hWnd));
\r
5552 return (BOOL)::SendMessage(m_hWnd, TB_SETANCHORHIGHLIGHT, bEnable, 0L);
\r
5554 #endif // !_WIN32_WCE
\r
5556 int GetButtonInfo(int nID, LPTBBUTTONINFO lptbbi) const
\r
5558 ATLASSERT(::IsWindow(m_hWnd));
\r
5559 return (int)::SendMessage(m_hWnd, TB_GETBUTTONINFO, nID, (LPARAM)lptbbi);
\r
5562 BOOL SetButtonInfo(int nID, LPTBBUTTONINFO lptbbi)
\r
5564 ATLASSERT(::IsWindow(m_hWnd));
\r
5565 return (BOOL)::SendMessage(m_hWnd, TB_SETBUTTONINFO, nID, (LPARAM)lptbbi);
\r
5568 BOOL SetButtonInfo(int nID, DWORD dwMask, BYTE Style, BYTE State, LPCTSTR lpszItem,
\r
5569 int iImage, WORD cx, int iCommand, DWORD_PTR lParam)
\r
5571 ATLASSERT(::IsWindow(m_hWnd));
\r
5572 TBBUTTONINFO tbbi = { 0 };
\r
5573 tbbi.cbSize = sizeof(TBBUTTONINFO);
\r
5574 tbbi.dwMask = dwMask;
\r
5575 tbbi.idCommand = iCommand;
\r
5576 tbbi.iImage = iImage;
\r
5577 tbbi.fsState = State;
\r
5578 tbbi.fsStyle = Style;
\r
5580 tbbi.pszText = (LPTSTR) lpszItem;
\r
5581 tbbi.lParam = lParam;
\r
5582 return (BOOL)::SendMessage(m_hWnd, TB_SETBUTTONINFO, nID, (LPARAM)&tbbi);
\r
5585 #ifndef _WIN32_WCE
\r
5586 int GetHotItem() const
\r
5588 ATLASSERT(::IsWindow(m_hWnd));
\r
5589 return (int)::SendMessage(m_hWnd, TB_GETHOTITEM, 0, 0L);
\r
5592 int SetHotItem(int nItem)
\r
5594 ATLASSERT(::IsWindow(m_hWnd));
\r
5595 return (int)::SendMessage(m_hWnd, TB_SETHOTITEM, nItem, 0L);
\r
5597 #endif // !_WIN32_WCE
\r
5599 BOOL IsButtonHighlighted(int nButtonID) const
\r
5601 ATLASSERT(::IsWindow(m_hWnd));
\r
5602 return (BOOL)::SendMessage(m_hWnd, TB_ISBUTTONHIGHLIGHTED, nButtonID, 0L);
\r
5605 DWORD SetDrawTextFlags(DWORD dwMask, DWORD dwFlags)
\r
5607 ATLASSERT(::IsWindow(m_hWnd));
\r
5608 return (DWORD)::SendMessage(m_hWnd, TB_SETDRAWTEXTFLAGS, dwMask, dwFlags);
\r
5611 #ifndef _WIN32_WCE
\r
5612 BOOL GetColorScheme(LPCOLORSCHEME lpcs) const
\r
5614 ATLASSERT(::IsWindow(m_hWnd));
\r
5615 return (BOOL)::SendMessage(m_hWnd, TB_GETCOLORSCHEME, 0, (LPARAM)lpcs);
\r
5618 void SetColorScheme(LPCOLORSCHEME lpcs)
\r
5620 ATLASSERT(::IsWindow(m_hWnd));
\r
5621 ::SendMessage(m_hWnd, TB_SETCOLORSCHEME, 0, (LPARAM)lpcs);
\r
5624 DWORD GetExtendedStyle() const
\r
5626 ATLASSERT(::IsWindow(m_hWnd));
\r
5627 return (DWORD)::SendMessage(m_hWnd, TB_GETEXTENDEDSTYLE, 0, 0L);
\r
5630 DWORD SetExtendedStyle(DWORD dwStyle)
\r
5632 ATLASSERT(::IsWindow(m_hWnd));
\r
5633 return (DWORD)::SendMessage(m_hWnd, TB_SETEXTENDEDSTYLE, 0, dwStyle);
\r
5636 void GetInsertMark(LPTBINSERTMARK lptbim) const
\r
5638 ATLASSERT(::IsWindow(m_hWnd));
\r
5639 ::SendMessage(m_hWnd, TB_GETINSERTMARK, 0, (LPARAM)lptbim);
\r
5642 void SetInsertMark(LPTBINSERTMARK lptbim)
\r
5644 ATLASSERT(::IsWindow(m_hWnd));
\r
5645 ::SendMessage(m_hWnd, TB_SETINSERTMARK, 0, (LPARAM)lptbim);
\r
5648 COLORREF GetInsertMarkColor() const
\r
5650 ATLASSERT(::IsWindow(m_hWnd));
\r
5651 return (COLORREF)::SendMessage(m_hWnd, TB_GETINSERTMARKCOLOR, 0, 0L);
\r
5654 COLORREF SetInsertMarkColor(COLORREF clr)
\r
5656 ATLASSERT(::IsWindow(m_hWnd));
\r
5657 return (COLORREF)::SendMessage(m_hWnd, TB_SETINSERTMARKCOLOR, 0, (LPARAM)clr);
\r
5660 BOOL GetMaxSize(LPSIZE lpSize) const
\r
5662 ATLASSERT(::IsWindow(m_hWnd));
\r
5663 return (BOOL)::SendMessage(m_hWnd, TB_GETMAXSIZE, 0, (LPARAM)lpSize);
\r
5666 void GetPadding(LPSIZE lpSizePadding) const
\r
5668 ATLASSERT(::IsWindow(m_hWnd));
\r
5669 ATLASSERT(lpSizePadding != NULL);
\r
5670 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, TB_GETPADDING, 0, 0L);
\r
5671 lpSizePadding->cx = GET_X_LPARAM(dwRet);
\r
5672 lpSizePadding->cy = GET_Y_LPARAM(dwRet);
\r
5675 void SetPadding(int cx, int cy, LPSIZE lpSizePadding = NULL)
\r
5677 ATLASSERT(::IsWindow(m_hWnd));
\r
5678 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, TB_SETPADDING, 0, MAKELPARAM(cx, cy));
\r
5679 if(lpSizePadding != NULL)
\r
5681 lpSizePadding->cx = GET_X_LPARAM(dwRet);
\r
5682 lpSizePadding->cy = GET_Y_LPARAM(dwRet);
\r
5686 BOOL GetUnicodeFormat() const
\r
5688 ATLASSERT(::IsWindow(m_hWnd));
\r
5689 return (BOOL)::SendMessage(m_hWnd, TB_GETUNICODEFORMAT, 0, 0L);
\r
5692 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
\r
5694 ATLASSERT(::IsWindow(m_hWnd));
\r
5695 return (BOOL)::SendMessage(m_hWnd, TB_SETUNICODEFORMAT, bUnicode, 0L);
\r
5697 #endif // !_WIN32_WCE
\r
5698 #endif // (_WIN32_IE >= 0x0400)
\r
5700 #if (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)
\r
5701 int GetString(int nString, LPTSTR lpstrString, int cchMaxLen) const
\r
5703 ATLASSERT(::IsWindow(m_hWnd));
\r
5704 return (int)::SendMessage(m_hWnd, TB_GETSTRING, MAKEWPARAM(cchMaxLen, nString), (LPARAM)lpstrString);
\r
5707 int GetStringBSTR(int nString, BSTR& bstrString) const
\r
5710 ATLASSERT(::IsWindow(m_hWnd));
\r
5711 ATLASSERT(bstrString == NULL);
\r
5712 int nLength = (int)(short)LOWORD(::SendMessage(m_hWnd, TB_GETSTRING, MAKEWPARAM(0, nString), NULL));
\r
5715 CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff;
\r
5716 LPTSTR lpstrText = buff.Allocate(nLength + 1);
\r
5717 if(lpstrText != NULL)
\r
5719 nLength = (int)::SendMessage(m_hWnd, TB_GETSTRING, MAKEWPARAM(nLength + 1, nString), (LPARAM)lpstrText);
\r
5721 bstrString = ::SysAllocString(T2OLE(lpstrText));
\r
5732 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
\r
5733 int GetString(int nString, _CSTRING_NS::CString& str) const
\r
5735 ATLASSERT(::IsWindow(m_hWnd));
\r
5736 int nLength = (int)(short)LOWORD(::SendMessage(m_hWnd, TB_GETSTRING, MAKEWPARAM(0, nString), NULL));
\r
5739 LPTSTR lpstr = str.GetBufferSetLength(nLength + 1);
\r
5741 nLength = (int)::SendMessage(m_hWnd, TB_GETSTRING, MAKEWPARAM(nLength + 1, nString), (LPARAM)lpstr);
\r
5744 str.ReleaseBuffer();
\r
5748 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
\r
5749 #endif // (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)
\r
5751 #if (_WIN32_WINNT >= 0x0501)
\r
5752 void GetMetrics(LPTBMETRICS lptbm) const
\r
5754 ATLASSERT(::IsWindow(m_hWnd));
\r
5755 ::SendMessage(m_hWnd, TB_GETMETRICS, 0, (LPARAM)lptbm);
\r
5758 void SetMetrics(LPTBMETRICS lptbm)
\r
5760 ATLASSERT(::IsWindow(m_hWnd));
\r
5761 ::SendMessage(m_hWnd, TB_SETMETRICS, 0, (LPARAM)lptbm);
\r
5764 void SetWindowTheme(LPCWSTR lpstrTheme)
\r
5766 ATLASSERT(::IsWindow(m_hWnd));
\r
5767 ::SendMessage(m_hWnd, TB_SETWINDOWTHEME, 0, (LPARAM)lpstrTheme);
\r
5769 #endif // (_WIN32_WINNT >= 0x0501)
\r
5771 #if (_WIN32_WINNT >= 0x0600)
\r
5772 CImageList GetPressedImageList(int nIndex = 0) const
\r
5774 ATLASSERT(::IsWindow(m_hWnd));
\r
5775 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TB_GETPRESSEDIMAGELIST, nIndex, 0L));
\r
5778 CImageList SetPressedImageList(HIMAGELIST hImageList, int nIndex = 0)
\r
5780 ATLASSERT(::IsWindow(m_hWnd));
\r
5781 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TB_SETPRESSEDIMAGELIST, nIndex, (LPARAM)hImageList));
\r
5783 #endif // (_WIN32_WINNT >= 0x0600)
\r
5786 BOOL EnableButton(int nID, BOOL bEnable = TRUE)
\r
5788 ATLASSERT(::IsWindow(m_hWnd));
\r
5789 return (BOOL)::SendMessage(m_hWnd, TB_ENABLEBUTTON, nID, MAKELPARAM(bEnable, 0));
\r
5792 BOOL CheckButton(int nID, BOOL bCheck = TRUE)
\r
5794 ATLASSERT(::IsWindow(m_hWnd));
\r
5795 return (BOOL)::SendMessage(m_hWnd, TB_CHECKBUTTON, nID, MAKELPARAM(bCheck, 0));
\r
5798 BOOL PressButton(int nID, BOOL bPress = TRUE)
\r
5800 ATLASSERT(::IsWindow(m_hWnd));
\r
5801 return (BOOL)::SendMessage(m_hWnd, TB_PRESSBUTTON, nID, MAKELPARAM(bPress, 0));
\r
5804 BOOL HideButton(int nID, BOOL bHide = TRUE)
\r
5806 ATLASSERT(::IsWindow(m_hWnd));
\r
5807 return (BOOL)::SendMessage(m_hWnd, TB_HIDEBUTTON, nID, MAKELPARAM(bHide, 0));
\r
5810 BOOL Indeterminate(int nID, BOOL bIndeterminate = TRUE)
\r
5812 ATLASSERT(::IsWindow(m_hWnd));
\r
5813 return (BOOL)::SendMessage(m_hWnd, TB_INDETERMINATE, nID, MAKELPARAM(bIndeterminate, 0));
\r
5816 int AddBitmap(int nNumButtons, UINT nBitmapID)
\r
5818 ATLASSERT(::IsWindow(m_hWnd));
\r
5819 TBADDBITMAP tbab = { 0 };
\r
5820 tbab.hInst = ModuleHelper::GetResourceInstance();
\r
5821 ATLASSERT(tbab.hInst != NULL);
\r
5822 tbab.nID = nBitmapID;
\r
5823 return (int)::SendMessage(m_hWnd, TB_ADDBITMAP, (WPARAM)nNumButtons, (LPARAM)&tbab);
\r
5826 int AddBitmap(int nNumButtons, HBITMAP hBitmap)
\r
5828 ATLASSERT(::IsWindow(m_hWnd));
\r
5829 TBADDBITMAP tbab = { 0 };
\r
5830 tbab.hInst = NULL;
\r
5831 tbab.nID = (UINT_PTR)hBitmap;
\r
5832 return (int)::SendMessage(m_hWnd, TB_ADDBITMAP, (WPARAM)nNumButtons, (LPARAM)&tbab);
\r
5835 BOOL AddButtons(int nNumButtons, LPTBBUTTON lpButtons)
\r
5837 ATLASSERT(::IsWindow(m_hWnd));
\r
5838 return (BOOL)::SendMessage(m_hWnd, TB_ADDBUTTONS, nNumButtons, (LPARAM)lpButtons);
\r
5841 BOOL InsertButton(int nIndex, LPTBBUTTON lpButton)
\r
5843 ATLASSERT(::IsWindow(m_hWnd));
\r
5844 return (BOOL)::SendMessage(m_hWnd, TB_INSERTBUTTON, nIndex, (LPARAM)lpButton);
\r
5847 BOOL InsertButton(int nIndex, int iCommand, BYTE Style, BYTE State, int iBitmap,
\r
5848 INT_PTR iString, DWORD_PTR lParam)
\r
5850 ATLASSERT(::IsWindow(m_hWnd));
\r
5851 TBBUTTON tbb = { 0 };
\r
5852 tbb.fsStyle = Style;
\r
5853 tbb.fsState = State;
\r
5854 tbb.idCommand = iCommand;
\r
5855 tbb.iBitmap = iBitmap;
\r
5856 tbb.iString = iString;
\r
5857 tbb.dwData = lParam;
\r
5858 return (BOOL)::SendMessage(m_hWnd, TB_INSERTBUTTON, nIndex, (LPARAM)&tbb);
\r
5861 BOOL InsertButton(int nIndex, int iCommand, BYTE Style, BYTE State, int iBitmap,
\r
5862 LPCTSTR lpszItem, DWORD_PTR lParam)
\r
5864 return InsertButton(nIndex, iCommand, Style, State, iBitmap, (INT_PTR)lpszItem, lParam);
\r
5867 BOOL AddButton(LPTBBUTTON lpButton)
\r
5869 return InsertButton(-1, lpButton);
\r
5872 BOOL AddButton(int iCommand, BYTE Style, BYTE State, int iBitmap, INT_PTR iString, DWORD_PTR lParam)
\r
5874 return InsertButton(-1, iCommand, Style, State, iBitmap, iString, lParam);
\r
5877 BOOL AddButton(int iCommand, BYTE Style, BYTE State, int iBitmap, LPCTSTR lpszItem, DWORD_PTR lParam)
\r
5879 return InsertButton(-1, iCommand, Style, State, iBitmap, lpszItem, lParam);
\r
5882 BOOL DeleteButton(int nIndex)
\r
5884 ATLASSERT(::IsWindow(m_hWnd));
\r
5885 return (BOOL)::SendMessage(m_hWnd, TB_DELETEBUTTON, nIndex, 0L);
\r
5888 UINT CommandToIndex(UINT nID) const
\r
5890 ATLASSERT(::IsWindow(m_hWnd));
\r
5891 return (UINT)::SendMessage(m_hWnd, TB_COMMANDTOINDEX, nID, 0L);
\r
5894 #ifndef _WIN32_WCE
\r
5895 void SaveState(HKEY hKeyRoot, LPCTSTR lpszSubKey, LPCTSTR lpszValueName)
\r
5897 ATLASSERT(::IsWindow(m_hWnd));
\r
5898 TBSAVEPARAMS tbs = { 0 };
\r
5899 tbs.hkr = hKeyRoot;
\r
5900 tbs.pszSubKey = lpszSubKey;
\r
5901 tbs.pszValueName = lpszValueName;
\r
5902 ::SendMessage(m_hWnd, TB_SAVERESTORE, (WPARAM)TRUE, (LPARAM)&tbs);
\r
5905 void RestoreState(HKEY hKeyRoot, LPCTSTR lpszSubKey, LPCTSTR lpszValueName)
\r
5907 ATLASSERT(::IsWindow(m_hWnd));
\r
5908 TBSAVEPARAMS tbs = { 0 };
\r
5909 tbs.hkr = hKeyRoot;
\r
5910 tbs.pszSubKey = lpszSubKey;
\r
5911 tbs.pszValueName = lpszValueName;
\r
5912 ::SendMessage(m_hWnd, TB_SAVERESTORE, (WPARAM)FALSE, (LPARAM)&tbs);
\r
5917 ATLASSERT(::IsWindow(m_hWnd));
\r
5918 ::SendMessage(m_hWnd, TB_CUSTOMIZE, 0, 0L);
\r
5920 #endif // !_WIN32_WCE
\r
5922 int AddString(UINT nStringID)
\r
5924 ATLASSERT(::IsWindow(m_hWnd));
\r
5925 return (int)::SendMessage(m_hWnd, TB_ADDSTRING, (WPARAM)ModuleHelper::GetResourceInstance(), (LPARAM)nStringID);
\r
5928 int AddStrings(LPCTSTR lpszStrings)
\r
5930 ATLASSERT(::IsWindow(m_hWnd));
\r
5931 return (int)::SendMessage(m_hWnd, TB_ADDSTRING, 0, (LPARAM)lpszStrings);
\r
5936 ATLASSERT(::IsWindow(m_hWnd));
\r
5937 ::SendMessage(m_hWnd, TB_AUTOSIZE, 0, 0L);
\r
5940 BOOL ChangeBitmap(int nID, int nBitmap)
\r
5942 ATLASSERT(::IsWindow(m_hWnd));
\r
5943 return (BOOL)::SendMessage(m_hWnd, TB_CHANGEBITMAP, nID, MAKELPARAM(nBitmap, 0));
\r
5946 int LoadImages(int nBitmapID)
\r
5948 ATLASSERT(::IsWindow(m_hWnd));
\r
5949 return (int)::SendMessage(m_hWnd, TB_LOADIMAGES, nBitmapID, (LPARAM)ModuleHelper::GetResourceInstance());
\r
5952 int LoadStdImages(int nBitmapID)
\r
5954 ATLASSERT(::IsWindow(m_hWnd));
\r
5955 return (int)::SendMessage(m_hWnd, TB_LOADIMAGES, nBitmapID, (LPARAM)HINST_COMMCTRL);
\r
5958 BOOL ReplaceBitmap(LPTBREPLACEBITMAP ptbrb)
\r
5960 ATLASSERT(::IsWindow(m_hWnd));
\r
5961 return (BOOL)::SendMessage(m_hWnd, TB_REPLACEBITMAP, 0, (LPARAM)ptbrb);
\r
5964 #if (_WIN32_IE >= 0x0400)
\r
5965 int HitTest(LPPOINT lpPoint) const
\r
5967 ATLASSERT(::IsWindow(m_hWnd));
\r
5968 return (int)::SendMessage(m_hWnd, TB_HITTEST, 0, (LPARAM)lpPoint);
\r
5971 #ifndef _WIN32_WCE
\r
5972 BOOL InsertMarkHitTest(LPPOINT lpPoint, LPTBINSERTMARK lptbim) const
\r
5974 ATLASSERT(::IsWindow(m_hWnd));
\r
5975 return (BOOL)::SendMessage(m_hWnd, TB_INSERTMARKHITTEST, (WPARAM)lpPoint, (LPARAM)lptbim);
\r
5978 BOOL InsertMarkHitTest(int x, int y, LPTBINSERTMARK lptbim) const
\r
5980 ATLASSERT(::IsWindow(m_hWnd));
\r
5981 POINT pt = { x, y };
\r
5982 return (BOOL)::SendMessage(m_hWnd, TB_INSERTMARKHITTEST, (WPARAM)&pt, (LPARAM)lptbim);
\r
5985 BOOL MapAccelerator(TCHAR chAccel, int& nID) const
\r
5987 ATLASSERT(::IsWindow(m_hWnd));
\r
5988 return (BOOL)::SendMessage(m_hWnd, TB_MAPACCELERATOR, (WPARAM)chAccel, (LPARAM)&nID);
\r
5991 BOOL MarkButton(int nID, BOOL bHighlight = TRUE)
\r
5993 ATLASSERT(::IsWindow(m_hWnd));
\r
5994 return (BOOL)::SendMessage(m_hWnd, TB_MARKBUTTON, nID, MAKELPARAM(bHighlight, 0));
\r
5997 BOOL MoveButton(int nOldPos, int nNewPos)
\r
5999 ATLASSERT(::IsWindow(m_hWnd));
\r
6000 return (BOOL)::SendMessage(m_hWnd, TB_MOVEBUTTON, nOldPos, nNewPos);
\r
6003 HRESULT GetObject(REFIID iid, LPVOID* ppvObject)
\r
6005 ATLASSERT(::IsWindow(m_hWnd));
\r
6006 return (HRESULT)::SendMessage(m_hWnd, TB_GETOBJECT, (WPARAM)&iid, (LPARAM)ppvObject);
\r
6008 #endif // !_WIN32_WCE
\r
6009 #endif // (_WIN32_IE >= 0x0400)
\r
6012 typedef CToolBarCtrlT<ATL::CWindow> CToolBarCtrl;
\r
6015 ///////////////////////////////////////////////////////////////////////////////
\r
6018 template <class TBase>
\r
6019 class CStatusBarCtrlT : public TBase
\r
6023 CStatusBarCtrlT(HWND hWnd = NULL) : TBase(hWnd)
\r
6026 CStatusBarCtrlT< TBase >& operator =(HWND hWnd)
\r
6032 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
6033 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
6034 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
6036 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
6040 static LPCTSTR GetWndClassName()
\r
6042 return STATUSCLASSNAME;
\r
6045 int GetParts(int nParts, int* pParts) const
\r
6047 ATLASSERT(::IsWindow(m_hWnd));
\r
6048 return (int)::SendMessage(m_hWnd, SB_GETPARTS, nParts, (LPARAM)pParts);
\r
6051 BOOL SetParts(int nParts, int* pWidths)
\r
6053 ATLASSERT(::IsWindow(m_hWnd));
\r
6054 return (BOOL)::SendMessage(m_hWnd, SB_SETPARTS, nParts, (LPARAM)pWidths);
\r
6057 int GetTextLength(int nPane, int* pType = NULL) const
\r
6059 ATLASSERT(::IsWindow(m_hWnd));
\r
6060 ATLASSERT(nPane < 256);
\r
6061 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, SB_GETTEXTLENGTH, (WPARAM)nPane, 0L);
\r
6062 if (pType != NULL)
\r
6063 *pType = (int)(short)HIWORD(dwRet);
\r
6064 return (int)(short)LOWORD(dwRet);
\r
6067 int GetText(int nPane, LPTSTR lpszText, int* pType = NULL) const
\r
6069 ATLASSERT(::IsWindow(m_hWnd));
\r
6070 ATLASSERT(nPane < 256);
\r
6071 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, SB_GETTEXT, (WPARAM)nPane, (LPARAM)lpszText);
\r
6073 *pType = (int)(short)HIWORD(dwRet);
\r
6074 return (int)(short)LOWORD(dwRet);
\r
6077 #ifndef _ATL_NO_COM
\r
6078 BOOL GetTextBSTR(int nPane, BSTR& bstrText, int* pType = NULL) const
\r
6081 ATLASSERT(::IsWindow(m_hWnd));
\r
6082 ATLASSERT(nPane < 256);
\r
6083 ATLASSERT(bstrText == NULL);
\r
6084 int nLength = (int)(short)LOWORD(::SendMessage(m_hWnd, SB_GETTEXTLENGTH, (WPARAM)nPane, 0L));
\r
6088 CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff;
\r
6089 LPTSTR lpstrText = buff.Allocate(nLength + 1);
\r
6090 if(lpstrText == NULL)
\r
6093 if(!GetText(nPane, lpstrText, pType))
\r
6096 bstrText = ::SysAllocString(T2OLE(lpstrText));
\r
6097 return (bstrText != NULL) ? TRUE : FALSE;
\r
6099 #endif // !_ATL_NO_COM
\r
6101 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
\r
6102 int GetText(int nPane, _CSTRING_NS::CString& strText, int* pType = NULL) const
\r
6104 ATLASSERT(::IsWindow(m_hWnd));
\r
6105 ATLASSERT(nPane < 256);
\r
6106 int nLength = (int)(short)LOWORD(::SendMessage(m_hWnd, SB_GETTEXTLENGTH, (WPARAM)nPane, 0L));
\r
6110 LPTSTR lpstr = strText.GetBufferSetLength(nLength);
\r
6113 return GetText(nPane, lpstr, pType);
\r
6115 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
\r
6117 BOOL SetText(int nPane, LPCTSTR lpszText, int nType = 0)
\r
6119 ATLASSERT(::IsWindow(m_hWnd));
\r
6120 ATLASSERT(nPane < 256);
\r
6121 return (BOOL)::SendMessage(m_hWnd, SB_SETTEXT, (nPane | nType), (LPARAM)lpszText);
\r
6124 BOOL GetRect(int nPane, LPRECT lpRect) const
\r
6126 ATLASSERT(::IsWindow(m_hWnd));
\r
6127 ATLASSERT(nPane < 256);
\r
6128 return (BOOL)::SendMessage(m_hWnd, SB_GETRECT, nPane, (LPARAM)lpRect);
\r
6131 BOOL GetBorders(int* pBorders) const
\r
6133 ATLASSERT(::IsWindow(m_hWnd));
\r
6134 return (BOOL)::SendMessage(m_hWnd, SB_GETBORDERS, 0, (LPARAM)pBorders);
\r
6137 BOOL GetBorders(int& nHorz, int& nVert, int& nSpacing) const
\r
6139 ATLASSERT(::IsWindow(m_hWnd));
\r
6140 int borders[3] = { 0, 0, 0 };
\r
6141 BOOL bResult = (BOOL)::SendMessage(m_hWnd, SB_GETBORDERS, 0, (LPARAM)&borders);
\r
6144 nHorz = borders[0];
\r
6145 nVert = borders[1];
\r
6146 nSpacing = borders[2];
\r
6151 void SetMinHeight(int nMin)
\r
6153 ATLASSERT(::IsWindow(m_hWnd));
\r
6154 ::SendMessage(m_hWnd, SB_SETMINHEIGHT, nMin, 0L);
\r
6157 BOOL SetSimple(BOOL bSimple = TRUE)
\r
6159 ATLASSERT(::IsWindow(m_hWnd));
\r
6160 return (BOOL)::SendMessage(m_hWnd, SB_SIMPLE, bSimple, 0L);
\r
6163 BOOL IsSimple() const
\r
6165 ATLASSERT(::IsWindow(m_hWnd));
\r
6166 return (BOOL)::SendMessage(m_hWnd, SB_ISSIMPLE, 0, 0L);
\r
6169 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
6170 BOOL GetUnicodeFormat() const
\r
6172 ATLASSERT(::IsWindow(m_hWnd));
\r
6173 return (BOOL)::SendMessage(m_hWnd, SB_GETUNICODEFORMAT, 0, 0L);
\r
6176 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
\r
6178 ATLASSERT(::IsWindow(m_hWnd));
\r
6179 return (BOOL)::SendMessage(m_hWnd, SB_SETUNICODEFORMAT, bUnicode, 0L);
\r
6182 void GetTipText(int nPane, LPTSTR lpstrText, int nSize) const
\r
6184 ATLASSERT(::IsWindow(m_hWnd));
\r
6185 ATLASSERT(nPane < 256);
\r
6186 ::SendMessage(m_hWnd, SB_GETTIPTEXT, MAKEWPARAM(nPane, nSize), (LPARAM)lpstrText);
\r
6189 void SetTipText(int nPane, LPCTSTR lpstrText)
\r
6191 ATLASSERT(::IsWindow(m_hWnd));
\r
6192 ATLASSERT(nPane < 256);
\r
6193 ::SendMessage(m_hWnd, SB_SETTIPTEXT, nPane, (LPARAM)lpstrText);
\r
6195 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
6197 #if ((_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)) || (defined(_WIN32_WCE) && (_WIN32_WCE >= 0x0500))
\r
6198 COLORREF SetBkColor(COLORREF clrBk)
\r
6200 ATLASSERT(::IsWindow(m_hWnd));
\r
6201 return (COLORREF)::SendMessage(m_hWnd, SB_SETBKCOLOR, 0, (LPARAM)clrBk);
\r
6204 HICON GetIcon(int nPane) const
\r
6206 ATLASSERT(::IsWindow(m_hWnd));
\r
6207 ATLASSERT(nPane < 256);
\r
6208 return (HICON)::SendMessage(m_hWnd, SB_GETICON, nPane, 0L);
\r
6211 BOOL SetIcon(int nPane, HICON hIcon)
\r
6213 ATLASSERT(::IsWindow(m_hWnd));
\r
6214 ATLASSERT(nPane < 256);
\r
6215 return (BOOL)::SendMessage(m_hWnd, SB_SETICON, nPane, (LPARAM)hIcon);
\r
6217 #endif // ((_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)) || (defined(_WIN32_WCE) && (_WIN32_WCE >= 0x0500))
\r
6220 typedef CStatusBarCtrlT<ATL::CWindow> CStatusBarCtrl;
\r
6223 ///////////////////////////////////////////////////////////////////////////////
\r
6226 template <class TBase>
\r
6227 class CTabCtrlT : public TBase
\r
6231 CTabCtrlT(HWND hWnd = NULL) : TBase(hWnd)
\r
6234 CTabCtrlT< TBase >& operator =(HWND hWnd)
\r
6240 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
6241 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
6242 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
6244 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
6248 static LPCTSTR GetWndClassName()
\r
6250 return WC_TABCONTROL;
\r
6253 CImageList GetImageList() const
\r
6255 ATLASSERT(::IsWindow(m_hWnd));
\r
6256 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TCM_GETIMAGELIST, 0, 0L));
\r
6259 CImageList SetImageList(HIMAGELIST hImageList)
\r
6261 ATLASSERT(::IsWindow(m_hWnd));
\r
6262 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TCM_SETIMAGELIST, 0, (LPARAM)hImageList));
\r
6265 int GetItemCount() const
\r
6267 ATLASSERT(::IsWindow(m_hWnd));
\r
6268 return (int)::SendMessage(m_hWnd, TCM_GETITEMCOUNT, 0, 0L);
\r
6271 BOOL GetItem(int nItem, LPTCITEM pTabCtrlItem) const
\r
6273 ATLASSERT(::IsWindow(m_hWnd));
\r
6274 return (BOOL)::SendMessage(m_hWnd, TCM_GETITEM, nItem, (LPARAM)pTabCtrlItem);
\r
6277 BOOL SetItem(int nItem, LPTCITEM pTabCtrlItem)
\r
6279 ATLASSERT(::IsWindow(m_hWnd));
\r
6280 return (BOOL)::SendMessage(m_hWnd, TCM_SETITEM, nItem, (LPARAM)pTabCtrlItem);
\r
6283 int SetItem(int nItem, UINT mask, LPCTSTR lpszItem, DWORD dwState, DWORD dwStateMask, int iImage, LPARAM lParam)
\r
6285 ATLASSERT(::IsWindow(m_hWnd));
\r
6286 TCITEM tci = { 0 };
\r
6288 tci.pszText = (LPTSTR) lpszItem;
\r
6289 tci.dwState = dwState;
\r
6290 tci.dwStateMask = dwStateMask;
\r
6291 tci.iImage = iImage;
\r
6292 tci.lParam = lParam;
\r
6293 return (int)::SendMessage(m_hWnd, TCM_SETITEM, nItem, (LPARAM)&tci);
\r
6296 BOOL GetItemRect(int nItem, LPRECT lpRect) const
\r
6298 ATLASSERT(::IsWindow(m_hWnd));
\r
6299 return (BOOL)::SendMessage(m_hWnd, TCM_GETITEMRECT, nItem, (LPARAM)lpRect);
\r
6302 int GetCurSel() const
\r
6304 ATLASSERT(::IsWindow(m_hWnd));
\r
6305 return (int)::SendMessage(m_hWnd, TCM_GETCURSEL, 0, 0L);
\r
6308 int SetCurSel(int nItem)
\r
6310 ATLASSERT(::IsWindow(m_hWnd));
\r
6311 return (int)::SendMessage(m_hWnd, TCM_SETCURSEL, nItem, 0L);
\r
6314 SIZE SetItemSize(SIZE size)
\r
6316 ATLASSERT(::IsWindow(m_hWnd));
\r
6317 DWORD dwSize = (DWORD)::SendMessage(m_hWnd, TCM_SETITEMSIZE, 0, MAKELPARAM(size.cx, size.cy));
\r
6318 SIZE sizeRet = { GET_X_LPARAM(dwSize), GET_Y_LPARAM(dwSize) };
\r
6322 void SetItemSize(int cx, int cy)
\r
6324 ATLASSERT(::IsWindow(m_hWnd));
\r
6325 ::SendMessage(m_hWnd, TCM_SETITEMSIZE, 0, MAKELPARAM(cx, cy));
\r
6328 void SetPadding(SIZE size)
\r
6330 ATLASSERT(::IsWindow(m_hWnd));
\r
6331 ::SendMessage(m_hWnd, TCM_SETPADDING, 0, MAKELPARAM(size.cx, size.cy));
\r
6334 int GetRowCount() const
\r
6336 ATLASSERT(::IsWindow(m_hWnd));
\r
6337 return (int)::SendMessage(m_hWnd, TCM_GETROWCOUNT, 0, 0L);
\r
6340 #ifndef _WIN32_WCE
\r
6341 CToolTipCtrl GetTooltips() const
\r
6343 ATLASSERT(::IsWindow(m_hWnd));
\r
6344 return CToolTipCtrl((HWND)::SendMessage(m_hWnd, TCM_GETTOOLTIPS, 0, 0L));
\r
6347 void SetTooltips(HWND hWndToolTip)
\r
6349 ATLASSERT(::IsWindow(m_hWnd));
\r
6350 ::SendMessage(m_hWnd, TCM_SETTOOLTIPS, (WPARAM)hWndToolTip, 0L);
\r
6352 #endif // !_WIN32_WCE
\r
6354 int GetCurFocus() const
\r
6356 ATLASSERT(::IsWindow(m_hWnd));
\r
6357 return (int)::SendMessage(m_hWnd, TCM_GETCURFOCUS, 0, 0L);
\r
6360 void SetCurFocus(int nItem)
\r
6362 ATLASSERT(::IsWindow(m_hWnd));
\r
6363 ::SendMessage(m_hWnd, TCM_SETCURFOCUS, nItem, 0L);
\r
6366 BOOL SetItemExtra(int cbExtra)
\r
6368 ATLASSERT(::IsWindow(m_hWnd));
\r
6369 ATLASSERT(GetItemCount() == 0); // must be empty
\r
6370 return (BOOL)::SendMessage(m_hWnd, TCM_SETITEMEXTRA, cbExtra, 0L);
\r
6373 int SetMinTabWidth(int nWidth = -1)
\r
6375 ATLASSERT(::IsWindow(m_hWnd));
\r
6376 return (int)::SendMessage(m_hWnd, TCM_SETMINTABWIDTH, 0, nWidth);
\r
6379 #if (_WIN32_IE >= 0x0400)
\r
6380 DWORD GetExtendedStyle() const
\r
6382 ATLASSERT(::IsWindow(m_hWnd));
\r
6383 return (DWORD)::SendMessage(m_hWnd, TCM_GETEXTENDEDSTYLE, 0, 0L);
\r
6386 DWORD SetExtendedStyle(DWORD dwExMask, DWORD dwExStyle)
\r
6388 ATLASSERT(::IsWindow(m_hWnd));
\r
6389 return (DWORD)::SendMessage(m_hWnd, TCM_SETEXTENDEDSTYLE, dwExMask, dwExStyle);
\r
6392 #ifndef _WIN32_WCE
\r
6393 BOOL GetUnicodeFormat() const
\r
6395 ATLASSERT(::IsWindow(m_hWnd));
\r
6396 return (BOOL)::SendMessage(m_hWnd, TCM_GETUNICODEFORMAT, 0, 0L);
\r
6399 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
\r
6401 ATLASSERT(::IsWindow(m_hWnd));
\r
6402 return (BOOL)::SendMessage(m_hWnd, TCM_SETUNICODEFORMAT, bUnicode, 0L);
\r
6404 #endif // !_WIN32_WCE
\r
6405 #endif // (_WIN32_IE >= 0x0400)
\r
6408 int InsertItem(int nItem, LPTCITEM pTabCtrlItem)
\r
6410 ATLASSERT(::IsWindow(m_hWnd));
\r
6411 return (int)::SendMessage(m_hWnd, TCM_INSERTITEM, nItem, (LPARAM)pTabCtrlItem);
\r
6414 int InsertItem(int nItem, UINT mask, LPCTSTR lpszItem, int iImage, LPARAM lParam)
\r
6416 ATLASSERT(::IsWindow(m_hWnd));
\r
6417 TCITEM tci = { 0 };
\r
6419 tci.pszText = (LPTSTR) lpszItem;
\r
6420 tci.iImage = iImage;
\r
6421 tci.lParam = lParam;
\r
6422 return (int)::SendMessage(m_hWnd, TCM_INSERTITEM, nItem, (LPARAM)&tci);
\r
6425 int InsertItem(int nItem, LPCTSTR lpszItem)
\r
6427 ATLASSERT(::IsWindow(m_hWnd));
\r
6428 TCITEM tci = { 0 };
\r
6429 tci.mask = TCIF_TEXT;
\r
6430 tci.pszText = (LPTSTR) lpszItem;
\r
6431 return (int)::SendMessage(m_hWnd, TCM_INSERTITEM, nItem, (LPARAM)&tci);
\r
6434 int AddItem(LPTCITEM pTabCtrlItem)
\r
6436 return InsertItem(GetItemCount(), pTabCtrlItem);
\r
6439 int AddItem(UINT mask, LPCTSTR lpszItem, int iImage, LPARAM lParam)
\r
6441 return InsertItem(GetItemCount(), mask, lpszItem, iImage, lParam);
\r
6444 int AddItem(LPCTSTR lpszItem)
\r
6446 return InsertItem(GetItemCount(), lpszItem);
\r
6449 BOOL DeleteItem(int nItem)
\r
6451 ATLASSERT(::IsWindow(m_hWnd));
\r
6452 return (BOOL)::SendMessage(m_hWnd, TCM_DELETEITEM, nItem, 0L);
\r
6455 BOOL DeleteAllItems()
\r
6457 ATLASSERT(::IsWindow(m_hWnd));
\r
6458 return (BOOL)::SendMessage(m_hWnd, TCM_DELETEALLITEMS, 0, 0L);
\r
6461 void AdjustRect(BOOL bLarger, LPRECT lpRect)
\r
6463 ATLASSERT(::IsWindow(m_hWnd));
\r
6464 ::SendMessage(m_hWnd, TCM_ADJUSTRECT, bLarger, (LPARAM)lpRect);
\r
6467 void RemoveImage(int nImage)
\r
6469 ATLASSERT(::IsWindow(m_hWnd));
\r
6470 ::SendMessage(m_hWnd, TCM_REMOVEIMAGE, nImage, 0L);
\r
6473 int HitTest(TC_HITTESTINFO* pHitTestInfo) const
\r
6475 ATLASSERT(::IsWindow(m_hWnd));
\r
6476 return (int)::SendMessage(m_hWnd, TCM_HITTEST, 0, (LPARAM)pHitTestInfo);
\r
6479 void DeselectAll(BOOL bExcludeFocus = TRUE)
\r
6481 ATLASSERT(::IsWindow(m_hWnd));
\r
6482 ::SendMessage(m_hWnd, TCM_DESELECTALL, bExcludeFocus, 0L);
\r
6485 #if (_WIN32_IE >= 0x0400)
\r
6486 BOOL HighlightItem(int nIndex, BOOL bHighlight = TRUE)
\r
6488 ATLASSERT(::IsWindow(m_hWnd));
\r
6489 return (BOOL)::SendMessage(m_hWnd, TCM_HIGHLIGHTITEM, nIndex, MAKELPARAM(bHighlight, 0));
\r
6491 #endif // (_WIN32_IE >= 0x0400)
\r
6494 typedef CTabCtrlT<ATL::CWindow> CTabCtrl;
\r
6497 ///////////////////////////////////////////////////////////////////////////////
\r
6500 template <class TBase>
\r
6501 class CTrackBarCtrlT : public TBase
\r
6505 CTrackBarCtrlT(HWND hWnd = NULL) : TBase(hWnd)
\r
6508 CTrackBarCtrlT< TBase >& operator =(HWND hWnd)
\r
6514 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
6515 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
6516 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
6518 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
6522 static LPCTSTR GetWndClassName()
\r
6524 return TRACKBAR_CLASS;
\r
6527 int GetLineSize() const
\r
6529 ATLASSERT(::IsWindow(m_hWnd));
\r
6530 return (int)::SendMessage(m_hWnd, TBM_GETLINESIZE, 0, 0L);
\r
6533 int SetLineSize(int nSize)
\r
6535 ATLASSERT(::IsWindow(m_hWnd));
\r
6536 return (int)::SendMessage(m_hWnd, TBM_SETLINESIZE, 0, nSize);
\r
6539 int GetPageSize() const
\r
6541 ATLASSERT(::IsWindow(m_hWnd));
\r
6542 return (int)::SendMessage(m_hWnd, TBM_GETPAGESIZE, 0, 0L);
\r
6545 int SetPageSize(int nSize)
\r
6547 ATLASSERT(::IsWindow(m_hWnd));
\r
6548 return (int)::SendMessage(m_hWnd, TBM_SETPAGESIZE, 0, nSize);
\r
6551 int GetRangeMin() const
\r
6553 ATLASSERT(::IsWindow(m_hWnd));
\r
6554 return (int)::SendMessage(m_hWnd, TBM_GETRANGEMIN, 0, 0L);
\r
6557 void SetRangeMin(int nMin, BOOL bRedraw = FALSE)
\r
6559 ATLASSERT(::IsWindow(m_hWnd));
\r
6560 ::SendMessage(m_hWnd, TBM_SETRANGEMIN, bRedraw, nMin);
\r
6563 int GetRangeMax() const
\r
6565 ATLASSERT(::IsWindow(m_hWnd));
\r
6566 return (int)::SendMessage(m_hWnd, TBM_GETRANGEMAX, 0, 0L);
\r
6569 void SetRangeMax(int nMax, BOOL bRedraw = FALSE)
\r
6571 ATLASSERT(::IsWindow(m_hWnd));
\r
6572 ::SendMessage(m_hWnd, TBM_SETRANGEMAX, bRedraw, nMax);
\r
6575 void GetRange(int& nMin, int& nMax) const
\r
6577 nMin = GetRangeMin();
\r
6578 nMax = GetRangeMax();
\r
6581 void SetRange(int nMin, int nMax, BOOL bRedraw = TRUE)
\r
6583 ATLASSERT(::IsWindow(m_hWnd));
\r
6584 ::SendMessage(m_hWnd, TBM_SETRANGE, bRedraw, MAKELPARAM(nMin, nMax));
\r
6587 int GetSelStart() const
\r
6589 ATLASSERT(::IsWindow(m_hWnd));
\r
6590 return (int)::SendMessage(m_hWnd, TBM_GETSELSTART, 0, 0L);
\r
6593 void SetSelStart(int nMin)
\r
6595 ATLASSERT(::IsWindow(m_hWnd));
\r
6596 ::SendMessage(m_hWnd, TBM_SETSELSTART, 0, (LPARAM)nMin);
\r
6599 int GetSelEnd() const
\r
6601 ATLASSERT(::IsWindow(m_hWnd));
\r
6602 return (int)::SendMessage(m_hWnd, TBM_GETSELEND, 0, 0L);
\r
6605 void SetSelEnd(int nMax)
\r
6607 ATLASSERT(::IsWindow(m_hWnd));
\r
6608 ::SendMessage(m_hWnd, TBM_SETSELEND, 0, (LPARAM)nMax);
\r
6611 void GetSelection(int& nMin, int& nMax) const
\r
6613 nMin = GetSelStart();
\r
6614 nMax = GetSelEnd();
\r
6617 void SetSelection(int nMin, int nMax)
\r
6619 SetSelStart(nMin);
\r
6623 void GetChannelRect(LPRECT lprc) const
\r
6625 ATLASSERT(::IsWindow(m_hWnd));
\r
6626 ::SendMessage(m_hWnd, TBM_GETCHANNELRECT, 0, (LPARAM)lprc);
\r
6629 void GetThumbRect(LPRECT lprc) const
\r
6631 ATLASSERT(::IsWindow(m_hWnd));
\r
6632 ::SendMessage(m_hWnd, TBM_GETTHUMBRECT, 0, (LPARAM)lprc);
\r
6635 int GetPos() const
\r
6637 ATLASSERT(::IsWindow(m_hWnd));
\r
6638 return (int)::SendMessage(m_hWnd, TBM_GETPOS, 0, 0L);
\r
6641 void SetPos(int nPos)
\r
6643 ATLASSERT(::IsWindow(m_hWnd));
\r
6644 ::SendMessage(m_hWnd, TBM_SETPOS, TRUE, nPos);
\r
6647 UINT GetNumTics() const
\r
6649 ATLASSERT(::IsWindow(m_hWnd));
\r
6650 return (UINT)::SendMessage(m_hWnd, TBM_GETNUMTICS, 0, 0L);
\r
6653 DWORD* GetTicArray() const
\r
6655 ATLASSERT(::IsWindow(m_hWnd));
\r
6656 return (DWORD*)::SendMessage(m_hWnd, TBM_GETPTICS, 0, 0L);
\r
6659 int GetTic(int nTic) const
\r
6661 ATLASSERT(::IsWindow(m_hWnd));
\r
6662 return (int)::SendMessage(m_hWnd, TBM_GETTIC, nTic, 0L);
\r
6665 BOOL SetTic(int nTic)
\r
6667 ATLASSERT(::IsWindow(m_hWnd));
\r
6668 return (BOOL)::SendMessage(m_hWnd, TBM_SETTIC, 0, nTic);
\r
6671 int GetTicPos(int nTic) const
\r
6673 ATLASSERT(::IsWindow(m_hWnd));
\r
6674 return (int)::SendMessage(m_hWnd, TBM_GETTICPOS, nTic, 0L);
\r
6677 void SetTicFreq(int nFreq)
\r
6679 ATLASSERT(::IsWindow(m_hWnd));
\r
6680 ::SendMessage(m_hWnd, TBM_SETTICFREQ, nFreq, 0L);
\r
6683 int GetThumbLength() const
\r
6685 ATLASSERT(::IsWindow(m_hWnd));
\r
6686 return (int)::SendMessage(m_hWnd, TBM_GETTHUMBLENGTH, 0, 0L);
\r
6689 void SetThumbLength(int nLength)
\r
6691 ATLASSERT(::IsWindow(m_hWnd));
\r
6692 ::SendMessage(m_hWnd, TBM_SETTHUMBLENGTH, nLength, 0L);
\r
6695 void SetSel(int nStart, int nEnd, BOOL bRedraw = TRUE)
\r
6697 ATLASSERT(::IsWindow(m_hWnd));
\r
6698 ATLASSERT((GetStyle() & TBS_ENABLESELRANGE) != 0);
\r
6699 ::SendMessage(m_hWnd, TBM_SETSEL, bRedraw, MAKELPARAM(nStart, nEnd));
\r
6702 ATL::CWindow GetBuddy(BOOL bLeft = TRUE) const
\r
6704 ATLASSERT(::IsWindow(m_hWnd));
\r
6705 return ATL::CWindow((HWND)::SendMessage(m_hWnd, TBM_GETBUDDY, bLeft, 0L));
\r
6708 ATL::CWindow SetBuddy(HWND hWndBuddy, BOOL bLeft = TRUE)
\r
6710 ATLASSERT(::IsWindow(m_hWnd));
\r
6711 return ATL::CWindow((HWND)::SendMessage(m_hWnd, TBM_SETBUDDY, bLeft, (LPARAM)hWndBuddy));
\r
6714 #ifndef _WIN32_WCE
\r
6715 CToolTipCtrl GetToolTips() const
\r
6717 ATLASSERT(::IsWindow(m_hWnd));
\r
6718 return CToolTipCtrl((HWND)::SendMessage(m_hWnd, TBM_GETTOOLTIPS, 0, 0L));
\r
6721 void SetToolTips(HWND hWndTT)
\r
6723 ATLASSERT(::IsWindow(m_hWnd));
\r
6724 ::SendMessage(m_hWnd, TBM_SETTOOLTIPS, (WPARAM)hWndTT, 0L);
\r
6727 int SetTipSide(int nSide)
\r
6729 ATLASSERT(::IsWindow(m_hWnd));
\r
6730 return (int)::SendMessage(m_hWnd, TBM_SETTIPSIDE, nSide, 0L);
\r
6732 #endif // !_WIN32_WCE
\r
6734 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
6735 BOOL GetUnicodeFormat() const
\r
6737 ATLASSERT(::IsWindow(m_hWnd));
\r
6738 return (BOOL)::SendMessage(m_hWnd, TBM_GETUNICODEFORMAT, 0, 0L);
\r
6741 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
\r
6743 ATLASSERT(::IsWindow(m_hWnd));
\r
6744 return (BOOL)::SendMessage(m_hWnd, TBM_SETUNICODEFORMAT, bUnicode, 0L);
\r
6746 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
6749 void ClearSel(BOOL bRedraw = FALSE)
\r
6751 ATLASSERT(::IsWindow(m_hWnd));
\r
6752 ::SendMessage(m_hWnd, TBM_CLEARSEL, bRedraw, 0L);
\r
6757 ATLASSERT(::IsWindow(m_hWnd));
\r
6758 ::SendMessage(m_hWnd, TBM_SETPOS, FALSE, 0L);
\r
6761 void ClearTics(BOOL bRedraw = FALSE)
\r
6763 ATLASSERT(::IsWindow(m_hWnd));
\r
6764 ::SendMessage(m_hWnd, TBM_CLEARTICS, bRedraw, 0L);
\r
6768 typedef CTrackBarCtrlT<ATL::CWindow> CTrackBarCtrl;
\r
6771 ///////////////////////////////////////////////////////////////////////////////
\r
6774 template <class TBase>
\r
6775 class CUpDownCtrlT : public TBase
\r
6779 CUpDownCtrlT(HWND hWnd = NULL) : TBase(hWnd)
\r
6782 CUpDownCtrlT< TBase >& operator =(HWND hWnd)
\r
6788 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
6789 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
6790 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
6792 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
6796 static LPCTSTR GetWndClassName()
\r
6798 return UPDOWN_CLASS;
\r
6801 UINT GetAccel(int nAccel, UDACCEL* pAccel) const
\r
6803 ATLASSERT(::IsWindow(m_hWnd));
\r
6804 return (UINT)LOWORD(::SendMessage(m_hWnd, UDM_GETACCEL, nAccel, (LPARAM)pAccel));
\r
6807 BOOL SetAccel(int nAccel, UDACCEL* pAccel)
\r
6809 ATLASSERT(::IsWindow(m_hWnd));
\r
6810 return (BOOL)LOWORD(::SendMessage(m_hWnd, UDM_SETACCEL, nAccel, (LPARAM)pAccel));
\r
6813 UINT GetBase() const
\r
6815 ATLASSERT(::IsWindow(m_hWnd));
\r
6816 return (UINT)LOWORD(::SendMessage(m_hWnd, UDM_GETBASE, 0, 0L));
\r
6819 int SetBase(int nBase)
\r
6821 ATLASSERT(::IsWindow(m_hWnd));
\r
6822 return (int)::SendMessage(m_hWnd, UDM_SETBASE, nBase, 0L);
\r
6825 ATL::CWindow GetBuddy() const
\r
6827 ATLASSERT(::IsWindow(m_hWnd));
\r
6828 return ATL::CWindow((HWND)::SendMessage(m_hWnd, UDM_GETBUDDY, 0, 0L));
\r
6831 ATL::CWindow SetBuddy(HWND hWndBuddy)
\r
6833 ATLASSERT(::IsWindow(m_hWnd));
\r
6834 return ATL::CWindow((HWND)::SendMessage(m_hWnd, UDM_SETBUDDY, (WPARAM)hWndBuddy, 0L));
\r
6837 int GetPos(LPBOOL lpbError = NULL) const
\r
6839 ATLASSERT(::IsWindow(m_hWnd));
\r
6840 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, UDM_GETPOS, 0, 0L);
\r
6841 // Note: Seems that Windows always sets error to TRUE if
\r
6842 // UDS_SETBUDDYINT style is not used
\r
6843 if(lpbError != NULL)
\r
6844 *lpbError = (HIWORD(dwRet) != 0) ? TRUE : FALSE;
\r
6845 return (int)(short)LOWORD(dwRet);
\r
6848 int SetPos(int nPos)
\r
6850 ATLASSERT(::IsWindow(m_hWnd));
\r
6851 return (int)(short)LOWORD(::SendMessage(m_hWnd, UDM_SETPOS, 0, MAKELPARAM(nPos, 0)));
\r
6854 DWORD GetRange() const
\r
6856 ATLASSERT(::IsWindow(m_hWnd));
\r
6857 return (DWORD)::SendMessage(m_hWnd, UDM_GETRANGE, 0, 0L);
\r
6860 void GetRange(int& nLower, int& nUpper) const
\r
6862 ATLASSERT(::IsWindow(m_hWnd));
\r
6863 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, UDM_GETRANGE, 0, 0L);
\r
6864 nLower = (int)(short)HIWORD(dwRet);
\r
6865 nUpper = (int)(short)LOWORD(dwRet);
\r
6868 void SetRange(int nLower, int nUpper)
\r
6870 ATLASSERT(::IsWindow(m_hWnd));
\r
6871 ::SendMessage(m_hWnd, UDM_SETRANGE, 0, MAKELPARAM(nUpper, nLower));
\r
6874 #if (_WIN32_IE >= 0x0400)
\r
6875 void SetRange32(int nLower, int nUpper)
\r
6877 ATLASSERT(::IsWindow(m_hWnd));
\r
6878 ::SendMessage(m_hWnd, UDM_SETRANGE32, nLower, nUpper);
\r
6881 void GetRange32(int& nLower, int& nUpper) const
\r
6883 ATLASSERT(::IsWindow(m_hWnd));
\r
6884 ::SendMessage(m_hWnd, UDM_GETRANGE32, (WPARAM)&nLower, (LPARAM)&nUpper);
\r
6887 #ifndef _WIN32_WCE
\r
6888 BOOL GetUnicodeFormat() const
\r
6890 ATLASSERT(::IsWindow(m_hWnd));
\r
6891 return (BOOL)::SendMessage(m_hWnd, UDM_GETUNICODEFORMAT, 0, 0L);
\r
6894 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
\r
6896 ATLASSERT(::IsWindow(m_hWnd));
\r
6897 return (BOOL)::SendMessage(m_hWnd, UDM_SETUNICODEFORMAT, bUnicode, 0L);
\r
6899 #endif // !_WIN32_WCE
\r
6900 #endif // (_WIN32_IE >= 0x0400)
\r
6902 #if (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)
\r
6903 int GetPos32(LPBOOL lpbError = NULL) const
\r
6905 ATLASSERT(::IsWindow(m_hWnd));
\r
6906 // Note: Seems that Windows always sets error to TRUE if
\r
6907 // UDS_SETBUDDYINT style is not used
\r
6908 return (int)::SendMessage(m_hWnd, UDM_GETPOS32, 0, (LPARAM)lpbError);
\r
6911 int SetPos32(int nPos)
\r
6913 ATLASSERT(::IsWindow(m_hWnd));
\r
6914 return (int)::SendMessage(m_hWnd, UDM_SETPOS32, 0, (LPARAM)nPos);
\r
6916 #endif // (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)
\r
6919 typedef CUpDownCtrlT<ATL::CWindow> CUpDownCtrl;
\r
6922 ///////////////////////////////////////////////////////////////////////////////
\r
6923 // CProgressBarCtrl
\r
6925 template <class TBase>
\r
6926 class CProgressBarCtrlT : public TBase
\r
6930 CProgressBarCtrlT(HWND hWnd = NULL) : TBase(hWnd)
\r
6933 CProgressBarCtrlT< TBase >& operator =(HWND hWnd)
\r
6939 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
6940 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
6941 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
6943 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
6947 static LPCTSTR GetWndClassName()
\r
6949 return PROGRESS_CLASS;
\r
6952 DWORD SetRange(int nLower, int nUpper)
\r
6954 ATLASSERT(::IsWindow(m_hWnd));
\r
6955 return (DWORD)::SendMessage(m_hWnd, PBM_SETRANGE, 0, MAKELPARAM(nLower, nUpper));
\r
6958 int SetPos(int nPos)
\r
6960 ATLASSERT(::IsWindow(m_hWnd));
\r
6961 return (int)(short)LOWORD(::SendMessage(m_hWnd, PBM_SETPOS, nPos, 0L));
\r
6964 int OffsetPos(int nPos)
\r
6966 ATLASSERT(::IsWindow(m_hWnd));
\r
6967 return (int)(short)LOWORD(::SendMessage(m_hWnd, PBM_DELTAPOS, nPos, 0L));
\r
6970 int SetStep(int nStep)
\r
6972 ATLASSERT(::IsWindow(m_hWnd));
\r
6973 return (int)(short)LOWORD(::SendMessage(m_hWnd, PBM_SETSTEP, nStep, 0L));
\r
6976 UINT GetPos() const
\r
6978 ATLASSERT(::IsWindow(m_hWnd));
\r
6979 return (UINT)::SendMessage(m_hWnd, PBM_GETPOS, 0, 0L);
\r
6982 void GetRange(PPBRANGE pPBRange) const
\r
6984 ATLASSERT(::IsWindow(m_hWnd));
\r
6985 ATLASSERT(pPBRange != NULL);
\r
6986 ::SendMessage(m_hWnd, PBM_GETRANGE, TRUE, (LPARAM)pPBRange);
\r
6989 void GetRange(int& nLower, int& nUpper) const
\r
6991 ATLASSERT(::IsWindow(m_hWnd));
\r
6992 PBRANGE range = { 0 };
\r
6993 ::SendMessage(m_hWnd, PBM_GETRANGE, TRUE, (LPARAM)&range);
\r
6994 nLower = range.iLow;
\r
6995 nUpper = range.iHigh;
\r
6998 int GetRangeLimit(BOOL bLowLimit) const
\r
7000 ATLASSERT(::IsWindow(m_hWnd));
\r
7001 return (int)::SendMessage(m_hWnd, PBM_GETRANGE, bLowLimit, (LPARAM)NULL);
\r
7004 DWORD SetRange32(int nMin, int nMax)
\r
7006 ATLASSERT(::IsWindow(m_hWnd));
\r
7007 return (DWORD)::SendMessage(m_hWnd, PBM_SETRANGE32, nMin, nMax);
\r
7010 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
7011 COLORREF SetBarColor(COLORREF clr)
\r
7013 ATLASSERT(::IsWindow(m_hWnd));
\r
7014 return (COLORREF)::SendMessage(m_hWnd, PBM_SETBARCOLOR, 0, (LPARAM)clr);
\r
7017 COLORREF SetBkColor(COLORREF clr)
\r
7019 ATLASSERT(::IsWindow(m_hWnd));
\r
7020 return (COLORREF)::SendMessage(m_hWnd, PBM_SETBKCOLOR, 0, (LPARAM)clr);
\r
7022 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
7024 #if (_WIN32_WINNT >= 0x0501) && defined(PBM_SETMARQUEE)
\r
7025 BOOL SetMarquee(BOOL bMarquee, UINT uUpdateTime = 0U)
\r
7027 ATLASSERT(::IsWindow(m_hWnd));
\r
7028 return (BOOL)::SendMessage(m_hWnd, PBM_SETMARQUEE, (WPARAM)bMarquee, (LPARAM)uUpdateTime);
\r
7030 #endif // (_WIN32_WINNT >= 0x0501) && defined(PBM_SETMARQUEE)
\r
7032 #if (_WIN32_WINNT >= 0x0600)
\r
7033 int GetStep() const
\r
7035 ATLASSERT(::IsWindow(m_hWnd));
\r
7036 return (int)::SendMessage(m_hWnd, PBM_GETSTEP, 0, 0L);
\r
7039 COLORREF GetBkColor() const
\r
7041 ATLASSERT(::IsWindow(m_hWnd));
\r
7042 return (COLORREF)::SendMessage(m_hWnd, PBM_GETBKCOLOR, 0, 0L);
\r
7045 COLORREF GetBarColor() const
\r
7047 ATLASSERT(::IsWindow(m_hWnd));
\r
7048 return (COLORREF)::SendMessage(m_hWnd, PBM_GETBARCOLOR, 0, 0L);
\r
7051 int GetState() const
\r
7053 ATLASSERT(::IsWindow(m_hWnd));
\r
7054 return (int)::SendMessage(m_hWnd, PBM_GETSTATE, 0, 0L);
\r
7057 int SetState(int nState)
\r
7059 ATLASSERT(::IsWindow(m_hWnd));
\r
7060 return (int)::SendMessage(m_hWnd, PBM_SETSTATE, nState, 0L);
\r
7062 #endif // (_WIN32_WINNT >= 0x0600)
\r
7067 ATLASSERT(::IsWindow(m_hWnd));
\r
7068 return (int)(short)LOWORD(::SendMessage(m_hWnd, PBM_STEPIT, 0, 0L));
\r
7072 typedef CProgressBarCtrlT<ATL::CWindow> CProgressBarCtrl;
\r
7075 ///////////////////////////////////////////////////////////////////////////////
\r
7078 #ifndef _WIN32_WCE
\r
7080 template <class TBase>
\r
7081 class CHotKeyCtrlT : public TBase
\r
7085 CHotKeyCtrlT(HWND hWnd = NULL) : TBase(hWnd)
\r
7088 CHotKeyCtrlT< TBase >& operator =(HWND hWnd)
\r
7094 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
7095 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
7096 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
7098 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
7102 static LPCTSTR GetWndClassName()
\r
7104 return HOTKEY_CLASS;
\r
7107 DWORD GetHotKey() const
\r
7109 ATLASSERT(::IsWindow(m_hWnd));
\r
7110 return (DWORD)::SendMessage(m_hWnd, HKM_GETHOTKEY, 0, 0L);
\r
7113 void GetHotKey(WORD &wVirtualKeyCode, WORD &wModifiers) const
\r
7115 ATLASSERT(::IsWindow(m_hWnd));
\r
7116 DWORD dw = (DWORD)::SendMessage(m_hWnd, HKM_GETHOTKEY, 0, 0L);
\r
7117 wVirtualKeyCode = LOBYTE(LOWORD(dw));
\r
7118 wModifiers = HIBYTE(LOWORD(dw));
\r
7121 void SetHotKey(WORD wVirtualKeyCode, WORD wModifiers)
\r
7123 ATLASSERT(::IsWindow(m_hWnd));
\r
7124 ::SendMessage(m_hWnd, HKM_SETHOTKEY, MAKEWORD(wVirtualKeyCode, wModifiers), 0L);
\r
7127 void SetRules(WORD wInvalidComb, WORD wModifiers)
\r
7129 ATLASSERT(::IsWindow(m_hWnd));
\r
7130 ::SendMessage(m_hWnd, HKM_SETRULES, wInvalidComb, MAKELPARAM(wModifiers, 0));
\r
7134 typedef CHotKeyCtrlT<ATL::CWindow> CHotKeyCtrl;
\r
7136 #endif // !_WIN32_WCE
\r
7139 ///////////////////////////////////////////////////////////////////////////////
\r
7142 #ifndef _WIN32_WCE
\r
7144 template <class TBase>
\r
7145 class CAnimateCtrlT : public TBase
\r
7149 CAnimateCtrlT(HWND hWnd = NULL) : TBase(hWnd)
\r
7152 CAnimateCtrlT< TBase >& operator =(HWND hWnd)
\r
7158 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
7159 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
7160 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
7162 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
7166 static LPCTSTR GetWndClassName()
\r
7168 return ANIMATE_CLASS;
\r
7172 BOOL Open(ATL::_U_STRINGorID FileName)
\r
7174 ATLASSERT(::IsWindow(m_hWnd));
\r
7175 return (BOOL)::SendMessage(m_hWnd, ACM_OPEN, 0, (LPARAM)FileName.m_lpstr);
\r
7178 BOOL Play(UINT nFrom, UINT nTo, UINT nRep)
\r
7180 ATLASSERT(::IsWindow(m_hWnd));
\r
7181 return (BOOL)::SendMessage(m_hWnd, ACM_PLAY, nRep, MAKELPARAM(nFrom, nTo));
\r
7186 ATLASSERT(::IsWindow(m_hWnd));
\r
7187 return (BOOL)::SendMessage(m_hWnd, ACM_STOP, 0, 0L);
\r
7192 ATLASSERT(::IsWindow(m_hWnd));
\r
7193 return (BOOL)::SendMessage(m_hWnd, ACM_OPEN, 0, 0L);
\r
7196 BOOL Seek(UINT nTo)
\r
7198 ATLASSERT(::IsWindow(m_hWnd));
\r
7199 return (BOOL)::SendMessage(m_hWnd, ACM_PLAY, 0, MAKELPARAM(nTo, nTo));
\r
7203 BOOL IsPlaying() const
\r
7205 #ifndef ACM_ISPLAYING
\r
7206 const UINT ACM_ISPLAYING = (WM_USER+104);
\r
7208 ATLASSERT(::IsWindow(m_hWnd));
\r
7209 return (BOOL)::SendMessage(m_hWnd, ACM_ISPLAYING, 0, 0L);
\r
7213 typedef CAnimateCtrlT<ATL::CWindow> CAnimateCtrl;
\r
7215 #endif // !_WIN32_WCE
\r
7218 ///////////////////////////////////////////////////////////////////////////////
\r
7221 #ifndef _WIN32_WCE
\r
7224 #if (_RICHEDIT_VER == 0x0100)
\r
7225 #undef RICHEDIT_CLASS
\r
7226 #define RICHEDIT_CLASS L"RICHEDIT"
\r
7227 #endif // (_RICHEDIT_VER == 0x0100)
\r
7228 #endif // _UNICODE
\r
7230 template <class TBase>
\r
7231 class CRichEditCtrlT : public TBase
\r
7235 CRichEditCtrlT(HWND hWnd = NULL) : TBase(hWnd)
\r
7238 CRichEditCtrlT< TBase >& operator =(HWND hWnd)
\r
7244 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
7245 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
7246 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
7248 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
7252 static LPCTSTR GetWndClassName()
\r
7254 return RICHEDIT_CLASS;
\r
7257 static LPCTSTR GetLibraryName()
\r
7259 #if (_RICHEDIT_VER >= 0x0200)
\r
7260 return _T("RICHED20.DLL");
\r
7262 return _T("RICHED32.DLL");
\r
7266 int GetLineCount() const
\r
7268 ATLASSERT(::IsWindow(m_hWnd));
\r
7269 return (int)::SendMessage(m_hWnd, EM_GETLINECOUNT, 0, 0L);
\r
7272 BOOL GetModify() const
\r
7274 ATLASSERT(::IsWindow(m_hWnd));
\r
7275 return (BOOL)::SendMessage(m_hWnd, EM_GETMODIFY, 0, 0L);
\r
7278 void SetModify(BOOL bModified = TRUE)
\r
7280 ATLASSERT(::IsWindow(m_hWnd));
\r
7281 ::SendMessage(m_hWnd, EM_SETMODIFY, bModified, 0L);
\r
7284 void GetRect(LPRECT lpRect) const
\r
7286 ATLASSERT(::IsWindow(m_hWnd));
\r
7287 ::SendMessage(m_hWnd, EM_GETRECT, 0, (LPARAM)lpRect);
\r
7290 DWORD GetOptions() const
\r
7292 ATLASSERT(::IsWindow(m_hWnd));
\r
7293 return (DWORD)::SendMessage(m_hWnd, EM_GETOPTIONS, 0, 0L);
\r
7296 DWORD SetOptions(WORD wOperation, DWORD dwOptions)
\r
7298 ATLASSERT(::IsWindow(m_hWnd));
\r
7299 return (DWORD)::SendMessage(m_hWnd, EM_SETOPTIONS, wOperation, dwOptions);
\r
7302 // NOTE: first word in lpszBuffer must contain the size of the buffer!
\r
7303 int GetLine(int nIndex, LPTSTR lpszBuffer) const
\r
7305 ATLASSERT(::IsWindow(m_hWnd));
\r
7306 return (int)::SendMessage(m_hWnd, EM_GETLINE, nIndex, (LPARAM)lpszBuffer);
\r
7309 int GetLine(int nIndex, LPTSTR lpszBuffer, int nMaxLength) const
\r
7311 ATLASSERT(::IsWindow(m_hWnd));
\r
7312 *(LPWORD)lpszBuffer = (WORD)nMaxLength;
\r
7313 return (int)::SendMessage(m_hWnd, EM_GETLINE, nIndex, (LPARAM)lpszBuffer);
\r
7316 BOOL CanUndo() const
\r
7318 ATLASSERT(::IsWindow(m_hWnd));
\r
7319 return (BOOL)::SendMessage(m_hWnd, EM_CANUNDO, 0, 0L);
\r
7322 BOOL CanPaste(UINT nFormat = 0) const
\r
7324 ATLASSERT(::IsWindow(m_hWnd));
\r
7325 return (BOOL)::SendMessage(m_hWnd, EM_CANPASTE, nFormat, 0L);
\r
7328 void GetSel(LONG& nStartChar, LONG& nEndChar) const
\r
7330 ATLASSERT(::IsWindow(m_hWnd));
\r
7331 CHARRANGE cr = { 0, 0 };
\r
7332 ::SendMessage(m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr);
\r
7333 nStartChar = cr.cpMin;
\r
7334 nEndChar = cr.cpMax;
\r
7337 void GetSel(CHARRANGE &cr) const
\r
7339 ATLASSERT(::IsWindow(m_hWnd));
\r
7340 ::SendMessage(m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr);
\r
7343 int SetSel(LONG nStartChar, LONG nEndChar)
\r
7345 ATLASSERT(::IsWindow(m_hWnd));
\r
7346 CHARRANGE cr = { nStartChar, nEndChar };
\r
7347 return (int)::SendMessage(m_hWnd, EM_EXSETSEL, 0, (LPARAM)&cr);
\r
7350 int SetSel(CHARRANGE &cr)
\r
7352 ATLASSERT(::IsWindow(m_hWnd));
\r
7353 return (int)::SendMessage(m_hWnd, EM_EXSETSEL, 0, (LPARAM)&cr);
\r
7358 return SetSel(0, -1);
\r
7363 return SetSel(-1, 0);
\r
7366 DWORD GetDefaultCharFormat(CHARFORMAT& cf) const
\r
7368 ATLASSERT(::IsWindow(m_hWnd));
\r
7369 cf.cbSize = sizeof(CHARFORMAT);
\r
7370 return (DWORD)::SendMessage(m_hWnd, EM_GETCHARFORMAT, 0, (LPARAM)&cf);
\r
7373 DWORD GetSelectionCharFormat(CHARFORMAT& cf) const
\r
7375 ATLASSERT(::IsWindow(m_hWnd));
\r
7376 cf.cbSize = sizeof(CHARFORMAT);
\r
7377 return (DWORD)::SendMessage(m_hWnd, EM_GETCHARFORMAT, 1, (LPARAM)&cf);
\r
7380 DWORD GetEventMask() const
\r
7382 ATLASSERT(::IsWindow(m_hWnd));
\r
7383 return (DWORD)::SendMessage(m_hWnd, EM_GETEVENTMASK, 0, 0L);
\r
7386 LONG GetLimitText() const
\r
7388 ATLASSERT(::IsWindow(m_hWnd));
\r
7389 return (LONG)::SendMessage(m_hWnd, EM_GETLIMITTEXT, 0, 0L);
\r
7392 DWORD GetParaFormat(PARAFORMAT& pf) const
\r
7394 ATLASSERT(::IsWindow(m_hWnd));
\r
7395 pf.cbSize = sizeof(PARAFORMAT);
\r
7396 return (DWORD)::SendMessage(m_hWnd, EM_GETPARAFORMAT, 0, (LPARAM)&pf);
\r
7399 #if (_RICHEDIT_VER >= 0x0200)
\r
7400 LONG GetSelText(LPTSTR lpstrBuff) const
\r
7402 ATLASSERT(::IsWindow(m_hWnd));
\r
7403 return (LONG)::SendMessage(m_hWnd, EM_GETSELTEXT, 0, (LPARAM)lpstrBuff);
\r
7405 #else // !(_RICHEDIT_VER >= 0x0200)
\r
7406 // RichEdit 1.0 EM_GETSELTEXT is ANSI only
\r
7407 LONG GetSelText(LPSTR lpstrBuff) const
\r
7409 ATLASSERT(::IsWindow(m_hWnd));
\r
7410 return (LONG)::SendMessage(m_hWnd, EM_GETSELTEXT, 0, (LPARAM)lpstrBuff);
\r
7412 #endif // !(_RICHEDIT_VER >= 0x0200)
\r
7414 #ifndef _ATL_NO_COM
\r
7415 BOOL GetSelTextBSTR(BSTR& bstrText) const
\r
7418 ATLASSERT(::IsWindow(m_hWnd));
\r
7419 ATLASSERT(bstrText == NULL);
\r
7421 CHARRANGE cr = { 0, 0 };
\r
7422 ::SendMessage(m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr);
\r
7424 #if (_RICHEDIT_VER >= 0x0200)
\r
7425 CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff;
\r
7426 LPTSTR lpstrText = buff.Allocate(cr.cpMax - cr.cpMin + 1);
\r
7427 if(lpstrText == NULL)
\r
7429 if(::SendMessage(m_hWnd, EM_GETSELTEXT, 0, (LPARAM)lpstrText) == 0)
\r
7432 bstrText = ::SysAllocString(T2W(lpstrText));
\r
7433 #else // !(_RICHEDIT_VER >= 0x0200)
\r
7434 CTempBuffer<char, _WTL_STACK_ALLOC_THRESHOLD> buff;
\r
7435 LPSTR lpstrText = buff.Allocate(cr.cpMax - cr.cpMin + 1);
\r
7436 if(lpstrText == NULL)
\r
7438 if(::SendMessage(m_hWnd, EM_GETSELTEXT, 0, (LPARAM)lpstrText) == 0)
\r
7441 bstrText = ::SysAllocString(A2W(lpstrText));
\r
7442 #endif // !(_RICHEDIT_VER >= 0x0200)
\r
7444 return (bstrText != NULL) ? TRUE : FALSE;
\r
7446 #endif // !_ATL_NO_COM
\r
7448 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
\r
7449 LONG GetSelText(_CSTRING_NS::CString& strText) const
\r
7451 ATLASSERT(::IsWindow(m_hWnd));
\r
7453 CHARRANGE cr = { 0, 0 };
\r
7454 ::SendMessage(m_hWnd, EM_EXGETSEL, 0, (LPARAM)&cr);
\r
7456 #if (_RICHEDIT_VER >= 0x0200)
\r
7458 LPTSTR lpstrText = strText.GetBufferSetLength(cr.cpMax - cr.cpMin);
\r
7459 if(lpstrText != NULL)
\r
7461 lLen = (LONG)::SendMessage(m_hWnd, EM_GETSELTEXT, 0, (LPARAM)lpstrText);
\r
7462 strText.ReleaseBuffer();
\r
7464 #else // !(_RICHEDIT_VER >= 0x0200)
\r
7465 CTempBuffer<char, _WTL_STACK_ALLOC_THRESHOLD> buff;
\r
7466 LPSTR lpstrText = buff.Allocate(cr.cpMax - cr.cpMin + 1);
\r
7467 if(lpstrText == NULL)
\r
7469 LONG lLen = (LONG)::SendMessage(m_hWnd, EM_GETSELTEXT, 0, (LPARAM)lpstrText);
\r
7474 strText = A2T(lpstrText);
\r
7475 #endif // !(_RICHEDIT_VER >= 0x0200)
\r
7479 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
\r
7481 WORD GetSelectionType() const
\r
7483 ATLASSERT(::IsWindow(m_hWnd));
\r
7484 return (WORD)::SendMessage(m_hWnd, EM_SELECTIONTYPE, 0, 0L);
\r
7487 COLORREF SetBackgroundColor(COLORREF cr)
\r
7489 ATLASSERT(::IsWindow(m_hWnd));
\r
7490 return (COLORREF)::SendMessage(m_hWnd, EM_SETBKGNDCOLOR, 0, cr);
\r
7493 COLORREF SetBackgroundColor() // sets to system background
\r
7495 ATLASSERT(::IsWindow(m_hWnd));
\r
7496 return (COLORREF)::SendMessage(m_hWnd, EM_SETBKGNDCOLOR, 1, 0);
\r
7499 BOOL SetCharFormat(CHARFORMAT& cf, WORD wFlags)
\r
7501 ATLASSERT(::IsWindow(m_hWnd));
\r
7502 cf.cbSize = sizeof(CHARFORMAT);
\r
7503 return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, (WPARAM)wFlags, (LPARAM)&cf);
\r
7506 BOOL SetDefaultCharFormat(CHARFORMAT& cf)
\r
7508 ATLASSERT(::IsWindow(m_hWnd));
\r
7509 cf.cbSize = sizeof(CHARFORMAT);
\r
7510 return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, 0, (LPARAM)&cf);
\r
7513 BOOL SetSelectionCharFormat(CHARFORMAT& cf)
\r
7515 ATLASSERT(::IsWindow(m_hWnd));
\r
7516 cf.cbSize = sizeof(CHARFORMAT);
\r
7517 return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
\r
7520 BOOL SetWordCharFormat(CHARFORMAT& cf)
\r
7522 ATLASSERT(::IsWindow(m_hWnd));
\r
7523 cf.cbSize = sizeof(CHARFORMAT);
\r
7524 return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, SCF_SELECTION | SCF_WORD, (LPARAM)&cf);
\r
7527 DWORD SetEventMask(DWORD dwEventMask)
\r
7529 ATLASSERT(::IsWindow(m_hWnd));
\r
7530 return (DWORD)::SendMessage(m_hWnd, EM_SETEVENTMASK, 0, dwEventMask);
\r
7533 BOOL SetParaFormat(PARAFORMAT& pf)
\r
7535 ATLASSERT(::IsWindow(m_hWnd));
\r
7536 pf.cbSize = sizeof(PARAFORMAT);
\r
7537 return (BOOL)::SendMessage(m_hWnd, EM_SETPARAFORMAT, 0, (LPARAM)&pf);
\r
7540 BOOL SetTargetDevice(HDC hDC, int cxLineWidth)
\r
7542 ATLASSERT(::IsWindow(m_hWnd));
\r
7543 return (BOOL)::SendMessage(m_hWnd, EM_SETTARGETDEVICE, (WPARAM)hDC, cxLineWidth);
\r
7546 int GetTextLength() const
\r
7548 ATLASSERT(::IsWindow(m_hWnd));
\r
7549 return (int)::SendMessage(m_hWnd, WM_GETTEXTLENGTH, 0, 0L);
\r
7552 BOOL SetReadOnly(BOOL bReadOnly = TRUE)
\r
7554 ATLASSERT(::IsWindow(m_hWnd));
\r
7555 return (BOOL)::SendMessage(m_hWnd, EM_SETREADONLY, bReadOnly, 0L);
\r
7558 int GetFirstVisibleLine() const
\r
7560 ATLASSERT(::IsWindow(m_hWnd));
\r
7561 return (int)::SendMessage(m_hWnd, EM_GETFIRSTVISIBLELINE, 0, 0L);
\r
7564 EDITWORDBREAKPROCEX GetWordBreakProcEx() const
\r
7566 ATLASSERT(::IsWindow(m_hWnd));
\r
7567 return (EDITWORDBREAKPROCEX)::SendMessage(m_hWnd, EM_GETWORDBREAKPROCEX, 0, 0L);
\r
7570 EDITWORDBREAKPROCEX SetWordBreakProcEx(EDITWORDBREAKPROCEX pfnEditWordBreakProcEx)
\r
7572 ATLASSERT(::IsWindow(m_hWnd));
\r
7573 return (EDITWORDBREAKPROCEX)::SendMessage(m_hWnd, EM_SETWORDBREAKPROCEX, 0, (LPARAM)pfnEditWordBreakProcEx);
\r
7576 int GetTextRange(TEXTRANGE* pTextRange) const
\r
7578 ATLASSERT(::IsWindow(m_hWnd));
\r
7579 return (int)::SendMessage(m_hWnd, EM_GETTEXTRANGE, 0, (LPARAM)pTextRange);
\r
7582 #if (_RICHEDIT_VER >= 0x0200)
\r
7583 int GetTextRange(LONG nStartChar, LONG nEndChar, LPTSTR lpstrText) const
\r
7585 ATLASSERT(::IsWindow(m_hWnd));
\r
7586 TEXTRANGE tr = { 0 };
\r
7587 tr.chrg.cpMin = nStartChar;
\r
7588 tr.chrg.cpMax = nEndChar;
\r
7589 tr.lpstrText = lpstrText;
\r
7590 return (int)::SendMessage(m_hWnd, EM_GETTEXTRANGE, 0, (LPARAM)&tr);
\r
7592 #else // !(_RICHEDIT_VER >= 0x0200)
\r
7594 int GetTextRange(LONG nStartChar, LONG nEndChar, LPSTR lpstrText) const
\r
7596 ATLASSERT(::IsWindow(m_hWnd));
\r
7597 TEXTRANGE tr = { 0 };
\r
7598 tr.chrg.cpMin = nStartChar;
\r
7599 tr.chrg.cpMax = nEndChar;
\r
7600 tr.lpstrText = lpstrText;
\r
7601 return (int)::SendMessage(m_hWnd, EM_GETTEXTRANGE, 0, (LPARAM)&tr);
\r
7603 #endif // !(_RICHEDIT_VER >= 0x0200)
\r
7605 #if (_RICHEDIT_VER >= 0x0200)
\r
7606 DWORD GetDefaultCharFormat(CHARFORMAT2& cf) const
\r
7608 ATLASSERT(::IsWindow(m_hWnd));
\r
7609 cf.cbSize = sizeof(CHARFORMAT2);
\r
7610 return (DWORD)::SendMessage(m_hWnd, EM_GETCHARFORMAT, 0, (LPARAM)&cf);
\r
7613 BOOL SetCharFormat(CHARFORMAT2& cf, WORD wFlags)
\r
7615 ATLASSERT(::IsWindow(m_hWnd));
\r
7616 cf.cbSize = sizeof(CHARFORMAT2);
\r
7617 return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, (WPARAM)wFlags, (LPARAM)&cf);
\r
7620 BOOL SetDefaultCharFormat(CHARFORMAT2& cf)
\r
7622 ATLASSERT(::IsWindow(m_hWnd));
\r
7623 cf.cbSize = sizeof(CHARFORMAT2);
\r
7624 return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, 0, (LPARAM)&cf);
\r
7627 DWORD GetSelectionCharFormat(CHARFORMAT2& cf) const
\r
7629 ATLASSERT(::IsWindow(m_hWnd));
\r
7630 cf.cbSize = sizeof(CHARFORMAT2);
\r
7631 return (DWORD)::SendMessage(m_hWnd, EM_GETCHARFORMAT, 1, (LPARAM)&cf);
\r
7634 BOOL SetSelectionCharFormat(CHARFORMAT2& cf)
\r
7636 ATLASSERT(::IsWindow(m_hWnd));
\r
7637 cf.cbSize = sizeof(CHARFORMAT2);
\r
7638 return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
\r
7641 BOOL SetWordCharFormat(CHARFORMAT2& cf)
\r
7643 ATLASSERT(::IsWindow(m_hWnd));
\r
7644 cf.cbSize = sizeof(CHARFORMAT2);
\r
7645 return (BOOL)::SendMessage(m_hWnd, EM_SETCHARFORMAT, SCF_SELECTION | SCF_WORD, (LPARAM)&cf);
\r
7648 DWORD GetParaFormat(PARAFORMAT2& pf) const
\r
7650 ATLASSERT(::IsWindow(m_hWnd));
\r
7651 pf.cbSize = sizeof(PARAFORMAT2);
\r
7652 return (DWORD)::SendMessage(m_hWnd, EM_GETPARAFORMAT, 0, (LPARAM)&pf);
\r
7655 BOOL SetParaFormat(PARAFORMAT2& pf)
\r
7657 ATLASSERT(::IsWindow(m_hWnd));
\r
7658 pf.cbSize = sizeof(PARAFORMAT2);
\r
7659 return (BOOL)::SendMessage(m_hWnd, EM_SETPARAFORMAT, 0, (LPARAM)&pf);
\r
7662 TEXTMODE GetTextMode() const
\r
7664 ATLASSERT(::IsWindow(m_hWnd));
\r
7665 return (TEXTMODE)::SendMessage(m_hWnd, EM_GETTEXTMODE, 0, 0L);
\r
7668 BOOL SetTextMode(TEXTMODE enumTextMode)
\r
7670 ATLASSERT(::IsWindow(m_hWnd));
\r
7671 return !(BOOL)::SendMessage(m_hWnd, EM_SETTEXTMODE, enumTextMode, 0L);
\r
7674 UNDONAMEID GetUndoName() const
\r
7676 ATLASSERT(::IsWindow(m_hWnd));
\r
7677 return (UNDONAMEID)::SendMessage(m_hWnd, EM_GETUNDONAME, 0, 0L);
\r
7680 UNDONAMEID GetRedoName() const
\r
7682 ATLASSERT(::IsWindow(m_hWnd));
\r
7683 return (UNDONAMEID)::SendMessage(m_hWnd, EM_GETREDONAME, 0, 0L);
\r
7686 BOOL CanRedo() const
\r
7688 ATLASSERT(::IsWindow(m_hWnd));
\r
7689 return (BOOL)::SendMessage(m_hWnd, EM_CANREDO, 0, 0L);
\r
7692 BOOL GetAutoURLDetect() const
\r
7694 ATLASSERT(::IsWindow(m_hWnd));
\r
7695 return (BOOL)::SendMessage(m_hWnd, EM_GETAUTOURLDETECT, 0, 0L);
\r
7698 BOOL SetAutoURLDetect(BOOL bAutoDetect = TRUE)
\r
7700 ATLASSERT(::IsWindow(m_hWnd));
\r
7701 return !(BOOL)::SendMessage(m_hWnd, EM_AUTOURLDETECT, bAutoDetect, 0L);
\r
7704 // this method is deprecated, please use SetAutoURLDetect
\r
7705 BOOL EnableAutoURLDetect(BOOL bEnable = TRUE) { return SetAutoURLDetect(bEnable); }
\r
7707 UINT SetUndoLimit(UINT uUndoLimit)
\r
7709 ATLASSERT(::IsWindow(m_hWnd));
\r
7710 return (UINT)::SendMessage(m_hWnd, EM_SETUNDOLIMIT, uUndoLimit, 0L);
\r
7713 void SetPalette(HPALETTE hPalette)
\r
7715 ATLASSERT(::IsWindow(m_hWnd));
\r
7716 ::SendMessage(m_hWnd, EM_SETPALETTE, (WPARAM)hPalette, 0L);
\r
7719 int GetTextEx(GETTEXTEX* pGetTextEx, LPTSTR lpstrText) const
\r
7721 ATLASSERT(::IsWindow(m_hWnd));
\r
7722 return (int)::SendMessage(m_hWnd, EM_GETTEXTEX, (WPARAM)pGetTextEx, (LPARAM)lpstrText);
\r
7725 int GetTextEx(LPTSTR lpstrText, int nTextLen, DWORD dwFlags = GT_DEFAULT, UINT uCodePage = CP_ACP, LPCSTR lpDefaultChar = NULL, LPBOOL lpUsedDefChar = NULL) const
\r
7727 ATLASSERT(::IsWindow(m_hWnd));
\r
7728 GETTEXTEX gte = { 0 };
\r
7729 gte.cb = nTextLen * sizeof(TCHAR);
\r
7730 gte.codepage = uCodePage;
\r
7731 gte.flags = dwFlags;
\r
7732 gte.lpDefaultChar = lpDefaultChar;
\r
7733 gte.lpUsedDefChar = lpUsedDefChar;
\r
7734 return (int)::SendMessage(m_hWnd, EM_GETTEXTEX, (WPARAM)>e, (LPARAM)lpstrText);
\r
7737 int GetTextLengthEx(GETTEXTLENGTHEX* pGetTextLengthEx) const
\r
7739 ATLASSERT(::IsWindow(m_hWnd));
\r
7740 return (int)::SendMessage(m_hWnd, EM_GETTEXTLENGTHEX, (WPARAM)pGetTextLengthEx, 0L);
\r
7743 int GetTextLengthEx(DWORD dwFlags = GTL_DEFAULT, UINT uCodePage = CP_ACP) const
\r
7745 ATLASSERT(::IsWindow(m_hWnd));
\r
7746 GETTEXTLENGTHEX gtle = { 0 };
\r
7747 gtle.codepage = uCodePage;
\r
7748 gtle.flags = dwFlags;
\r
7749 return (int)::SendMessage(m_hWnd, EM_GETTEXTLENGTHEX, (WPARAM)>le, 0L);
\r
7751 #endif // (_RICHEDIT_VER >= 0x0200)
\r
7753 #if (_RICHEDIT_VER >= 0x0300)
\r
7754 int SetTextEx(SETTEXTEX* pSetTextEx, LPCTSTR lpstrText)
\r
7756 ATLASSERT(::IsWindow(m_hWnd));
\r
7757 return (int)::SendMessage(m_hWnd, EM_SETTEXTEX, (WPARAM)pSetTextEx, (LPARAM)lpstrText);
\r
7760 int SetTextEx(LPCTSTR lpstrText, DWORD dwFlags = ST_DEFAULT, UINT uCodePage = CP_ACP)
\r
7762 ATLASSERT(::IsWindow(m_hWnd));
\r
7763 SETTEXTEX ste = { 0 };
\r
7764 ste.flags = dwFlags;
\r
7765 ste.codepage = uCodePage;
\r
7766 return (int)::SendMessage(m_hWnd, EM_SETTEXTEX, (WPARAM)&ste, (LPARAM)lpstrText);
\r
7769 int GetEditStyle() const
\r
7771 ATLASSERT(::IsWindow(m_hWnd));
\r
7772 return (int)::SendMessage(m_hWnd, EM_GETEDITSTYLE, 0, 0L);
\r
7775 int SetEditStyle(int nStyle, int nMask = -1)
\r
7777 ATLASSERT(::IsWindow(m_hWnd));
\r
7779 nMask = nStyle; // set everything specified
\r
7780 return (int)::SendMessage(m_hWnd, EM_SETEDITSTYLE, nStyle, nMask);
\r
7783 BOOL SetFontSize(int nFontSizeDelta)
\r
7785 ATLASSERT(::IsWindow(m_hWnd));
\r
7786 ATLASSERT(nFontSizeDelta >= -1637 && nFontSizeDelta <= 1638);
\r
7787 return (BOOL)::SendMessage(m_hWnd, EM_SETFONTSIZE, nFontSizeDelta, 0L);
\r
7790 void GetScrollPos(LPPOINT lpPoint) const
\r
7792 ATLASSERT(::IsWindow(m_hWnd));
\r
7793 ATLASSERT(lpPoint != NULL);
\r
7794 ::SendMessage(m_hWnd, EM_GETSCROLLPOS, 0, (LPARAM)lpPoint);
\r
7797 void SetScrollPos(LPPOINT lpPoint)
\r
7799 ATLASSERT(::IsWindow(m_hWnd));
\r
7800 ATLASSERT(lpPoint != NULL);
\r
7801 ::SendMessage(m_hWnd, EM_SETSCROLLPOS, 0, (LPARAM)lpPoint);
\r
7804 BOOL GetZoom(int& nNum, int& nDen) const
\r
7806 ATLASSERT(::IsWindow(m_hWnd));
\r
7807 return (BOOL)::SendMessage(m_hWnd, EM_GETZOOM, (WPARAM)&nNum, (LPARAM)&nDen);
\r
7810 BOOL SetZoom(int nNum, int nDen)
\r
7812 ATLASSERT(::IsWindow(m_hWnd));
\r
7813 ATLASSERT(nNum >= 0 && nNum <= 64);
\r
7814 ATLASSERT(nDen >= 0 && nDen <= 64);
\r
7815 return (BOOL)::SendMessage(m_hWnd, EM_SETZOOM, nNum, nDen);
\r
7820 ATLASSERT(::IsWindow(m_hWnd));
\r
7821 return (BOOL)::SendMessage(m_hWnd, EM_SETZOOM, 0, 0L);
\r
7823 #endif // (_RICHEDIT_VER >= 0x0300)
\r
7826 void LimitText(LONG nChars = 0)
\r
7828 ATLASSERT(::IsWindow(m_hWnd));
\r
7829 ::SendMessage(m_hWnd, EM_EXLIMITTEXT, 0, nChars);
\r
7832 int LineFromChar(LONG nIndex) const
\r
7834 ATLASSERT(::IsWindow(m_hWnd));
\r
7835 return (int)::SendMessage(m_hWnd, EM_EXLINEFROMCHAR, 0, nIndex);
\r
7838 POINT PosFromChar(LONG nChar) const
\r
7840 ATLASSERT(::IsWindow(m_hWnd));
\r
7841 POINT point = { 0, 0 };
\r
7842 ::SendMessage(m_hWnd, EM_POSFROMCHAR, (WPARAM)&point, nChar);
\r
7846 int CharFromPos(POINT pt) const
\r
7848 ATLASSERT(::IsWindow(m_hWnd));
\r
7849 POINTL ptl = { pt.x, pt.y };
\r
7850 return (int)::SendMessage(m_hWnd, EM_CHARFROMPOS, 0, (LPARAM)&ptl);
\r
7853 void EmptyUndoBuffer()
\r
7855 ATLASSERT(::IsWindow(m_hWnd));
\r
7856 ::SendMessage(m_hWnd, EM_EMPTYUNDOBUFFER, 0, 0L);
\r
7859 int LineIndex(int nLine = -1) const
\r
7861 ATLASSERT(::IsWindow(m_hWnd));
\r
7862 return (int)::SendMessage(m_hWnd, EM_LINEINDEX, nLine, 0L);
\r
7865 int LineLength(int nLine = -1) const
\r
7867 ATLASSERT(::IsWindow(m_hWnd));
\r
7868 return (int)::SendMessage(m_hWnd, EM_LINELENGTH, nLine, 0L);
\r
7871 BOOL LineScroll(int nLines, int nChars = 0)
\r
7873 ATLASSERT(::IsWindow(m_hWnd));
\r
7874 return (BOOL)::SendMessage(m_hWnd, EM_LINESCROLL, nChars, nLines);
\r
7877 void ReplaceSel(LPCTSTR lpszNewText, BOOL bCanUndo = FALSE)
\r
7879 ATLASSERT(::IsWindow(m_hWnd));
\r
7880 ::SendMessage(m_hWnd, EM_REPLACESEL, (WPARAM) bCanUndo, (LPARAM)lpszNewText);
\r
7883 void SetRect(LPCRECT lpRect)
\r
7885 ATLASSERT(::IsWindow(m_hWnd));
\r
7886 ::SendMessage(m_hWnd, EM_SETRECT, 0, (LPARAM)lpRect);
\r
7889 BOOL DisplayBand(LPRECT pDisplayRect)
\r
7891 ATLASSERT(::IsWindow(m_hWnd));
\r
7892 return (BOOL)::SendMessage(m_hWnd, EM_DISPLAYBAND, 0, (LPARAM)pDisplayRect);
\r
7895 LONG FindText(DWORD dwFlags, FINDTEXT& ft) const
\r
7897 ATLASSERT(::IsWindow(m_hWnd));
\r
7898 #if (_RICHEDIT_VER >= 0x0200) && defined(_UNICODE)
\r
7899 return (LONG)::SendMessage(m_hWnd, EM_FINDTEXTW, dwFlags, (LPARAM)&ft);
\r
7901 return (LONG)::SendMessage(m_hWnd, EM_FINDTEXT, dwFlags, (LPARAM)&ft);
\r
7905 LONG FindText(DWORD dwFlags, FINDTEXTEX& ft) const
\r
7907 ATLASSERT(::IsWindow(m_hWnd));
\r
7908 #if (_RICHEDIT_VER >= 0x0200) && defined(_UNICODE)
\r
7909 return (LONG)::SendMessage(m_hWnd, EM_FINDTEXTEXW, dwFlags, (LPARAM)&ft);
\r
7911 return (LONG)::SendMessage(m_hWnd, EM_FINDTEXTEX, dwFlags, (LPARAM)&ft);
\r
7915 LONG FormatRange(FORMATRANGE& fr, BOOL bDisplay = TRUE)
\r
7917 ATLASSERT(::IsWindow(m_hWnd));
\r
7918 return (LONG)::SendMessage(m_hWnd, EM_FORMATRANGE, bDisplay, (LPARAM)&fr);
\r
7921 LONG FormatRange(FORMATRANGE* pFormatRange, BOOL bDisplay = TRUE)
\r
7923 ATLASSERT(::IsWindow(m_hWnd));
\r
7924 return (LONG)::SendMessage(m_hWnd, EM_FORMATRANGE, bDisplay, (LPARAM)pFormatRange);
\r
7927 void HideSelection(BOOL bHide = TRUE, BOOL bChangeStyle = FALSE)
\r
7929 ATLASSERT(::IsWindow(m_hWnd));
\r
7930 ::SendMessage(m_hWnd, EM_HIDESELECTION, bHide, bChangeStyle);
\r
7933 void PasteSpecial(UINT uClipFormat, DWORD dwAspect = 0, HMETAFILE hMF = 0)
\r
7935 ATLASSERT(::IsWindow(m_hWnd));
\r
7936 REPASTESPECIAL reps = { dwAspect, (DWORD_PTR)hMF };
\r
7937 ::SendMessage(m_hWnd, EM_PASTESPECIAL, uClipFormat, (LPARAM)&reps);
\r
7940 void RequestResize()
\r
7942 ATLASSERT(::IsWindow(m_hWnd));
\r
7943 ::SendMessage(m_hWnd, EM_REQUESTRESIZE, 0, 0L);
\r
7946 LONG StreamIn(UINT uFormat, EDITSTREAM& es)
\r
7948 ATLASSERT(::IsWindow(m_hWnd));
\r
7949 return (LONG)::SendMessage(m_hWnd, EM_STREAMIN, uFormat, (LPARAM)&es);
\r
7952 LONG StreamOut(UINT uFormat, EDITSTREAM& es)
\r
7954 ATLASSERT(::IsWindow(m_hWnd));
\r
7955 return (LONG)::SendMessage(m_hWnd, EM_STREAMOUT, uFormat, (LPARAM)&es);
\r
7958 DWORD FindWordBreak(int nCode, LONG nStartChar)
\r
7960 ATLASSERT(::IsWindow(m_hWnd));
\r
7961 return (DWORD)::SendMessage(m_hWnd, EM_FINDWORDBREAK, nCode, nStartChar);
\r
7964 // Additional operations
\r
7965 void ScrollCaret()
\r
7967 ATLASSERT(::IsWindow(m_hWnd));
\r
7968 ::SendMessage(m_hWnd, EM_SCROLLCARET, 0, 0L);
\r
7971 int InsertText(long nInsertAfterChar, LPCTSTR lpstrText, BOOL bCanUndo = FALSE)
\r
7973 int nRet = SetSel(nInsertAfterChar, nInsertAfterChar);
\r
7974 ReplaceSel(lpstrText, bCanUndo);
\r
7978 int AppendText(LPCTSTR lpstrText, BOOL bCanUndo = FALSE)
\r
7980 return InsertText(GetWindowTextLength(), lpstrText, bCanUndo);
\r
7983 // Clipboard operations
\r
7986 ATLASSERT(::IsWindow(m_hWnd));
\r
7987 return (BOOL)::SendMessage(m_hWnd, EM_UNDO, 0, 0L);
\r
7992 ATLASSERT(::IsWindow(m_hWnd));
\r
7993 ::SendMessage(m_hWnd, WM_CLEAR, 0, 0L);
\r
7998 ATLASSERT(::IsWindow(m_hWnd));
\r
7999 ::SendMessage(m_hWnd, WM_COPY, 0, 0L);
\r
8004 ATLASSERT(::IsWindow(m_hWnd));
\r
8005 ::SendMessage(m_hWnd, WM_CUT, 0, 0L);
\r
8010 ATLASSERT(::IsWindow(m_hWnd));
\r
8011 ::SendMessage(m_hWnd, WM_PASTE, 0, 0L);
\r
8015 IRichEditOle* GetOleInterface() const
\r
8017 ATLASSERT(::IsWindow(m_hWnd));
\r
8018 IRichEditOle *pRichEditOle = NULL;
\r
8019 ::SendMessage(m_hWnd, EM_GETOLEINTERFACE, 0, (LPARAM)&pRichEditOle);
\r
8020 return pRichEditOle;
\r
8023 BOOL SetOleCallback(IRichEditOleCallback* pCallback)
\r
8025 ATLASSERT(::IsWindow(m_hWnd));
\r
8026 return (BOOL)::SendMessage(m_hWnd, EM_SETOLECALLBACK, 0, (LPARAM)pCallback);
\r
8029 #if (_RICHEDIT_VER >= 0x0200)
\r
8032 ATLASSERT(::IsWindow(m_hWnd));
\r
8033 return (BOOL)::SendMessage(m_hWnd, EM_REDO, 0, 0L);
\r
8036 void StopGroupTyping()
\r
8038 ATLASSERT(::IsWindow(m_hWnd));
\r
8039 ::SendMessage(m_hWnd, EM_STOPGROUPTYPING, 0, 0L);
\r
8042 void ShowScrollBar(int nBarType, BOOL bVisible = TRUE)
\r
8044 ATLASSERT(::IsWindow(m_hWnd));
\r
8045 ::SendMessage(m_hWnd, EM_SHOWSCROLLBAR, nBarType, bVisible);
\r
8047 #endif // (_RICHEDIT_VER >= 0x0200)
\r
8049 #if (_RICHEDIT_VER >= 0x0300)
\r
8050 BOOL SetTabStops(int nTabStops, LPINT rgTabStops)
\r
8052 ATLASSERT(::IsWindow(m_hWnd));
\r
8053 return (BOOL)::SendMessage(m_hWnd, EM_SETTABSTOPS, nTabStops, (LPARAM)rgTabStops);
\r
8056 BOOL SetTabStops()
\r
8058 ATLASSERT(::IsWindow(m_hWnd));
\r
8059 return (BOOL)::SendMessage(m_hWnd, EM_SETTABSTOPS, 0, 0L);
\r
8062 BOOL SetTabStops(const int& cxEachStop) // takes an 'int'
\r
8064 ATLASSERT(::IsWindow(m_hWnd));
\r
8065 return (BOOL)::SendMessage(m_hWnd, EM_SETTABSTOPS, 1, (LPARAM)(LPINT)&cxEachStop);
\r
8067 #endif // (_RICHEDIT_VER >= 0x0300)
\r
8070 typedef CRichEditCtrlT<ATL::CWindow> CRichEditCtrl;
\r
8072 #endif // !_WIN32_WCE
\r
8075 ///////////////////////////////////////////////////////////////////////////////
\r
8076 // CRichEditCommands - message handlers for standard EDIT commands
\r
8078 #ifndef _WIN32_WCE
\r
8080 // Chain to CRichEditCommands message map. Your class must also derive from CRichEditCtrl.
\r
8082 // class CMyRichEdit : public CWindowImpl<CMyRichEdit, CRichEditCtrl>,
\r
8083 // public CRichEditCommands<CMyRichEdit>
\r
8086 // BEGIN_MSG_MAP(CMyRichEdit)
\r
8087 // // your handlers...
\r
8088 // CHAIN_MSG_MAP_ALT(CRichEditCommands<CMyRichEdit>, 1)
\r
8090 // // other stuff...
\r
8093 template <class T>
\r
8094 class CRichEditCommands : public CEditCommands< T >
\r
8097 BEGIN_MSG_MAP(CRichEditCommands< T >)
\r
8099 COMMAND_ID_HANDLER(ID_EDIT_CLEAR, CEditCommands< T >::OnEditClear)
\r
8100 COMMAND_ID_HANDLER(ID_EDIT_CLEAR_ALL, CEditCommands< T >::OnEditClearAll)
\r
8101 COMMAND_ID_HANDLER(ID_EDIT_COPY, CEditCommands< T >::OnEditCopy)
\r
8102 COMMAND_ID_HANDLER(ID_EDIT_CUT, CEditCommands< T >::OnEditCut)
\r
8103 COMMAND_ID_HANDLER(ID_EDIT_PASTE, CEditCommands< T >::OnEditPaste)
\r
8104 COMMAND_ID_HANDLER(ID_EDIT_SELECT_ALL, CEditCommands< T >::OnEditSelectAll)
\r
8105 COMMAND_ID_HANDLER(ID_EDIT_UNDO, CEditCommands< T >::OnEditUndo)
\r
8106 #if (_RICHEDIT_VER >= 0x0200)
\r
8107 COMMAND_ID_HANDLER(ID_EDIT_REDO, OnEditRedo)
\r
8108 #endif // (_RICHEDIT_VER >= 0x0200)
\r
8111 #if (_RICHEDIT_VER >= 0x0200)
\r
8112 LRESULT OnEditRedo(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
\r
8114 T* pT = static_cast<T*>(this);
\r
8118 #endif // (_RICHEDIT_VER >= 0x0200)
\r
8120 // State (update UI) helpers
\r
8121 BOOL CanCut() const
\r
8122 { return HasSelection(); }
\r
8124 BOOL CanCopy() const
\r
8125 { return HasSelection(); }
\r
8127 BOOL CanClear() const
\r
8128 { return HasSelection(); }
\r
8131 BOOL HasSelection() const
\r
8133 const T* pT = static_cast<const T*>(this);
\r
8134 return (pT->GetSelectionType() != SEL_EMPTY);
\r
8138 #endif // _WIN32_WCE
\r
8141 ///////////////////////////////////////////////////////////////////////////////
\r
8144 #ifndef _WIN32_WCE
\r
8146 template <class TBase>
\r
8147 class CDragListBoxT : public CListBoxT< TBase >
\r
8151 CDragListBoxT(HWND hWnd = NULL) : CListBoxT< TBase >(hWnd)
\r
8154 CDragListBoxT< TBase >& operator =(HWND hWnd)
\r
8160 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
8161 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
8162 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
8164 HWND hWnd = TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
8171 BOOL MakeDragList()
\r
8173 ATLASSERT(::IsWindow(m_hWnd));
\r
8174 ATLASSERT((GetStyle() & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) == 0);
\r
8175 return ::MakeDragList(m_hWnd);
\r
8178 int LBItemFromPt(POINT pt, BOOL bAutoScroll = TRUE)
\r
8180 ATLASSERT(::IsWindow(m_hWnd));
\r
8181 return ::LBItemFromPt(m_hWnd, pt, bAutoScroll);
\r
8184 void DrawInsert(int nItem)
\r
8186 ATLASSERT(::IsWindow(m_hWnd));
\r
8187 ::DrawInsert(GetParent(), m_hWnd, nItem);
\r
8190 static UINT GetDragListMessage()
\r
8192 static UINT uDragListMessage = 0;
\r
8193 if(uDragListMessage == 0)
\r
8195 CStaticDataInitCriticalSectionLock lock;
\r
8196 if(FAILED(lock.Lock()))
\r
8198 ATLTRACE2(atlTraceUI, 0, _T("ERROR : Unable to lock critical section in CDragListBox::GetDragListMessage.\n"));
\r
8203 if(uDragListMessage == 0)
\r
8204 uDragListMessage = ::RegisterWindowMessage(DRAGLISTMSGSTRING);
\r
8208 ATLASSERT(uDragListMessage != 0);
\r
8209 return uDragListMessage;
\r
8213 typedef CDragListBoxT<ATL::CWindow> CDragListBox;
\r
8215 template <class T>
\r
8216 class CDragListNotifyImpl
\r
8219 BEGIN_MSG_MAP(CDragListNotifyImpl< T >)
\r
8220 MESSAGE_HANDLER(CDragListBox::GetDragListMessage(), OnDragListNotify)
\r
8223 LRESULT OnDragListNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
\r
8225 uMsg; // avoid level 4 warning
\r
8226 ATLASSERT(uMsg == CDragListBox::GetDragListMessage());
\r
8227 T* pT = static_cast<T*>(this);
\r
8228 LPDRAGLISTINFO lpDragListInfo = (LPDRAGLISTINFO)lParam;
\r
8230 switch(lpDragListInfo->uNotification)
\r
8232 case DL_BEGINDRAG:
\r
8233 lRet = (LPARAM)pT->OnBeginDrag((int)wParam, lpDragListInfo->hWnd, lpDragListInfo->ptCursor);
\r
8235 case DL_CANCELDRAG:
\r
8236 pT->OnCancelDrag((int)wParam, lpDragListInfo->hWnd, lpDragListInfo->ptCursor);
\r
8239 lRet = (LPARAM)pT->OnDragging((int)wParam, lpDragListInfo->hWnd, lpDragListInfo->ptCursor);
\r
8242 pT->OnDropped((int)wParam, lpDragListInfo->hWnd, lpDragListInfo->ptCursor);
\r
8245 ATLTRACE2(atlTraceUI, 0, _T("Unknown DragListBox notification\n"));
\r
8246 bHandled = FALSE; // don't handle it
\r
8253 BOOL OnBeginDrag(int /*nCtlID*/, HWND /*hWndDragList*/, POINT /*ptCursor*/)
\r
8255 return TRUE; // allow dragging
\r
8258 void OnCancelDrag(int /*nCtlID*/, HWND /*hWndDragList*/, POINT /*ptCursor*/)
\r
8263 int OnDragging(int /*nCtlID*/, HWND /*hWndDragList*/, POINT /*ptCursor*/)
\r
8265 return 0; // don't change cursor
\r
8268 void OnDropped(int /*nCtlID*/, HWND /*hWndDragList*/, POINT /*ptCursor*/)
\r
8274 #endif // _WIN32_WCE
\r
8277 ///////////////////////////////////////////////////////////////////////////////
\r
8280 template <class TBase>
\r
8281 class CReBarCtrlT : public TBase
\r
8285 CReBarCtrlT(HWND hWnd = NULL) : TBase(hWnd)
\r
8288 CReBarCtrlT< TBase >& operator =(HWND hWnd)
\r
8294 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
8295 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
8296 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
8298 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
8302 static LPCTSTR GetWndClassName()
\r
8304 return REBARCLASSNAME;
\r
8307 UINT GetBandCount() const
\r
8309 ATLASSERT(::IsWindow(m_hWnd));
\r
8310 return (UINT)::SendMessage(m_hWnd, RB_GETBANDCOUNT, 0, 0L);
\r
8313 BOOL GetBandInfo(int nBand, LPREBARBANDINFO lprbbi) const
\r
8315 ATLASSERT(::IsWindow(m_hWnd));
\r
8316 return (BOOL)::SendMessage(m_hWnd, RB_GETBANDINFO, nBand, (LPARAM)lprbbi);
\r
8319 BOOL SetBandInfo(int nBand, LPREBARBANDINFO lprbbi)
\r
8321 ATLASSERT(::IsWindow(m_hWnd));
\r
8322 return (BOOL)::SendMessage(m_hWnd, RB_SETBANDINFO, nBand, (LPARAM)lprbbi);
\r
8325 BOOL GetBarInfo(LPREBARINFO lprbi) const
\r
8327 ATLASSERT(::IsWindow(m_hWnd));
\r
8328 return (BOOL)::SendMessage(m_hWnd, RB_GETBARINFO, 0, (LPARAM)lprbi);
\r
8331 BOOL SetBarInfo(LPREBARINFO lprbi)
\r
8333 ATLASSERT(::IsWindow(m_hWnd));
\r
8334 return (BOOL)::SendMessage(m_hWnd, RB_SETBARINFO, 0, (LPARAM)lprbi);
\r
8337 CImageList GetImageList() const
\r
8339 ATLASSERT(::IsWindow(m_hWnd));
\r
8340 REBARINFO rbi = { 0 };
\r
8341 rbi.cbSize = sizeof(REBARINFO);
\r
8342 rbi.fMask = RBIM_IMAGELIST;
\r
8343 if( (BOOL)::SendMessage(m_hWnd, RB_GETBARINFO, 0, (LPARAM)&rbi) == FALSE ) return CImageList();
\r
8344 return CImageList(rbi.himl);
\r
8347 BOOL SetImageList(HIMAGELIST hImageList)
\r
8349 ATLASSERT(::IsWindow(m_hWnd));
\r
8350 REBARINFO rbi = { 0 };
\r
8351 rbi.cbSize = sizeof(REBARINFO);
\r
8352 rbi.fMask = RBIM_IMAGELIST;
\r
8353 rbi.himl = hImageList;
\r
8354 return (BOOL)::SendMessage(m_hWnd, RB_SETBARINFO, 0, (LPARAM)&rbi);
\r
8357 UINT GetRowCount() const
\r
8359 ATLASSERT(::IsWindow(m_hWnd));
\r
8360 return (UINT)::SendMessage(m_hWnd, RB_GETROWCOUNT, 0, 0L);
\r
8363 UINT GetRowHeight(int nBand) const
\r
8365 ATLASSERT(::IsWindow(m_hWnd));
\r
8366 return (UINT)::SendMessage(m_hWnd, RB_GETROWHEIGHT, nBand, 0L);
\r
8369 #if (_WIN32_IE >= 0x0400)
\r
8370 COLORREF GetTextColor() const
\r
8372 ATLASSERT(::IsWindow(m_hWnd));
\r
8373 return (COLORREF)::SendMessage(m_hWnd, RB_GETTEXTCOLOR, 0, 0L);
\r
8376 COLORREF SetTextColor(COLORREF clr)
\r
8378 ATLASSERT(::IsWindow(m_hWnd));
\r
8379 return (COLORREF)::SendMessage(m_hWnd, RB_SETTEXTCOLOR, 0, (LPARAM)clr);
\r
8382 COLORREF GetBkColor() const
\r
8384 ATLASSERT(::IsWindow(m_hWnd));
\r
8385 return (COLORREF)::SendMessage(m_hWnd, RB_GETBKCOLOR, 0, 0L);
\r
8388 COLORREF SetBkColor(COLORREF clr)
\r
8390 ATLASSERT(::IsWindow(m_hWnd));
\r
8391 return (COLORREF)::SendMessage(m_hWnd, RB_SETBKCOLOR, 0, (LPARAM)clr);
\r
8394 UINT GetBarHeight() const
\r
8396 ATLASSERT(::IsWindow(m_hWnd));
\r
8397 return (UINT)::SendMessage(m_hWnd, RB_GETBARHEIGHT, 0, 0L);
\r
8400 BOOL GetRect(int nBand, LPRECT lpRect) const
\r
8402 ATLASSERT(::IsWindow(m_hWnd));
\r
8403 return (BOOL)::SendMessage(m_hWnd, RB_GETRECT, nBand, (LPARAM)lpRect);
\r
8406 #ifndef _WIN32_WCE
\r
8407 CToolTipCtrl GetToolTips() const
\r
8409 ATLASSERT(::IsWindow(m_hWnd));
\r
8410 return CToolTipCtrl((HWND)::SendMessage(m_hWnd, RB_GETTOOLTIPS, 0, 0L));
\r
8413 void SetToolTips(HWND hwndToolTip)
\r
8415 ATLASSERT(::IsWindow(m_hWnd));
\r
8416 ::SendMessage(m_hWnd, RB_SETTOOLTIPS, (WPARAM)hwndToolTip, 0L);
\r
8418 #endif // !_WIN32_WCE
\r
8420 void GetBandBorders(int nBand, LPRECT lpRect) const
\r
8422 ATLASSERT(::IsWindow(m_hWnd));
\r
8423 ATLASSERT(lpRect != NULL);
\r
8424 ::SendMessage(m_hWnd, RB_GETBANDBORDERS, nBand, (LPARAM)lpRect);
\r
8427 #ifndef _WIN32_WCE
\r
8428 BOOL GetColorScheme(LPCOLORSCHEME lpColorScheme) const
\r
8430 ATLASSERT(::IsWindow(m_hWnd));
\r
8431 ATLASSERT(lpColorScheme != NULL);
\r
8432 return (BOOL)::SendMessage(m_hWnd, RB_GETCOLORSCHEME, 0, (LPARAM)lpColorScheme);
\r
8435 void SetColorScheme(LPCOLORSCHEME lpColorScheme)
\r
8437 ATLASSERT(::IsWindow(m_hWnd));
\r
8438 ATLASSERT(lpColorScheme != NULL);
\r
8439 ::SendMessage(m_hWnd, RB_SETCOLORSCHEME, 0, (LPARAM)lpColorScheme);
\r
8442 HPALETTE GetPalette() const
\r
8444 ATLASSERT(::IsWindow(m_hWnd));
\r
8445 return (HPALETTE)::SendMessage(m_hWnd, RB_GETPALETTE, 0, 0L);
\r
8448 HPALETTE SetPalette(HPALETTE hPalette)
\r
8450 ATLASSERT(::IsWindow(m_hWnd));
\r
8451 return (HPALETTE)::SendMessage(m_hWnd, RB_SETPALETTE, 0, (LPARAM)hPalette);
\r
8454 BOOL GetUnicodeFormat() const
\r
8456 ATLASSERT(::IsWindow(m_hWnd));
\r
8457 return (BOOL)::SendMessage(m_hWnd, RB_GETUNICODEFORMAT, 0, 0L);
\r
8460 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
\r
8462 ATLASSERT(::IsWindow(m_hWnd));
\r
8463 return (BOOL)::SendMessage(m_hWnd, RB_SETUNICODEFORMAT, bUnicode, 0L);
\r
8465 #endif // !_WIN32_WCE
\r
8466 #endif // (_WIN32_IE >= 0x0400)
\r
8468 #if (_WIN32_WINNT >= 0x0501)
\r
8469 // requires uxtheme.h to be included to use MARGINS struct
\r
8470 #ifndef _UXTHEME_H_
\r
8471 typedef struct _MARGINS* PMARGINS;
\r
8472 #endif // !_UXTHEME_H_
\r
8473 void GetBandMargins(PMARGINS pMargins) const
\r
8475 ATLASSERT(::IsWindow(m_hWnd));
\r
8476 ::SendMessage(m_hWnd, RB_GETBANDMARGINS, 0, (LPARAM)pMargins);
\r
8479 void SetWindowTheme(LPCWSTR lpstrTheme)
\r
8481 ATLASSERT(::IsWindow(m_hWnd));
\r
8482 ::SendMessage(m_hWnd, RB_SETWINDOWTHEME, 0, (LPARAM)lpstrTheme);
\r
8484 #endif // (_WIN32_WINNT >= 0x0501)
\r
8486 #if (_WIN32_IE >= 0x0600)
\r
8487 DWORD GetExtendedStyle() const
\r
8489 ATLASSERT(::IsWindow(m_hWnd));
\r
8490 return (DWORD)::SendMessage(m_hWnd, RB_GETEXTENDEDSTYLE, 0, 0L);
\r
8493 DWORD SetExtendedStyle(DWORD dwStyle, DWORD dwMask)
\r
8495 ATLASSERT(::IsWindow(m_hWnd));
\r
8496 return (DWORD)::SendMessage(m_hWnd, RB_SETEXTENDEDSTYLE, dwMask, dwStyle);
\r
8498 #endif // (_WIN32_IE >= 0x0600)
\r
8501 BOOL InsertBand(int nBand, LPREBARBANDINFO lprbbi)
\r
8503 ATLASSERT(::IsWindow(m_hWnd));
\r
8504 return (BOOL)::SendMessage(m_hWnd, RB_INSERTBAND, nBand, (LPARAM)lprbbi);
\r
8507 BOOL AddBand(LPREBARBANDINFO lprbbi)
\r
8509 return InsertBand(-1, lprbbi);
\r
8512 BOOL DeleteBand(int nBand)
\r
8514 ATLASSERT(::IsWindow(m_hWnd));
\r
8515 return (BOOL)::SendMessage(m_hWnd, RB_DELETEBAND, nBand, 0L);
\r
8518 ATL::CWindow SetNotifyWnd(HWND hWnd)
\r
8520 ATLASSERT(::IsWindow(m_hWnd));
\r
8521 return ATL::CWindow((HWND)::SendMessage(m_hWnd, RB_SETPARENT, (WPARAM)hWnd, 0L));
\r
8524 #if (_WIN32_IE >= 0x0400)
\r
8525 void BeginDrag(int nBand, DWORD dwPos)
\r
8527 ATLASSERT(::IsWindow(m_hWnd));
\r
8528 ::SendMessage(m_hWnd, RB_BEGINDRAG, nBand, dwPos);
\r
8531 void BeginDrag(int nBand, int xPos, int yPos)
\r
8533 ATLASSERT(::IsWindow(m_hWnd));
\r
8534 ::SendMessage(m_hWnd, RB_BEGINDRAG, nBand, MAKELPARAM(xPos, yPos));
\r
8539 ATLASSERT(::IsWindow(m_hWnd));
\r
8540 ::SendMessage(m_hWnd, RB_ENDDRAG, 0, 0L);
\r
8543 void DragMove(DWORD dwPos)
\r
8545 ATLASSERT(::IsWindow(m_hWnd));
\r
8546 ::SendMessage(m_hWnd, RB_DRAGMOVE, 0, dwPos);
\r
8549 void DragMove(int xPos, int yPos)
\r
8551 ATLASSERT(::IsWindow(m_hWnd));
\r
8552 ::SendMessage(m_hWnd, RB_DRAGMOVE, 0, MAKELPARAM(xPos, yPos));
\r
8555 #ifndef _WIN32_WCE
\r
8556 void GetDropTarget(IDropTarget** ppDropTarget) const
\r
8558 ATLASSERT(::IsWindow(m_hWnd));
\r
8559 ::SendMessage(m_hWnd, RB_GETDROPTARGET, 0, (LPARAM)ppDropTarget);
\r
8561 #endif // !_WIN32_WCE
\r
8563 void MaximizeBand(int nBand, BOOL bIdeal = FALSE)
\r
8565 ATLASSERT(::IsWindow(m_hWnd));
\r
8566 ::SendMessage(m_hWnd, RB_MAXIMIZEBAND, nBand, bIdeal);
\r
8569 void MinimizeBand(int nBand)
\r
8571 ATLASSERT(::IsWindow(m_hWnd));
\r
8572 ::SendMessage(m_hWnd, RB_MINIMIZEBAND, nBand, 0L);
\r
8575 BOOL SizeToRect(LPRECT lpRect)
\r
8577 ATLASSERT(::IsWindow(m_hWnd));
\r
8578 return (BOOL)::SendMessage(m_hWnd, RB_SIZETORECT, 0, (LPARAM)lpRect);
\r
8581 int IdToIndex(UINT uBandID) const
\r
8583 ATLASSERT(::IsWindow(m_hWnd));
\r
8584 return (int)::SendMessage(m_hWnd, RB_IDTOINDEX, uBandID, 0L);
\r
8587 int HitTest(LPRBHITTESTINFO lprbht) const
\r
8589 ATLASSERT(::IsWindow(m_hWnd));
\r
8590 return (int)::SendMessage(m_hWnd, RB_HITTEST, 0, (LPARAM)lprbht);
\r
8593 BOOL ShowBand(int nBand, BOOL bShow)
\r
8595 ATLASSERT(::IsWindow(m_hWnd));
\r
8596 return (BOOL)::SendMessage(m_hWnd, RB_SHOWBAND, nBand, bShow);
\r
8599 #ifndef _WIN32_WCE
\r
8600 BOOL MoveBand(int nBand, int nNewPos)
\r
8602 ATLASSERT(::IsWindow(m_hWnd));
\r
8603 ATLASSERT(nNewPos >= 0 && nNewPos <= ((int)GetBandCount() - 1));
\r
8604 return (BOOL)::SendMessage(m_hWnd, RB_MOVEBAND, nBand, nNewPos);
\r
8606 #endif // !_WIN32_WCE
\r
8607 #endif // (_WIN32_IE >= 0x0400)
\r
8609 #if (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)
\r
8610 void PushChevron(int nBand, LPARAM lAppValue)
\r
8612 ATLASSERT(::IsWindow(m_hWnd));
\r
8613 ::SendMessage(m_hWnd, RB_PUSHCHEVRON, nBand, lAppValue);
\r
8615 #endif // (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)
\r
8617 // Extra operations
\r
8618 #if (_WIN32_IE >= 0x0400)
\r
8619 void LockBands(bool bLock)
\r
8621 int nBandCount = GetBandCount();
\r
8622 for(int i =0; i < nBandCount; i++)
\r
8624 REBARBANDINFO rbbi = { RunTimeHelper::SizeOf_REBARBANDINFO() };
\r
8625 rbbi.fMask = RBBIM_STYLE;
\r
8626 BOOL bRet = GetBandInfo(i, &rbbi);
\r
8629 if((rbbi.fStyle & RBBS_GRIPPERALWAYS) == 0)
\r
8631 rbbi.fStyle |= RBBS_GRIPPERALWAYS;
\r
8632 bRet = SetBandInfo(i, &rbbi);
\r
8634 rbbi.fStyle &= ~RBBS_GRIPPERALWAYS;
\r
8638 rbbi.fStyle |= RBBS_NOGRIPPER;
\r
8640 rbbi.fStyle &= ~RBBS_NOGRIPPER;
\r
8642 bRet = SetBandInfo(i, &rbbi);
\r
8646 #endif // (_WIN32_IE >= 0x0400)
\r
8648 #if (_WIN32_WINNT >= 0x0600)
\r
8649 BOOL SetBandWidth(int nBand, int cxWidth)
\r
8651 ATLASSERT(::IsWindow(m_hWnd));
\r
8652 return (BOOL)::SendMessage(m_hWnd, RB_SETBANDWIDTH, nBand, cxWidth);
\r
8654 #endif // (_WIN32_WINNT >= 0x0600)
\r
8657 typedef CReBarCtrlT<ATL::CWindow> CReBarCtrl;
\r
8660 ///////////////////////////////////////////////////////////////////////////////
\r
8663 #ifndef _WIN32_WCE
\r
8665 template <class TBase>
\r
8666 class CComboBoxExT : public CComboBoxT< TBase >
\r
8670 CComboBoxExT(HWND hWnd = NULL) : CComboBoxT< TBase >(hWnd)
\r
8673 CComboBoxExT< TBase >& operator =(HWND hWnd)
\r
8679 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
8680 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
8681 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
8683 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
8687 static LPCTSTR GetWndClassName()
\r
8689 return WC_COMBOBOXEX;
\r
8692 CImageList GetImageList() const
\r
8694 ATLASSERT(::IsWindow(m_hWnd));
\r
8695 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, CBEM_GETIMAGELIST, 0, 0L));
\r
8698 CImageList SetImageList(HIMAGELIST hImageList)
\r
8700 ATLASSERT(::IsWindow(m_hWnd));
\r
8701 return CImageList((HIMAGELIST)::SendMessage(m_hWnd, CBEM_SETIMAGELIST, 0, (LPARAM)hImageList));
\r
8704 #if (_WIN32_IE >= 0x0400)
\r
8705 DWORD GetExtendedStyle() const
\r
8707 ATLASSERT(::IsWindow(m_hWnd));
\r
8708 return (DWORD)::SendMessage(m_hWnd, CBEM_GETEXTENDEDSTYLE, 0, 0L);
\r
8711 DWORD SetExtendedStyle(DWORD dwExMask, DWORD dwExStyle)
\r
8713 ATLASSERT(::IsWindow(m_hWnd));
\r
8714 return (DWORD)::SendMessage(m_hWnd, CBEM_SETEXTENDEDSTYLE, dwExMask, dwExStyle);
\r
8717 BOOL GetUnicodeFormat() const
\r
8719 ATLASSERT(::IsWindow(m_hWnd));
\r
8720 return (BOOL)::SendMessage(m_hWnd, CBEM_GETUNICODEFORMAT, 0, 0L);
\r
8723 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
\r
8725 ATLASSERT(::IsWindow(m_hWnd));
\r
8726 return (BOOL)::SendMessage(m_hWnd, CBEM_SETUNICODEFORMAT, bUnicode, 0L);
\r
8728 #endif // (_WIN32_IE >= 0x0400)
\r
8730 #if (_WIN32_WINNT >= 0x0501)
\r
8731 void SetWindowTheme(LPCWSTR lpstrTheme)
\r
8733 ATLASSERT(::IsWindow(m_hWnd));
\r
8734 ::SendMessage(m_hWnd, CBEM_SETWINDOWTHEME, 0, (LPARAM)lpstrTheme);
\r
8736 #endif // (_WIN32_WINNT >= 0x0501)
\r
8739 int InsertItem(const COMBOBOXEXITEM* lpcCBItem)
\r
8741 ATLASSERT(::IsWindow(m_hWnd));
\r
8742 return (int)::SendMessage(m_hWnd, CBEM_INSERTITEM, 0, (LPARAM)lpcCBItem);
\r
8745 int InsertItem(UINT nMask, int nIndex, LPCTSTR lpszItem, int nImage, int nSelImage,
\r
8746 int iIndent, int iOverlay, LPARAM lParam)
\r
8748 ATLASSERT(::IsWindow(m_hWnd));
\r
8749 COMBOBOXEXITEM cbex = { 0 };
\r
8750 cbex.mask = nMask;
\r
8751 cbex.iItem = nIndex;
\r
8752 cbex.pszText = (LPTSTR) lpszItem;
\r
8753 cbex.iImage = nImage;
\r
8754 cbex.iSelectedImage = nSelImage;
\r
8755 cbex.iIndent = iIndent;
\r
8756 cbex.iOverlay = iOverlay;
\r
8757 cbex.lParam = lParam;
\r
8758 return (int)::SendMessage(m_hWnd, CBEM_INSERTITEM, 0, (LPARAM)&cbex);
\r
8761 int InsertItem(int nIndex, LPCTSTR lpszItem, int nImage, int nSelImage, int iIndent, LPARAM lParam = 0)
\r
8763 ATLASSERT(::IsWindow(m_hWnd));
\r
8764 COMBOBOXEXITEM cbex = { 0 };
\r
8765 cbex.mask = CBEIF_TEXT | CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_INDENT | CBEIF_LPARAM;
\r
8766 cbex.iItem = nIndex;
\r
8767 cbex.pszText = (LPTSTR) lpszItem;
\r
8768 cbex.iImage = nImage;
\r
8769 cbex.iSelectedImage = nSelImage;
\r
8770 cbex.iIndent = iIndent;
\r
8771 cbex.lParam = lParam;
\r
8772 return (int)::SendMessage(m_hWnd, CBEM_INSERTITEM, 0, (LPARAM)&cbex);
\r
8775 int AddItem(UINT nMask, LPCTSTR lpszItem, int nImage, int nSelImage, int iIndent, int iOverlay, LPARAM lParam)
\r
8777 return InsertItem(nMask, -1, lpszItem, nImage, nSelImage, iIndent, iOverlay, lParam);
\r
8780 int AddItem(LPCTSTR lpszItem, int nImage, int nSelImage, int iIndent, LPARAM lParam = 0)
\r
8782 return InsertItem(-1, lpszItem, nImage, nSelImage, iIndent, lParam);
\r
8785 int DeleteItem(int nIndex)
\r
8787 ATLASSERT(::IsWindow(m_hWnd));
\r
8788 return (int)::SendMessage(m_hWnd, CBEM_DELETEITEM, nIndex, 0L);
\r
8791 BOOL GetItem(PCOMBOBOXEXITEM pCBItem) const
\r
8793 ATLASSERT(::IsWindow(m_hWnd));
\r
8794 return (BOOL)::SendMessage(m_hWnd, CBEM_GETITEM, 0, (LPARAM)pCBItem);
\r
8797 BOOL SetItem(const COMBOBOXEXITEM* lpcCBItem)
\r
8799 ATLASSERT(::IsWindow(m_hWnd));
\r
8800 return (BOOL)::SendMessage(m_hWnd, CBEM_SETITEM, 0, (LPARAM)lpcCBItem);
\r
8803 int SetItem(int nIndex, UINT nMask, LPCTSTR lpszItem, int nImage, int nSelImage,
\r
8804 int iIndent, int iOverlay, LPARAM lParam)
\r
8806 ATLASSERT(::IsWindow(m_hWnd));
\r
8807 COMBOBOXEXITEM cbex = { 0 };
\r
8808 cbex.mask = nMask;
\r
8809 cbex.iItem = nIndex;
\r
8810 cbex.pszText = (LPTSTR) lpszItem;
\r
8811 cbex.iImage = nImage;
\r
8812 cbex.iSelectedImage = nSelImage;
\r
8813 cbex.iIndent = iIndent;
\r
8814 cbex.iOverlay = iOverlay;
\r
8815 cbex.lParam = lParam;
\r
8816 return (int)::SendMessage(m_hWnd, CBEM_SETITEM, 0, (LPARAM)&cbex);
\r
8819 BOOL GetItemText(int nIndex, LPTSTR lpszItem, int nLen) const
\r
8821 ATLASSERT(::IsWindow(m_hWnd));
\r
8822 ATLASSERT(lpszItem != NULL);
\r
8824 COMBOBOXEXITEM cbex = { 0 };
\r
8825 cbex.mask = CBEIF_TEXT;
\r
8826 cbex.iItem = nIndex;
\r
8827 cbex.pszText = lpszItem;
\r
8828 cbex.cchTextMax = nLen;
\r
8830 return (BOOL)::SendMessage(m_hWnd, CBEM_GETITEM, 0, (LPARAM)&cbex);
\r
8833 #ifndef _ATL_NO_COM
\r
8834 BOOL GetItemText(int nIndex, BSTR& bstrText) const
\r
8837 ATLASSERT(::IsWindow(m_hWnd));
\r
8838 ATLASSERT(bstrText == NULL);
\r
8840 COMBOBOXEXITEM cbex = { 0 };
\r
8841 cbex.mask = CBEIF_TEXT;
\r
8842 cbex.iItem = nIndex;
\r
8844 LPTSTR lpstrText = NULL;
\r
8845 BOOL bRet = FALSE;
\r
8846 for(int nLen = 256; ; nLen *= 2)
\r
8848 ATLTRY(lpstrText = new TCHAR[nLen]);
\r
8849 if(lpstrText == NULL)
\r
8851 lpstrText[0] = NULL;
\r
8852 cbex.pszText = lpstrText;
\r
8853 cbex.cchTextMax = nLen;
\r
8854 bRet = (BOOL)::SendMessage(m_hWnd, CBEM_GETITEM, 0, (LPARAM)&cbex);
\r
8855 if(!bRet || (lstrlen(cbex.pszText) < nLen - 1))
\r
8857 delete [] lpstrText;
\r
8861 if(lpstrText != NULL)
\r
8864 bstrText = ::SysAllocString(T2OLE(lpstrText));
\r
8865 delete [] lpstrText;
\r
8868 return (bstrText != NULL) ? TRUE : FALSE;
\r
8870 #endif // !_ATL_NO_COM
\r
8872 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
\r
8873 BOOL GetItemText(int nIndex, _CSTRING_NS::CString& strText) const
\r
8875 ATLASSERT(::IsWindow(m_hWnd));
\r
8877 COMBOBOXEXITEM cbex = { 0 };
\r
8878 cbex.mask = CBEIF_TEXT;
\r
8879 cbex.iItem = nIndex;
\r
8882 BOOL bRet = FALSE;
\r
8883 for(int nLen = 256; ; nLen *= 2)
\r
8885 cbex.pszText = strText.GetBufferSetLength(nLen);
\r
8886 if(cbex.pszText == NULL)
\r
8891 cbex.cchTextMax = nLen;
\r
8892 bRet = (BOOL)::SendMessage(m_hWnd, CBEM_GETITEM, 0, (LPARAM)&cbex);
\r
8893 if(!bRet || (lstrlen(cbex.pszText) < nLen - 1))
\r
8896 strText.ReleaseBuffer();
\r
8899 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
\r
8901 BOOL SetItemText(int nIndex, LPCTSTR lpszItem)
\r
8903 ATLASSERT(::IsWindow(m_hWnd));
\r
8904 return SetItem(nIndex, CBEIF_TEXT, lpszItem, 0, 0, 0, 0, 0);
\r
8907 CComboBox GetComboCtrl() const
\r
8909 ATLASSERT(::IsWindow(m_hWnd));
\r
8910 return CComboBox((HWND)::SendMessage(m_hWnd, CBEM_GETCOMBOCONTROL, 0, 0L));
\r
8913 CEdit GetEditCtrl() const
\r
8915 ATLASSERT(::IsWindow(m_hWnd));
\r
8916 return CEdit((HWND)::SendMessage(m_hWnd, CBEM_GETEDITCONTROL, 0, 0L));
\r
8919 BOOL HasEditChanged() const
\r
8921 ATLASSERT(::IsWindow(m_hWnd));
\r
8922 return (BOOL)::SendMessage(m_hWnd, CBEM_HASEDITCHANGED, 0, 0L);
\r
8926 int AddString(LPCTSTR /*lpszItem*/)
\r
8928 ATLASSERT(FALSE); // Not available in CComboBoxEx; use InsertItem
\r
8932 int InsertString(int /*nIndex*/, LPCTSTR /*lpszString*/)
\r
8934 ATLASSERT(FALSE); // Not available in CComboBoxEx; use InsertItem
\r
8938 int Dir(UINT /*attr*/, LPCTSTR /*lpszWildCard*/)
\r
8940 ATLASSERT(FALSE); // Not available in CComboBoxEx
\r
8944 int FindString(int /*nStartAfter*/, LPCTSTR /*lpszString*/) const
\r
8946 ATLASSERT(FALSE); // Not available in CComboBoxEx; try FindStringExact
\r
8951 typedef CComboBoxExT<ATL::CWindow> CComboBoxEx;
\r
8953 #endif // !_WIN32_WCE
\r
8956 ///////////////////////////////////////////////////////////////////////////////
\r
8957 // CMonthCalendarCtrl
\r
8959 template <class TBase>
\r
8960 class CMonthCalendarCtrlT : public TBase
\r
8964 CMonthCalendarCtrlT(HWND hWnd = NULL) : TBase(hWnd)
\r
8967 CMonthCalendarCtrlT< TBase >& operator =(HWND hWnd)
\r
8973 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
8974 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
8975 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
8977 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
8981 static LPCTSTR GetWndClassName()
\r
8983 return MONTHCAL_CLASS;
\r
8986 COLORREF GetColor(int nColorType) const
\r
8988 ATLASSERT(::IsWindow(m_hWnd));
\r
8989 return (COLORREF)::SendMessage(m_hWnd, MCM_GETCOLOR, nColorType, 0L);
\r
8992 COLORREF SetColor(int nColorType, COLORREF clr)
\r
8994 ATLASSERT(::IsWindow(m_hWnd));
\r
8995 return (COLORREF)::SendMessage(m_hWnd, MCM_SETCOLOR, nColorType, clr);
\r
8998 BOOL GetCurSel(LPSYSTEMTIME lpSysTime) const
\r
9000 ATLASSERT(::IsWindow(m_hWnd));
\r
9001 return (BOOL)::SendMessage(m_hWnd, MCM_GETCURSEL, 0, (LPARAM)lpSysTime);
\r
9004 BOOL SetCurSel(LPSYSTEMTIME lpSysTime)
\r
9006 ATLASSERT(::IsWindow(m_hWnd));
\r
9007 return (BOOL)::SendMessage(m_hWnd, MCM_SETCURSEL, 0, (LPARAM)lpSysTime);
\r
9010 int GetFirstDayOfWeek(BOOL* pbLocaleVal = NULL) const
\r
9012 ATLASSERT(::IsWindow(m_hWnd));
\r
9013 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, MCM_GETFIRSTDAYOFWEEK, 0, 0L);
\r
9014 if(pbLocaleVal != NULL)
\r
9015 *pbLocaleVal = (BOOL)HIWORD(dwRet);
\r
9016 return (int)(short)LOWORD(dwRet);
\r
9019 int SetFirstDayOfWeek(int nDay, BOOL* pbLocaleVal = NULL)
\r
9021 ATLASSERT(::IsWindow(m_hWnd));
\r
9022 DWORD dwRet = (DWORD)::SendMessage(m_hWnd, MCM_SETFIRSTDAYOFWEEK, 0, nDay);
\r
9023 if(pbLocaleVal != NULL)
\r
9024 *pbLocaleVal = (BOOL)HIWORD(dwRet);
\r
9025 return (int)(short)LOWORD(dwRet);
\r
9028 int GetMaxSelCount() const
\r
9030 ATLASSERT(::IsWindow(m_hWnd));
\r
9031 return (int)::SendMessage(m_hWnd, MCM_GETMAXSELCOUNT, 0, 0L);
\r
9034 BOOL SetMaxSelCount(int nMax)
\r
9036 ATLASSERT(::IsWindow(m_hWnd));
\r
9037 return (BOOL)::SendMessage(m_hWnd, MCM_SETMAXSELCOUNT, nMax, 0L);
\r
9040 int GetMonthDelta() const
\r
9042 ATLASSERT(::IsWindow(m_hWnd));
\r
9043 return (int)::SendMessage(m_hWnd, MCM_GETMONTHDELTA, 0, 0L);
\r
9046 int SetMonthDelta(int nDelta)
\r
9048 ATLASSERT(::IsWindow(m_hWnd));
\r
9049 return (int)::SendMessage(m_hWnd, MCM_SETMONTHDELTA, nDelta, 0L);
\r
9052 DWORD GetRange(LPSYSTEMTIME lprgSysTimeArray) const
\r
9054 ATLASSERT(::IsWindow(m_hWnd));
\r
9055 return (DWORD)::SendMessage(m_hWnd, MCM_GETRANGE, 0, (LPARAM)lprgSysTimeArray);
\r
9058 BOOL SetRange(DWORD dwFlags, LPSYSTEMTIME lprgSysTimeArray)
\r
9060 ATLASSERT(::IsWindow(m_hWnd));
\r
9061 return (BOOL)::SendMessage(m_hWnd, MCM_SETRANGE, dwFlags, (LPARAM)lprgSysTimeArray);
\r
9064 BOOL GetSelRange(LPSYSTEMTIME lprgSysTimeArray) const
\r
9066 ATLASSERT(::IsWindow(m_hWnd));
\r
9067 return (BOOL)::SendMessage(m_hWnd, MCM_GETSELRANGE, 0, (LPARAM)lprgSysTimeArray);
\r
9070 BOOL SetSelRange(LPSYSTEMTIME lprgSysTimeArray)
\r
9072 ATLASSERT(::IsWindow(m_hWnd));
\r
9073 return (BOOL)::SendMessage(m_hWnd, MCM_SETSELRANGE, 0, (LPARAM)lprgSysTimeArray);
\r
9076 BOOL GetToday(LPSYSTEMTIME lpSysTime) const
\r
9078 ATLASSERT(::IsWindow(m_hWnd));
\r
9079 return (BOOL)::SendMessage(m_hWnd, MCM_GETTODAY, 0, (LPARAM)lpSysTime);
\r
9082 void SetToday(LPSYSTEMTIME lpSysTime)
\r
9084 ATLASSERT(::IsWindow(m_hWnd));
\r
9085 ::SendMessage(m_hWnd, MCM_SETTODAY, 0, (LPARAM)lpSysTime);
\r
9088 BOOL GetMinReqRect(LPRECT lpRectInfo) const
\r
9090 ATLASSERT(::IsWindow(m_hWnd));
\r
9091 return (BOOL)::SendMessage(m_hWnd, MCM_GETMINREQRECT, 0, (LPARAM)lpRectInfo);
\r
9094 int GetMaxTodayWidth() const
\r
9096 ATLASSERT(::IsWindow(m_hWnd));
\r
9097 return (int)::SendMessage(m_hWnd, MCM_GETMAXTODAYWIDTH, 0, 0L);
\r
9100 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
9101 BOOL GetUnicodeFormat() const
\r
9103 ATLASSERT(::IsWindow(m_hWnd));
\r
9104 return (BOOL)::SendMessage(m_hWnd, MCM_GETUNICODEFORMAT, 0, 0L);
\r
9107 BOOL SetUnicodeFormat(BOOL bUnicode = TRUE)
\r
9109 ATLASSERT(::IsWindow(m_hWnd));
\r
9110 return (BOOL)::SendMessage(m_hWnd, MCM_SETUNICODEFORMAT, bUnicode, 0L);
\r
9112 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
9114 #if defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN)
\r
9115 DWORD GetCurrentView() const
\r
9117 ATLASSERT(::IsWindow(m_hWnd));
\r
9118 return (DWORD)::SendMessage(m_hWnd, MCM_GETCURRENTVIEW, 0, 0L);
\r
9121 BOOL SetCurrentView(DWORD dwView)
\r
9123 ATLASSERT(::IsWindow(m_hWnd));
\r
9124 return (BOOL)::SendMessage(m_hWnd, MCM_SETCURRENTVIEW, 0, dwView);
\r
9127 DWORD GetCalendarCount() const
\r
9129 ATLASSERT(::IsWindow(m_hWnd));
\r
9130 return (DWORD)::SendMessage(m_hWnd, MCM_GETCALENDARCOUNT, 0, 0L);
\r
9133 BOOL GetCalendarGridInfo(PMCGRIDINFO pGridInfo) const
\r
9135 ATLASSERT(::IsWindow(m_hWnd));
\r
9136 return (BOOL)::SendMessage(m_hWnd, MCM_GETCALENDARGRIDINFO, 0, (LPARAM)pGridInfo);
\r
9139 CALID GetCALID() const
\r
9141 ATLASSERT(::IsWindow(m_hWnd));
\r
9142 return (CALID)::SendMessage(m_hWnd, MCM_GETCALID, 0, 0L);
\r
9145 void SetCALID(CALID calid)
\r
9147 ATLASSERT(::IsWindow(m_hWnd));
\r
9148 ::SendMessage(m_hWnd, MCM_SETCALID, (LPARAM)calid, 0L);
\r
9151 int GetCalendarBorder() const
\r
9153 ATLASSERT(::IsWindow(m_hWnd));
\r
9154 return (int)::SendMessage(m_hWnd, MCM_GETCALENDARBORDER, 0, 0L);
\r
9157 void SetCalendarBorder(int cxyBorder, BOOL bSet = TRUE)
\r
9159 ATLASSERT(::IsWindow(m_hWnd));
\r
9160 ::SendMessage(m_hWnd, MCM_SETCALENDARBORDER, (WPARAM)bSet, (LPARAM)cxyBorder);
\r
9162 #endif // defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN)
\r
9165 int GetMonthRange(DWORD dwFlags, LPSYSTEMTIME lprgSysTimeArray) const
\r
9167 ATLASSERT(::IsWindow(m_hWnd));
\r
9168 return (int)::SendMessage(m_hWnd, MCM_GETMONTHRANGE, dwFlags, (LPARAM)lprgSysTimeArray);
\r
9171 BOOL SetDayState(int nMonths, LPMONTHDAYSTATE lpDayStateArray)
\r
9173 ATLASSERT(::IsWindow(m_hWnd));
\r
9174 return (BOOL)::SendMessage(m_hWnd, MCM_SETDAYSTATE, nMonths, (LPARAM)lpDayStateArray);
\r
9177 DWORD HitTest(PMCHITTESTINFO pMCHitTest) const
\r
9179 ATLASSERT(::IsWindow(m_hWnd));
\r
9180 return (DWORD)::SendMessage(m_hWnd, MCM_HITTEST, 0, (LPARAM)pMCHitTest);
\r
9183 #if defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN)
\r
9184 void SizeRectToMin(LPRECT lpRect)
\r
9186 ATLASSERT(::IsWindow(m_hWnd));
\r
9187 ::SendMessage(m_hWnd, MCM_SIZERECTTOMIN, 0, (LPARAM)lpRect);
\r
9189 #endif // defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN)
\r
9192 typedef CMonthCalendarCtrlT<ATL::CWindow> CMonthCalendarCtrl;
\r
9195 ///////////////////////////////////////////////////////////////////////////////
\r
9196 // CDateTimePickerCtrl
\r
9198 template <class TBase>
\r
9199 class CDateTimePickerCtrlT : public TBase
\r
9203 CDateTimePickerCtrlT(HWND hWnd = NULL) : TBase(hWnd)
\r
9206 CDateTimePickerCtrlT< TBase >& operator =(HWND hWnd)
\r
9212 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
9213 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
9214 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
9216 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
9220 static LPCTSTR GetWndClassName()
\r
9222 return DATETIMEPICK_CLASS;
\r
9225 BOOL SetFormat(LPCTSTR lpszFormat)
\r
9227 ATLASSERT(::IsWindow(m_hWnd));
\r
9228 return (BOOL)::SendMessage(m_hWnd, DTM_SETFORMAT, 0, (LPARAM)lpszFormat);
\r
9231 COLORREF GetMonthCalColor(int nColorType) const
\r
9233 ATLASSERT(::IsWindow(m_hWnd));
\r
9234 return (COLORREF)::SendMessage(m_hWnd, DTM_GETMCCOLOR, nColorType, 0L);
\r
9237 COLORREF SetMonthCalColor(int nColorType, COLORREF clr)
\r
9239 ATLASSERT(::IsWindow(m_hWnd));
\r
9240 return (COLORREF)::SendMessage(m_hWnd, DTM_SETMCCOLOR, nColorType, clr);
\r
9243 DWORD GetRange(LPSYSTEMTIME lpSysTimeArray) const
\r
9245 ATLASSERT(::IsWindow(m_hWnd));
\r
9246 return (DWORD)::SendMessage(m_hWnd, DTM_GETRANGE, 0, (LPARAM)lpSysTimeArray);
\r
9249 BOOL SetRange(DWORD dwFlags, LPSYSTEMTIME lpSysTimeArray)
\r
9251 ATLASSERT(::IsWindow(m_hWnd));
\r
9252 return (BOOL)::SendMessage(m_hWnd, DTM_SETRANGE, dwFlags, (LPARAM)lpSysTimeArray);
\r
9255 DWORD GetSystemTime(LPSYSTEMTIME lpSysTime) const
\r
9257 ATLASSERT(::IsWindow(m_hWnd));
\r
9258 return (DWORD)::SendMessage(m_hWnd, DTM_GETSYSTEMTIME, 0, (LPARAM)lpSysTime);
\r
9261 BOOL SetSystemTime(DWORD dwFlags, LPSYSTEMTIME lpSysTime)
\r
9263 ATLASSERT(::IsWindow(m_hWnd));
\r
9264 return (BOOL)::SendMessage(m_hWnd, DTM_SETSYSTEMTIME, dwFlags, (LPARAM)lpSysTime);
\r
9267 CMonthCalendarCtrl GetMonthCal() const
\r
9269 ATLASSERT(::IsWindow(m_hWnd));
\r
9270 return CMonthCalendarCtrl((HWND)::SendMessage(m_hWnd, DTM_GETMONTHCAL, 0, 0L));
\r
9273 #if (_WIN32_IE >= 0x0400)
\r
9274 CFontHandle GetMonthCalFont() const
\r
9276 ATLASSERT(::IsWindow(m_hWnd));
\r
9277 return CFontHandle((HFONT)::SendMessage(m_hWnd, DTM_GETMCFONT, 0, 0L));
\r
9280 void SetMonthCalFont(HFONT hFont, BOOL bRedraw = TRUE)
\r
9282 ATLASSERT(::IsWindow(m_hWnd));
\r
9283 ::SendMessage(m_hWnd, DTM_SETMCFONT, (WPARAM)hFont, MAKELPARAM(bRedraw, 0));
\r
9285 #endif // (_WIN32_IE >= 0x0400)
\r
9287 #if defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN)
\r
9288 DWORD GetMonthCalStyle() const
\r
9290 ATLASSERT(::IsWindow(m_hWnd));
\r
9291 return (DWORD)::SendMessage(m_hWnd, DTM_GETMCSTYLE, 0, 0L);
\r
9294 DWORD SetMonthCalStyle(DWORD dwStyle)
\r
9296 ATLASSERT(::IsWindow(m_hWnd));
\r
9297 return (DWORD)::SendMessage(m_hWnd, DTM_SETMCSTYLE, 0, (LPARAM)dwStyle);
\r
9300 void GetDateTimePickerInfo(LPDATETIMEPICKERINFO lpPickerInfo) const
\r
9302 ATLASSERT(::IsWindow(m_hWnd));
\r
9303 ::SendMessage(m_hWnd, DTM_GETDATETIMEPICKERINFO, 0, (LPARAM)lpPickerInfo);
\r
9306 BOOL GetIdealSize(LPSIZE lpSize) const
\r
9308 ATLASSERT(::IsWindow(m_hWnd));
\r
9309 return (BOOL)::SendMessage(m_hWnd, DTM_GETIDEALSIZE, 0, (LPARAM)lpSize);
\r
9312 void CloseMonthCal()
\r
9314 ATLASSERT(::IsWindow(m_hWnd));
\r
9315 ::SendMessage(m_hWnd, DTM_CLOSEMONTHCAL, 0, 0L);
\r
9317 #endif // defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN)
\r
9320 typedef CDateTimePickerCtrlT<ATL::CWindow> CDateTimePickerCtrl;
\r
9323 ///////////////////////////////////////////////////////////////////////////////
\r
9324 // CFlatScrollBarImpl - support for flat scroll bars
\r
9326 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
9328 template <class T>
\r
9329 class CFlatScrollBarImpl
\r
9333 BOOL FlatSB_Initialize()
\r
9335 T* pT = static_cast<T*>(this);
\r
9336 ATLASSERT(::IsWindow(pT->m_hWnd));
\r
9337 return ::InitializeFlatSB(pT->m_hWnd);
\r
9340 HRESULT FlatSB_Uninitialize()
\r
9342 T* pT = static_cast<T*>(this);
\r
9343 ATLASSERT(::IsWindow(pT->m_hWnd));
\r
9344 return ::UninitializeFlatSB(pT->m_hWnd);
\r
9347 // Flat scroll bar properties
\r
9348 BOOL FlatSB_GetScrollProp(UINT uIndex, LPINT lpnValue) const
\r
9350 const T* pT = static_cast<const T*>(this);
\r
9351 ATLASSERT(::IsWindow(pT->m_hWnd));
\r
9352 return ::FlatSB_GetScrollProp(pT->m_hWnd, uIndex, lpnValue);
\r
9355 BOOL FlatSB_SetScrollProp(UINT uIndex, int nValue, BOOL bRedraw = TRUE)
\r
9357 T* pT = static_cast<T*>(this);
\r
9358 ATLASSERT(::IsWindow(pT->m_hWnd));
\r
9359 return ::FlatSB_SetScrollProp(pT->m_hWnd, uIndex, nValue, bRedraw);
\r
9363 int FlatSB_GetScrollPos(int nBar) const
\r
9365 const T* pT = static_cast<const T*>(this);
\r
9366 ATLASSERT(::IsWindow(pT->m_hWnd));
\r
9367 return ::FlatSB_GetScrollPos(pT->m_hWnd, nBar);
\r
9370 int FlatSB_SetScrollPos(int nBar, int nPos, BOOL bRedraw = TRUE)
\r
9372 T* pT = static_cast<T*>(this);
\r
9373 ATLASSERT(::IsWindow(pT->m_hWnd));
\r
9374 return ::FlatSB_SetScrollPos(pT->m_hWnd, nBar, nPos, bRedraw);
\r
9377 BOOL FlatSB_GetScrollRange(int nBar, LPINT lpMinPos, LPINT lpMaxPos) const
\r
9379 const T* pT = static_cast<const T*>(this);
\r
9380 ATLASSERT(::IsWindow(pT->m_hWnd));
\r
9381 return ::FlatSB_GetScrollRange(pT->m_hWnd, nBar, lpMinPos, lpMaxPos);
\r
9384 BOOL FlatSB_SetScrollRange(int nBar, int nMinPos, int nMaxPos, BOOL bRedraw = TRUE)
\r
9386 T* pT = static_cast<T*>(this);
\r
9387 ATLASSERT(::IsWindow(pT->m_hWnd));
\r
9388 return ::FlatSB_SetScrollRange(pT->m_hWnd, nBar, nMinPos, nMaxPos, bRedraw);
\r
9391 BOOL FlatSB_GetScrollInfo(int nBar, LPSCROLLINFO lpScrollInfo) const
\r
9393 const T* pT = static_cast<const T*>(this);
\r
9394 ATLASSERT(::IsWindow(pT->m_hWnd));
\r
9395 return ::FlatSB_GetScrollInfo(pT->m_hWnd, nBar, lpScrollInfo);
\r
9398 int FlatSB_SetScrollInfo(int nBar, LPSCROLLINFO lpScrollInfo, BOOL bRedraw = TRUE)
\r
9400 T* pT = static_cast<T*>(this);
\r
9401 ATLASSERT(::IsWindow(pT->m_hWnd));
\r
9402 return ::FlatSB_SetScrollInfo(pT->m_hWnd, nBar, lpScrollInfo, bRedraw);
\r
9406 BOOL FlatSB_ShowScrollBar(UINT nBar, BOOL bShow = TRUE)
\r
9408 T* pT = static_cast<T*>(this);
\r
9409 ATLASSERT(::IsWindow(pT->m_hWnd));
\r
9410 return ::FlatSB_ShowScrollBar(pT->m_hWnd, nBar, bShow);
\r
9413 BOOL FlatSB_EnableScrollBar(UINT uSBFlags, UINT uArrowFlags = ESB_ENABLE_BOTH)
\r
9415 T* pT = static_cast<T*>(this);
\r
9416 ATLASSERT(::IsWindow(pT->m_hWnd));
\r
9417 return ::FlatSB_EnableScrollBar(pT->m_hWnd, uSBFlags, uArrowFlags);
\r
9421 template <class TBase>
\r
9422 class CFlatScrollBarT : public TBase, public CFlatScrollBarImpl<CFlatScrollBarT< TBase > >
\r
9425 CFlatScrollBarT(HWND hWnd = NULL) : TBase(hWnd)
\r
9428 CFlatScrollBarT< TBase >& operator =(HWND hWnd)
\r
9435 typedef CFlatScrollBarT<ATL::CWindow> CFlatScrollBar;
\r
9437 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
9440 ///////////////////////////////////////////////////////////////////////////////
\r
9443 #if (_WIN32_IE >= 0x0400)
\r
9445 template <class TBase>
\r
9446 class CIPAddressCtrlT : public TBase
\r
9450 CIPAddressCtrlT(HWND hWnd = NULL) : TBase(hWnd)
\r
9453 CIPAddressCtrlT< TBase >& operator =(HWND hWnd)
\r
9459 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
9460 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
9461 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
9463 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
9467 static LPCTSTR GetWndClassName()
\r
9469 return WC_IPADDRESS;
\r
9472 BOOL IsBlank() const
\r
9474 ATLASSERT(::IsWindow(m_hWnd));
\r
9475 return (BOOL)::SendMessage(m_hWnd, IPM_ISBLANK, 0, 0L);
\r
9478 int GetAddress(LPDWORD lpdwAddress) const
\r
9480 ATLASSERT(::IsWindow(m_hWnd));
\r
9481 return (int)::SendMessage(m_hWnd, IPM_GETADDRESS, 0, (LPARAM)lpdwAddress);
\r
9484 void SetAddress(DWORD dwAddress)
\r
9486 ATLASSERT(::IsWindow(m_hWnd));
\r
9487 ::SendMessage(m_hWnd, IPM_SETADDRESS, 0, dwAddress);
\r
9490 void ClearAddress()
\r
9492 ATLASSERT(::IsWindow(m_hWnd));
\r
9493 ::SendMessage(m_hWnd, IPM_CLEARADDRESS, 0, 0L);
\r
9496 void SetRange(int nField, WORD wRange)
\r
9498 ATLASSERT(::IsWindow(m_hWnd));
\r
9499 ::SendMessage(m_hWnd, IPM_SETRANGE, nField, wRange);
\r
9502 void SetRange(int nField, BYTE nMin, BYTE nMax)
\r
9504 ATLASSERT(::IsWindow(m_hWnd));
\r
9505 ::SendMessage(m_hWnd, IPM_SETRANGE, nField, MAKEIPRANGE(nMin, nMax));
\r
9508 void SetFocus(int nField)
\r
9510 ATLASSERT(::IsWindow(m_hWnd));
\r
9511 ::SendMessage(m_hWnd, IPM_SETFOCUS, nField, 0L);
\r
9515 typedef CIPAddressCtrlT<ATL::CWindow> CIPAddressCtrl;
\r
9517 #endif // (_WIN32_IE >= 0x0400)
\r
9520 ///////////////////////////////////////////////////////////////////////////////
\r
9523 #if (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
9525 template <class TBase>
\r
9526 class CPagerCtrlT : public TBase
\r
9530 CPagerCtrlT(HWND hWnd = NULL) : TBase(hWnd)
\r
9533 CPagerCtrlT< TBase >& operator =(HWND hWnd)
\r
9539 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
9540 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
9541 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
9543 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
9547 static LPCTSTR GetWndClassName()
\r
9549 return WC_PAGESCROLLER;
\r
9552 int GetButtonSize() const
\r
9554 ATLASSERT(::IsWindow(m_hWnd));
\r
9555 return (int)::SendMessage(m_hWnd, PGM_GETBUTTONSIZE, 0, 0L);
\r
9558 int SetButtonSize(int nButtonSize)
\r
9560 ATLASSERT(::IsWindow(m_hWnd));
\r
9561 return (int)::SendMessage(m_hWnd, PGM_SETBUTTONSIZE, 0, nButtonSize);
\r
9564 DWORD GetButtonState(int nButton) const
\r
9566 ATLASSERT(::IsWindow(m_hWnd));
\r
9567 ATLASSERT(nButton == PGB_TOPORLEFT || nButton == PGB_BOTTOMORRIGHT);
\r
9568 return (DWORD)::SendMessage(m_hWnd, PGM_GETBUTTONSTATE, 0, nButton);
\r
9571 COLORREF GetBkColor() const
\r
9573 ATLASSERT(::IsWindow(m_hWnd));
\r
9574 return (COLORREF)::SendMessage(m_hWnd, PGM_GETBKCOLOR, 0, 0L);
\r
9577 COLORREF SetBkColor(COLORREF clrBk)
\r
9579 ATLASSERT(::IsWindow(m_hWnd));
\r
9580 return (COLORREF)::SendMessage(m_hWnd, PGM_SETBKCOLOR, 0, (LPARAM)clrBk);
\r
9583 int GetBorder() const
\r
9585 ATLASSERT(::IsWindow(m_hWnd));
\r
9586 return (int)::SendMessage(m_hWnd, PGM_GETBORDER, 0, 0L);
\r
9589 int SetBorder(int nBorderSize)
\r
9591 ATLASSERT(::IsWindow(m_hWnd));
\r
9592 return (int)::SendMessage(m_hWnd, PGM_SETBORDER, 0, nBorderSize);
\r
9595 int GetPos() const
\r
9597 ATLASSERT(::IsWindow(m_hWnd));
\r
9598 return (int)::SendMessage(m_hWnd, PGM_GETPOS, 0, 0L);
\r
9601 int SetPos(int nPos)
\r
9603 ATLASSERT(::IsWindow(m_hWnd));
\r
9604 return (int)::SendMessage(m_hWnd, PGM_SETPOS, 0, nPos);
\r
9608 void SetChild(HWND hWndChild)
\r
9610 ATLASSERT(::IsWindow(m_hWnd));
\r
9611 ::SendMessage(m_hWnd, PGM_SETCHILD, 0, (LPARAM)hWndChild);
\r
9614 void ForwardMouse(BOOL bForward = TRUE)
\r
9616 ATLASSERT(::IsWindow(m_hWnd));
\r
9617 ::SendMessage(m_hWnd, PGM_FORWARDMOUSE, bForward, 0L);
\r
9622 ATLASSERT(::IsWindow(m_hWnd));
\r
9623 ::SendMessage(m_hWnd, PGM_RECALCSIZE, 0, 0L);
\r
9626 void GetDropTarget(IDropTarget** ppDropTarget)
\r
9628 ATLASSERT(::IsWindow(m_hWnd));
\r
9629 ATLASSERT(ppDropTarget != NULL);
\r
9630 ::SendMessage(m_hWnd, PGM_GETDROPTARGET, 0, (LPARAM)ppDropTarget);
\r
9634 typedef CPagerCtrlT<ATL::CWindow> CPagerCtrl;
\r
9636 #endif // (_WIN32_IE >= 0x0400) && !defined(_WIN32_WCE)
\r
9639 ///////////////////////////////////////////////////////////////////////////////
\r
9640 // CLinkCtrl - Windows SYSLINK control
\r
9642 #if (_WIN32_WINNT >= 0x0501) && !defined(_WIN32_WCE)
\r
9644 template <class TBase>
\r
9645 class CLinkCtrlT : public TBase
\r
9649 CLinkCtrlT(HWND hWnd = NULL) : TBase(hWnd)
\r
9652 CLinkCtrlT< TBase >& operator =(HWND hWnd)
\r
9658 HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
\r
9659 DWORD dwStyle = 0, DWORD dwExStyle = 0,
\r
9660 ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)
\r
9662 return TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
\r
9666 static LPCTSTR GetWndClassName()
\r
9670 #else // !_UNICODE
\r
9672 #endif // !_UNICODE
\r
9675 int GetIdealHeight(int cxMaxWidth = 0) const
\r
9677 ATLASSERT(::IsWindow(m_hWnd));
\r
9678 return (int)::SendMessage(m_hWnd, LM_GETIDEALHEIGHT, cxMaxWidth, 0L);
\r
9681 BOOL GetItem(PLITEM pLItem) const
\r
9683 ATLASSERT(::IsWindow(m_hWnd));
\r
9684 return (BOOL)::SendMessage(m_hWnd, LM_GETITEM, 0, (LPARAM)pLItem);
\r
9687 BOOL SetItem(PLITEM pLItem)
\r
9689 ATLASSERT(::IsWindow(m_hWnd));
\r
9690 return (BOOL)::SendMessage(m_hWnd, LM_SETITEM, 0, (LPARAM)pLItem);
\r
9694 int GetIdealSize(SIZE& size, int cxMaxWidth = 0) const
\r
9696 #ifndef LM_GETIDEALSIZE
\r
9697 const UINT LM_GETIDEALSIZE = LM_GETIDEALHEIGHT;
\r
9699 ATLASSERT(::IsWindow(m_hWnd));
\r
9700 return (int)::SendMessage(m_hWnd, LM_GETIDEALSIZE, cxMaxWidth, (LPARAM)&size);
\r
9704 BOOL HitTest(PLHITTESTINFO pLHitTestInfo) const
\r
9706 ATLASSERT(::IsWindow(m_hWnd));
\r
9707 return (BOOL)::SendMessage(m_hWnd, LM_HITTEST, 0, (LPARAM)pLHitTestInfo);
\r
9711 typedef CLinkCtrlT<ATL::CWindow> CLinkCtrl;
\r
9713 #endif // (_WIN32_WINNT >= 0x0501) && !defined(_WIN32_WCE)
\r
9716 ///////////////////////////////////////////////////////////////////////////////
\r
9717 // CCustomDraw - MI class for custom-draw support
\r
9719 template <class T>
\r
9723 #if (_ATL_VER < 0x0700)
\r
9724 BOOL m_bHandledCD;
\r
9726 BOOL IsMsgHandled() const
\r
9728 return m_bHandledCD;
\r
9731 void SetMsgHandled(BOOL bHandled)
\r
9733 m_bHandledCD = bHandled;
\r
9735 #endif // !(_ATL_VER < 0x0700)
\r
9737 // Message map and handlers
\r
9738 BEGIN_MSG_MAP(CCustomDraw< T >)
\r
9739 NOTIFY_CODE_HANDLER(NM_CUSTOMDRAW, OnCustomDraw)
\r
9741 REFLECTED_NOTIFY_CODE_HANDLER(NM_CUSTOMDRAW, OnCustomDraw)
\r
9744 // message handler
\r
9745 LRESULT OnCustomDraw(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
\r
9747 T* pT = static_cast<T*>(this);
\r
9748 pT->SetMsgHandled(TRUE);
\r
9749 LPNMCUSTOMDRAW lpNMCustomDraw = (LPNMCUSTOMDRAW)pnmh;
\r
9751 switch(lpNMCustomDraw->dwDrawStage)
\r
9753 case CDDS_PREPAINT:
\r
9754 dwRet = pT->OnPrePaint(idCtrl, lpNMCustomDraw);
\r
9756 case CDDS_POSTPAINT:
\r
9757 dwRet = pT->OnPostPaint(idCtrl, lpNMCustomDraw);
\r
9759 case CDDS_PREERASE:
\r
9760 dwRet = pT->OnPreErase(idCtrl, lpNMCustomDraw);
\r
9762 case CDDS_POSTERASE:
\r
9763 dwRet = pT->OnPostErase(idCtrl, lpNMCustomDraw);
\r
9765 case CDDS_ITEMPREPAINT:
\r
9766 dwRet = pT->OnItemPrePaint(idCtrl, lpNMCustomDraw);
\r
9768 case CDDS_ITEMPOSTPAINT:
\r
9769 dwRet = pT->OnItemPostPaint(idCtrl, lpNMCustomDraw);
\r
9771 case CDDS_ITEMPREERASE:
\r
9772 dwRet = pT->OnItemPreErase(idCtrl, lpNMCustomDraw);
\r
9774 case CDDS_ITEMPOSTERASE:
\r
9775 dwRet = pT->OnItemPostErase(idCtrl, lpNMCustomDraw);
\r
9777 #if (_WIN32_IE >= 0x0400)
\r
9778 case (CDDS_ITEMPREPAINT | CDDS_SUBITEM):
\r
9779 dwRet = pT->OnSubItemPrePaint(idCtrl, lpNMCustomDraw);
\r
9781 #endif // (_WIN32_IE >= 0x0400)
\r
9783 pT->SetMsgHandled(FALSE);
\r
9786 bHandled = pT->IsMsgHandled();
\r
9791 DWORD OnPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
\r
9793 return CDRF_DODEFAULT;
\r
9796 DWORD OnPostPaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
\r
9798 return CDRF_DODEFAULT;
\r
9801 DWORD OnPreErase(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
\r
9803 return CDRF_DODEFAULT;
\r
9806 DWORD OnPostErase(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
\r
9808 return CDRF_DODEFAULT;
\r
9811 DWORD OnItemPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
\r
9813 return CDRF_DODEFAULT;
\r
9816 DWORD OnItemPostPaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
\r
9818 return CDRF_DODEFAULT;
\r
9821 DWORD OnItemPreErase(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
\r
9823 return CDRF_DODEFAULT;
\r
9826 DWORD OnItemPostErase(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
\r
9828 return CDRF_DODEFAULT;
\r
9831 #if (_WIN32_IE >= 0x0400)
\r
9832 DWORD OnSubItemPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
\r
9834 return CDRF_DODEFAULT;
\r
9836 #endif // (_WIN32_IE >= 0x0400)
\r
9840 // --- Windows CE common controls ---
\r
9844 ///////////////////////////////////////////////////////////////////////////////
\r
9845 // CCECommandBarCtrl
\r
9847 template <class TBase>
\r
9848 class CCECommandBarCtrlT : public TBase
\r
9852 CCECommandBarCtrlT(HWND hWnd = NULL) : TBase(hWnd) { }
\r
9854 CCECommandBarCtrlT< TBase >& operator=(HWND hWnd)
\r
9861 BOOL IsVisible() const
\r
9863 return IsWindowVisible();
\r
9866 int GetHeight() const
\r
9868 ATLASSERT(::IsWindow(m_hWnd));
\r
9869 return ::CommandBar_Height(m_hWnd);
\r
9872 HMENU GetMenu(WORD wButton) const
\r
9874 ATLASSERT(::IsWindow(m_hWnd));
\r
9875 return ::CommandBar_GetMenu(m_hWnd, wButton);
\r
9879 HWND Create(HWND hWndParent, int nCmdBarID)
\r
9881 m_hWnd = ::CommandBar_Create(ModuleHelper::GetModuleInstance(), hWndParent, nCmdBarID);
\r
9882 ATLASSERT(::IsWindow(m_hWnd));
\r
9891 BOOL Show(BOOL bShow = TRUE)
\r
9893 ATLASSERT(::IsWindow(m_hWnd));
\r
9894 return ::CommandBar_Show(m_hWnd, bShow);
\r
9897 BOOL DrawMenuBar(WORD wButton)
\r
9899 ATLASSERT(::IsWindow(m_hWnd));
\r
9900 return ::CommandBar_DrawMenuBar(m_hWnd, wButton);
\r
9903 BOOL AddAdornments(DWORD dwFlags = 0)
\r
9905 ATLASSERT(::IsWindow(m_hWnd));
\r
9906 return ::CommandBar_AddAdornments(m_hWnd, dwFlags, 0);
\r
9909 int AddBitmap(int nBitmapID, int nNumImages)
\r
9911 ATLASSERT(::IsWindow(m_hWnd));
\r
9912 return ::CommandBar_AddBitmap(m_hWnd, ModuleHelper::GetResourceInstance(), nBitmapID, nNumImages, 16, 16);
\r
9915 BOOL AddButtons(UINT uNumButtons, LPTBBUTTON lpButtons)
\r
9917 ATLASSERT(::IsWindow(m_hWnd));
\r
9918 return CommandBar_AddButtons(m_hWnd, uNumButtons, lpButtons);
\r
9921 BOOL AddToolTips(UINT uNumToolTips, LPTSTR lpToolTips)
\r
9923 ATLASSERT(::IsWindow(m_hWnd));
\r
9924 return CommandBar_AddToolTips(m_hWnd, uNumToolTips, lpToolTips);
\r
9927 BOOL InsertButton(int nButton, LPTBBUTTON lpButton)
\r
9929 ATLASSERT(::IsWindow(m_hWnd));
\r
9930 return CommandBar_InsertButton(m_hWnd, nButton, lpButton);
\r
9933 HWND InsertComboBox(int nWidth, UINT dwStyle, WORD wComboBoxID, WORD wButton)
\r
9935 ATLASSERT(::IsWindow(m_hWnd));
\r
9936 return ::CommandBar_InsertComboBox(m_hWnd, ModuleHelper::GetModuleInstance(), nWidth, dwStyle, wComboBoxID, wButton);
\r
9939 BOOL InsertMenubar(WORD wMenuID, WORD wButton)
\r
9941 ATLASSERT(::IsWindow(m_hWnd));
\r
9942 return ::CommandBar_InsertMenubar(m_hWnd, ModuleHelper::GetResourceInstance(), wMenuID, wButton);
\r
9945 BOOL InsertMenubarEx(ATL::_U_STRINGorID menu, WORD wButton)
\r
9947 ATLASSERT(::IsWindow(m_hWnd));
\r
9948 return ::CommandBar_InsertMenubarEx(m_hWnd, ModuleHelper::GetResourceInstance(), (LPTSTR)menu.m_lpstr, wButton);
\r
9951 BOOL IsCommandBarMessage(LPMSG lpMsg)
\r
9953 ATLASSERT(::IsWindow(m_hWnd));
\r
9954 return ::IsCommandBarMessage(m_hWnd, lpMsg);
\r
9958 #if defined(_AYGSHELL_H_) || defined(__AYGSHELL_H__) // PPC MenuBar
\r
9959 typedef CCECommandBarCtrlT<CToolBarCtrl> CMenuBarCtrl;
\r
9961 typedef CCECommandBarCtrlT<CToolBarCtrl> CCECommandBarCtrl;
\r
9962 #endif // defined(_AYGSHELL_H_) || defined(__AYGSHELL_H__)
\r
9964 ///////////////////////////////////////////////////////////////////////////////
\r
9965 // CCECommandBandsCtrl
\r
9967 template <class TBase>
\r
9968 class CCECommandBandsCtrlT : public TBase
\r
9972 CCECommandBandsCtrlT(HWND hWnd = NULL) : TBase(hWnd) { }
\r
9974 CCECommandBandsCtrlT< TBase >& operator=(HWND hWnd)
\r
9981 BOOL IsVisible() const
\r
9983 return IsWindowVisible();
\r
9986 #if (_WIN32_IE >= 0x0400)
\r
9987 UINT GetHeight() const
\r
9989 ATLASSERT(::IsWindow(m_hWnd));
\r
9990 return CommandBands_Height(m_hWnd);
\r
9992 #endif // (_WIN32_IE >= 0x0400)
\r
9994 HWND GetCommandBar(UINT uBand) const
\r
9996 ATLASSERT(::IsWindow(m_hWnd));
\r
9997 return ::CommandBands_GetCommandBar(m_hWnd, uBand);
\r
10000 BOOL GetRestoreInformation(UINT uBand, LPCOMMANDBANDSRESTOREINFO pcbr) const
\r
10002 ATLASSERT(::IsWindow(m_hWnd));
\r
10003 return ::CommandBands_GetRestoreInformation(m_hWnd, uBand, pcbr);
\r
10007 HWND Create(HWND hWndParent, UINT wID, DWORD dwStyles, HIMAGELIST hImageList = NULL)
\r
10009 m_hWnd = ::CommandBands_Create(ModuleHelper::GetModuleInstance(), hWndParent, wID, dwStyles, hImageList);
\r
10010 ATLASSERT(::IsWindow(m_hWnd));
\r
10014 BOOL AddAdornments(DWORD dwFlags = 0, LPREBARBANDINFO prbbi = NULL)
\r
10016 ATLASSERT(::IsWindow(m_hWnd));
\r
10017 return ::CommandBands_AddAdornments(m_hWnd, ModuleHelper::GetModuleInstance(), dwFlags, prbbi);
\r
10020 BOOL AddBands(UINT uBandCount, LPREBARBANDINFO prbbi)
\r
10022 ATLASSERT(::IsWindow(m_hWnd));
\r
10023 return ::CommandBands_AddBands(m_hWnd, ModuleHelper::GetModuleInstance(), uBandCount, prbbi);
\r
10026 BOOL Show(BOOL bShow = TRUE)
\r
10028 ATLASSERT(::IsWindow(m_hWnd));
\r
10029 return ::CommandBands_Show(m_hWnd, bShow);
\r
10033 typedef CCECommandBandsCtrlT<ATL::CWindow> CCECommandBandsCtrl;
\r
10035 #endif // _WIN32_WCE
\r
10037 }; // namespace WTL
\r
10039 #endif // __ATLCTRLS_H__
\r