12 #ifndef __ATLWINCE_H__ 13 #define __ATLWINCE_H__ 18 #error atlwince.h requires atlapp.h to be included first 22 #error atlwince.h requires atlwin.h to be included first 26 #error atlwince.h compiles under Windows CE only 29 #if (_WIN32_WCE < 300) 30 #error atlwince.h requires Windows CE 3.0 or higher. 33 #if defined(WIN32_PLATFORM_WFSP) && _MSC_VER < 1400 // EVC compiling SmartPhone code 34 #if (WIN32_PLATFORM_WFSP < 200) 35 #error atlwince.h requires Smartphone 2003 or higher 37 #endif // WIN32_PLATFORM_WFSP 39 #if defined(WIN32_PLATFORM_PSPC) && _MSC_VER < 1400 // EVC compiling Pocket PC code 40 #if (WIN32_PLATFORM_PSPC < 310) 41 #error atlwince.h requires Pocket PC 2002 or higher 43 #endif // WIN32_PLATFORM_PSPC 45 #if !defined(_AYGSHELL_H_) && !defined(__AYGSHELL_H__) 46 #error atlwince.h requires aygshell.h to be included first 48 #if defined(WIN32_PLATFORM_WFSP) && !defined(_TPCSHELL_H_) 49 #error SmartPhone dialog classes require tpcshell.h to be included first 53 #if (_MSC_VER >= 1400) // VS2005 54 #include <DeviceResolutionAware.h> 56 #endif // (_MSC_VER >= 1400) 58 #if !defined(_WTL_CE_NO_DIALOGS) && !defined(__ATLFRAME_H__) 59 #error Orientation aware dialog classes require atlframe.h to be included first 62 #if !defined(_WTL_CE_NO_APPWINDOW) && !defined(__ATLFRAME_H__) 63 #error Application window class require atlframe.h to be included first 66 #if !defined(_WTL_CE_NO_ZOOMSCROLL) && !defined(__ATLSCRL_H__) 67 #error ZoomScroll implementation requires atlscrl.h to be included first 70 #if !defined(_WTL_CE_NO_ZOOMSCROLL) 71 #if !(defined(__ATLTYPES_H__) || (defined(__ATLMISC_H__) && !defined(_WTL_NO_WTYPES))) 72 #error ZoomScroll requires _WTL_NO_WTYPES not to be defined and either atlmisc.h or atltypes.h to be included first 73 #endif // !(defined(__ATLTYPES_H__) || (defined(__ATLMISC_H__) && !defined(_WTL_NO_WTYPES))) 74 #endif // !defined(_WTL_CE_NO_ZOOMSCROLL) 76 #if !defined(WIN32_PLATFORM_WFSP) && !defined(WIN32_PLATFORM_PSPC) 77 #define _WTL_CE_NO_CONTROLS 78 #endif // !defined(WIN32_PLATFORM_WFSP) && !defined(WIN32_PLATFORM_PSPC) 80 #ifndef _WTL_CE_NO_CONTROLS 81 #ifndef __ATLCTRLS_H__ 82 #error The PPC/SmartPhone controls classes require atlctrls.h to be included first 86 #pragma comment(lib, "htmlview.lib") 89 #pragma comment(lib, "voicectl.lib") 91 #ifdef WIN32_PLATFORM_PSPC 93 #pragma comment(lib, "richink.lib") 96 #pragma comment(lib, "inkx.lib") 99 #pragma comment(lib, "doclist.lib") 170 inline HWND AtlCreateMenuBar(SHMENUBARINFO& mbi)
172 ATLASSERT(::IsWindow(mbi.hwndParent));
173 ATLVERIFY(::SHCreateMenuBar(&mbi) != FALSE);
177 inline HWND AtlCreateMenuBar(HWND hWnd, UINT nToolBarId = ATL_IDW_TOOLBAR, DWORD dwFlags = 0,
int nBmpId = 0,
int cBmpImages = 0, COLORREF clrBk = 0)
179 SHMENUBARINFO mbi = {
sizeof(mbi), hWnd, dwFlags, nToolBarId, ModuleHelper::GetResourceInstance(), nBmpId, cBmpImages, 0, clrBk };
180 return AtlCreateMenuBar(mbi);
183 inline HWND AtlCreateEmptyMenuBar(HWND hWnd,
bool bSip =
true)
185 SHMENUBARINFO embi = {
sizeof(SHMENUBARINFO), hWnd, SHCMBF_EMPTYBAR };
187 embi.dwFlags |= SHCMBF_HIDESIPBUTTON;
189 return AtlCreateMenuBar(embi);
195 inline bool AtlIsEditFocus()
197 ATL::CWindow wCtrl = GetFocus();
198 if (wCtrl.IsWindow())
200 TCHAR szClassName[8] = {0};
201 ATLVERIFY(::GetClassName(wCtrl.m_hWnd, szClassName, 8));
202 return !_tcscmp(szClassName, _T(
"Edit")) || !_tcscmp(szClassName, WC_CAPEDIT);
207 #if defined WIN32_PLATFORM_WFSP 208 inline void AtlActivateBackKey(HWND hMenuBar)
210 ATLASSERT(::IsWindow(hMenuBar));
211 ::SendMessage(hMenuBar, SHCMBM_OVERRIDEKEY, VK_TBACK,
212 MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY, SHMBOF_NODEFAULT | SHMBOF_NOTIFY));
214 #endif // WIN32_PLATFORM_WFSP 218 #ifndef _WTL_CE_NO_DIALOGS 223 #define WTL_STD_SHIDIF SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN 224 #define WTL_SP_SHIDIF SHIDIF_SIZEDLGFULLSCREEN 227 #define WTL_DLG_TITLEHEIGHT(iHeight) static const int GetTitleHeight(){return iHeight;} 228 #define WTL_DLG_NOTITLE WTL_DLG_TITLEHEIGHT(0) 233 template <
class T, UINT t_sh
idiFlags,
bool t_bModal = true>
237 #ifdef WIN32_PLATFORM_PSPC 239 const int nTitleHeight;
245 BOOL GetClientRect(LPRECT lpRect)
247 T* pT =
static_cast<T*
>(
this);
248 ATLASSERT(pT->IsWindow());
249 BOOL bRes = ::GetClientRect(pT->m_hWnd, lpRect);
251 lpRect->top += nTitleHeight + 1;
255 BOOL SetWindowText(LPCTSTR lpszString)
257 T* pT =
static_cast<T*
>(
this);
258 ATLASSERT(pT->IsWindow());
259 BOOL bRes = ::SetWindowText(pT->m_hWnd, lpszString);
260 if (nTitleHeight != 0)
266 static const int GetTitleHeight()
269 return DRA::SCALEY(24);
270 #else // !_WTL_CE_DRA 272 return dc.GetDeviceCaps(LOGPIXELSY) >> 2;
273 #endif // !_WTL_CE_DRA 279 T* pT =
static_cast<T*
>(
this);
280 ATLASSERT(pT->IsWindow());
281 TCHAR sTitle[48] = { 0 };
285 CFont fontTitle = AtlCreateBoldFont();
287 dc.SetTextColor(GetSysColor(COLOR_HIGHLIGHT));
288 int nLen = pT->GetWindowText(sTitle, 48);
289 int nWidth = dc.GetDeviceCaps(HORZRES);
292 RECT rTitle = { 0, 0, nWidth, nTitleHeight };
293 dc.FillRect(&rTitle, COLOR_3DHIGHLIGHT);
295 rTitle.left = DRA::SCALEX(8);
296 #else // !_WTL_CE_DRA 297 rTitle.left = nTitleHeight / 3;
298 #endif // !_WTL_CE_DRA 299 dc.DrawText(sTitle, nLen, &rTitle, DT_VCENTER | DT_SINGLELINE);
300 dc.SelectFont(fontOld);
303 CPenHandle penOld = dc.SelectStockPen(BLACK_PEN);
304 POINT line[4] = {{0, nTitleHeight}, {nWidth, nTitleHeight}, {0, nTitleHeight - 1}, {nWidth, nTitleHeight - 1}};
307 int nSeg = DRA::SCALEY(1);
308 #else // !_WTL_CE_DRA 309 int nSeg = nTitleHeight / 24;
310 #endif // !_WTL_CE_DRA 312 dc.Polyline(line, nSeg <= 2 ? nSeg * 2 : 4);
313 dc.SelectPen(penOld);
319 void DialogTitleInit()
321 T* pT =
static_cast<T*
>(
this);
322 ATLASSERT(pT->IsWindow());
324 ATL::CWindow wCtl = pT->GetWindow(GW_CHILD);
325 while (wCtl.IsWindow())
328 wCtl.GetWindowRect(&rCtl);
329 ::MapWindowPoints(NULL, pT->m_hWnd, (LPPOINT)&rCtl, 2);
330 ::OffsetRect(&rCtl, 0, nTitleHeight);
331 wCtl.MoveWindow(&rCtl, FALSE);
332 wCtl = wCtl.GetWindow(GW_HWNDNEXT);
339 T* pT =
static_cast<T*
>(
this);
340 ATLASSERT(pT->IsWindow());
342 SIPINFO si = {
sizeof(SIPINFO)};
344 if ((si.fdwFlags & SIPF_ON) ^ SIPF_ON)
345 si.rcVisibleDesktop.bottom = si.rcSipRect.bottom;
346 pT->MoveWindow(&si.rcVisibleDesktop, FALSE);
350 LRESULT OnPaintTitle(UINT , WPARAM , LPARAM , BOOL& bHandled)
352 T* pT =
static_cast<T*
>(
this);
353 return bHandled = nTitleHeight ? pT->DoPaintTitle() : FALSE;
357 LRESULT OnSettingChange(UINT , WPARAM wParam, LPARAM , BOOL& bHandled)
359 T* pT =
static_cast<T*
>(
this);
360 if (wParam == SPI_SETSIPINFO)
365 return bHandled = FALSE;
368 #elif defined WIN32_PLATFORM_WFSP 370 LRESULT OnHotKey(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& )
372 T* pT =
static_cast<T*
>(
this);
373 const UINT uModif = (UINT)LOWORD(lParam);
374 const UINT uVirtKey = (UINT)HIWORD(lParam);
376 if(uVirtKey == VK_TBACK)
377 if (AtlIsEditFocus())
378 ::SHSendBackToFocusWindow(uMsg, wParam, lParam);
379 else if (uModif & MOD_KEYUP)
380 pT->StdCloseDialog(IDCANCEL);
387 T* pT =
static_cast<T*
>(
this);
388 HWND hMenuBar = ::SHFindMenuBar(pT->m_hWnd);
390 if (!hMenuBar && (t_shidiFlags & SHIDIF_DONEBUTTON))
391 hMenuBar = CreateMenuBar(ATL_IDM_MENU_DONE);
394 AtlActivateBackKey(hMenuBar);
399 T* pT =
static_cast<T*
>(
this);
400 ATLASSERT(pT->IsWindow());
402 CFontHandle fontBold = AtlCreateBoldFont(pT->GetFont());
404 ATL::CWindow wCtl = pT->GetWindow(GW_CHILD);
406 while (wCtl.IsWindow())
408 if ((
short int)wCtl.GetDlgCtrlID() == IDC_STATIC)
409 wCtl.SetFont(fontBold);
410 wCtl = wCtl.GetWindow(GW_HWNDNEXT);
413 #endif // WIN32_PLATFORM_WFSP 416 void StdPlatformInit()
418 T* pT =
static_cast<T*
>(
this);
419 #ifdef WIN32_PLATFORM_PSPC // Pocket PC title initialization 420 if (nTitleHeight != 0)
421 pT->DialogTitleInit();
422 #elif defined(WIN32_PLATFORM_WFSP) 425 #endif // WIN32_PLATFORM_WFSP 429 HWND CreateMenuBar(UINT uiMB = T::IDD,
int nBmpImages = 0)
431 T* pT =
static_cast<T*
>(
this);
432 return AtlCreateMenuBar(pT->m_hWnd, uiMB, 0, nBmpImages ? uiMB : 0, nBmpImages);
436 void StdCloseDialog(WORD wID)
438 T* pT =
static_cast<T*
>(
this);
440 ::EndDialog(pT->m_hWnd, wID);
448 T* pT =
static_cast<T*
>(
this);
449 SHINITDLGINFO shidi = { SHIDIM_FLAGS, pT->m_hWnd, t_shidiFlags };
450 ::SHInitDialog(&shidi);
454 LRESULT OnColorStatic(UINT , WPARAM wParam, LPARAM lParam, BOOL& bHandled)
456 if (::GetDlgCtrlID((HWND)lParam) == IDC_INFOSTATIC)
458 ::SetBkMode((HDC)wParam, TRANSPARENT);
459 return (LRESULT)::GetSysColorBrush(COLOR_INFOBK);
461 return bHandled = FALSE;
465 LRESULT OnMenuClose(WORD , WORD wID, HWND , BOOL& )
467 T* pT =
static_cast<T*
>(
this);
468 pT->StdCloseDialog((WORD)(wID - ID_MENU_OK + IDOK));
473 LRESULT OnCloseCmd(WORD , WORD wID, HWND , BOOL& )
475 T* pT =
static_cast<T*
>(
this);
476 pT->StdCloseDialog(wID);
485 template <
class T, UINT t_sh
idiFlags = WTL_STD_SHIDIF,
bool t_bModal = true,
class TBase = ATL::CDialogImpl< T > >
491 #ifdef WIN32_PLATFORM_PSPC 492 BOOL GetClientRect(LPRECT lpRect)
497 BOOL SetWindowText(LPCTSTR lpszString)
504 #ifdef WIN32_PLATFORM_PSPC // Pocket PC title and SIP 505 MESSAGE_HANDLER(WM_PAINT, OnPaintTitle)
506 MESSAGE_HANDLER(WM_SETTINGCHANGE, OnSettingChange)
507 #elif defined(WIN32_PLATFORM_WFSP) // SmartPhone VK_TBACK key 508 MESSAGE_HANDLER(WM_HOTKEY, OnHotKey)
510 MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnColorStatic)
511 MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
512 COMMAND_RANGE_HANDLER(IDOK, IDCANCEL, OnCloseCmd)
513 COMMAND_RANGE_HANDLER(ID_MENU_OK, ID_MENU_CANCEL, OnMenuClose)
516 LRESULT OnInitDialog(UINT , WPARAM , LPARAM , BOOL& bHandled)
519 T* pT =
static_cast<T*
>(
this);
520 ATLASSERT(t_bModal == pT->m_bModal);
524 return bHandled = FALSE;
531 template <
class T, UINT t_sh
idiFlags = WTL_STD_SHIDIF,
bool t_bModal = true >
538 #if defined __ATLDLGS_H__ 540 template <
class T, UINT t_sh
idiFlags = WTL_STD_SHIDIF,
bool t_bModal = true>
541 class ATL_NO_VTABLE CStdIndirectDialogImpl :
542 public CIndirectDialogImpl< T, CMemDlgTemplate, CStdDialogImpl<T, t_shidiFlags, t_bModal> >
551 ATLASSERT(!m_Template.IsTemplateEx());
554 DWORD &dwStyle = m_Template.GetTemplatePtr()->style;
555 if (dwStyle & DS_CENTER)
558 ATLASSERT((dwStyle & WS_CHILD) != WS_CHILD);
563 if((dwStyle & WS_CHILD) != WS_CHILD)
568 INT_PTR DoModal(HWND hWndParent = ::GetActiveWindow(), LPARAM dwInitParam = NULL)
572 if (!m_Template.IsValid())
577 return _baseClass::DoModal(hWndParent, dwInitParam);
580 HWND Create(HWND hWndParent, LPARAM dwInitParam = NULL)
582 ATLASSERT(!t_bModal);
584 if (!m_Template.IsValid())
589 return _baseClass::Create(hWndParent, dwInitParam);
592 BEGIN_MSG_MAP(CStdIndirectDialogImpl)
593 CHAIN_MSG_MAP(_baseStd)
598 #endif // defined __ATLDLGS_H__ 600 #ifndef _ATL_NO_HOSTING 605 template <
class T, UINT t_sh
idiFlags = WTL_STD_SHIDIF,
bool t_bModal = true >
608 #endif // _ATL_NO_HOSTING 613 template <WORD t_wDlgTemplateID, UINT t_sh
idiFlags = WTL_STD_SHIDIF>
615 public ATL::CSimpleDialog<t_wDlgTemplateID, FALSE>,
616 public CStdDialogBase<CStdSimpleDialog<t_wDlgTemplateID, t_shidiFlags>, t_shidiFlags>
621 #ifdef WIN32_PLATFORM_PSPC 622 BOOL GetClientRect(LPRECT lpRect)
624 return baseClass::GetClientRect(lpRect);
627 BOOL SetWindowText(LPCTSTR lpszString)
629 return baseClass::SetWindowText(lpszString);
634 #ifdef WIN32_PLATFORM_PSPC // Pocket PC title and SIP 635 MESSAGE_HANDLER(WM_PAINT, OnPaintTitle)
636 MESSAGE_HANDLER(WM_SETTINGCHANGE, OnSettingChange)
637 #elif defined(WIN32_PLATFORM_WFSP) // SmartPhone VK_TBACK key 638 MESSAGE_HANDLER(WM_HOTKEY, OnHotKey)
640 MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnColorStatic)
641 MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
642 COMMAND_RANGE_HANDLER(ID_MENU_OK, ID_MENU_CANCEL, OnMenuClose)
643 COMMAND_RANGE_HANDLER(IDOK, IDCANCEL, baseClass::OnCloseCmd)
646 LRESULT OnInitDialog(UINT , WPARAM , LPARAM , BOOL& bHandled)
650 return bHandled = FALSE;
657 template <
class T, UINT t_sh
idiFlags = WTL_STD_SHIDIF,
bool t_bModal = true,
class TBase = ATL::CDialogImpl<T> >
665 BEGIN_MSG_MAP(CStdResizeDialogImplBase)
666 #ifdef WIN32_PLATFORM_PSPC // Pocket PC title 667 MESSAGE_HANDLER(WM_PAINT, OnPaintTitle)
668 #elif defined(WIN32_PLATFORM_WFSP) // SmartPhone VK_TBACK key 669 MESSAGE_HANDLER(WM_HOTKEY, OnHotKey)
671 MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnColorStatic)
672 MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
673 COMMAND_RANGE_HANDLER(IDOK, IDCANCEL, OnCloseCmd)
674 COMMAND_RANGE_HANDLER(ID_MENU_OK, ID_MENU_CANCEL, OnMenuClose)
678 LRESULT OnInitDialog(UINT , WPARAM , LPARAM , BOOL& bHandled)
681 T* pT =
static_cast<T*
>(
this);
682 ATLASSERT(t_bModal == pT->m_bModal);
685 DlgResize_Init(FALSE);
687 return bHandled = FALSE;
694 template <
class T, UINT t_sh
idiFlags = WTL_STD_SHIDIF,
bool t_bModal = true >
698 #ifndef _ATL_NO_HOSTING 703 template <
class T, UINT t_sh
idiFlags = WTL_STD_SHIDIF,
bool t_bModal = true >
706 #endif // _ATL_NO_HOSTING 721 template <
class T, WORD t_wDlgTemplateID, UINT t_sh
idiFlags = WTL_STD_SHIDIF>
730 #ifdef WIN32_PLATFORM_PSPC // Pocket PC title 731 MESSAGE_HANDLER(WM_PAINT, OnPaintTitle)
732 #elif defined(WIN32_PLATFORM_WFSP) // SmartPhone VK_TBACK key 733 MESSAGE_HANDLER(WM_HOTKEY, OnHotKey)
735 MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnColorStatic)
736 MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
737 COMMAND_RANGE_HANDLER(IDOK, IDCANCEL, baseClass::OnCloseCmd)
738 COMMAND_RANGE_HANDLER(ID_MENU_OK, ID_MENU_CANCEL, OnMenuClose)
742 LRESULT OnInitDialog(UINT , WPARAM , LPARAM , BOOL& bHandled)
745 DlgResize_Init(FALSE);
747 return bHandled = FALSE;
751 #if defined(_WTL_CE_DRA) && defined(WIN32_PLATFORM_PSPC) 757 class CStdOrientedDialogBase
761 BOOL SetOrientation(DRA::DisplayMode mode)
763 T* pT =
static_cast<T*
>(
this);
764 ATLASSERT(pT->IsWindow());
765 ATLASSERT(mode == DRA::GetDisplayMode());
769 UINT iResource = (mode == DRA::Landscape)? T::IDD_LANDSCAPE : T::IDD;
771 BOOL bRes = DRA::RelayoutDialog(ModuleHelper::GetResourceInstance(), pT->m_hWnd, MAKEINTRESOURCE(iResource));
772 pT->OnOrientation(mode);
777 void OnOrientation(DRA::DisplayMode )
781 LRESULT OnSettingChange(UINT , WPARAM wParam, LPARAM , BOOL& bHandled)
783 T* pT =
static_cast<T*
>(
this);
784 ATLASSERT(pT->IsWindow());
785 if (wParam == SETTINGCHANGE_RESET)
787 SetOrientation(DRA::GetDisplayMode());
788 pT->StdPlatformInit();
791 else if (wParam == SPI_SETSIPINFO)
796 return bHandled = FALSE;
803 template <
class T, UINT t_sh
idiFlags = WTL_STD_SHIDIF,
bool t_bModal = true,
class TBase = ATL::CDialogImpl<T> >
804 class ATL_NO_VTABLE CStdOrientedDialogImplBase :
806 public CStdOrientedDialogBase<T>
809 BEGIN_MSG_MAP(CStdOrientedDialogImpl)
810 MESSAGE_HANDLER(WM_PAINT, OnPaintTitle)
811 MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnColorStatic)
812 MESSAGE_HANDLER(WM_SETTINGCHANGE, CStdOrientedDialogBase<T>::OnSettingChange)
813 MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
814 COMMAND_RANGE_HANDLER(IDOK, IDCANCEL, OnCloseCmd)
815 COMMAND_RANGE_HANDLER(ID_MENU_OK, ID_MENU_CANCEL, OnMenuClose)
818 LRESULT OnInitDialog(UINT , WPARAM , LPARAM , BOOL& bHandled)
820 T* pT =
static_cast<T*
>(
this);
822 ATLASSERT(t_bModal == pT->m_bModal);
824 if (DRA::GetDisplayMode() == DRA::Landscape)
825 SetOrientation(DRA::Landscape);
826 pT->StdPlatformInit();
828 return bHandled = FALSE;
835 template <
class T, UINT t_sh
idiFlags = WTL_STD_SHIDIF,
bool t_bModal = true >
836 class ATL_NO_VTABLE CStdOrientedDialogImpl :
public CStdOrientedDialogImplBase< T, t_shidiFlags, t_bModal>
839 #ifndef _ATL_NO_HOSTING 843 template <
class T, UINT t_sh
idiFlags = WTL_STD_SHIDIF,
bool t_bModal = true >
844 class ATL_NO_VTABLE CStdAxOrientedDialogImpl :
public CStdOrientedDialogImplBase< T, t_shidiFlags, t_bModal, ATL::CAxDialogImpl<T> >
846 #endif // _ATL_NO_HOSTING 851 template <WORD t_wDlgTemplateID, WORD t_wDlgLandscapeID, UINT t_sh
idiFlags = WTL_STD_SHIDIF>
852 class CStdSimpleOrientedDialog :
854 public CStdOrientedDialogBase<CStdSimpleOrientedDialog<t_wDlgTemplateID, t_wDlgLandscapeID, t_shidiFlags> >
858 typedef CStdOrientedDialogBase<CStdSimpleOrientedDialog<t_wDlgTemplateID, t_wDlgLandscapeID, t_shidiFlags> > baseOriented;
860 enum {IDD = t_wDlgTemplateID, IDD_LANDSCAPE = t_wDlgLandscapeID};
863 MESSAGE_HANDLER(WM_PAINT, OnPaintTitle)
864 MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnColorStatic)
865 MESSAGE_HANDLER(WM_SETTINGCHANGE, baseOriented::OnSettingChange)
866 MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
867 COMMAND_RANGE_HANDLER(IDOK, IDCANCEL, baseClass::OnCloseCmd)
868 COMMAND_RANGE_HANDLER(ID_MENU_OK, ID_MENU_CANCEL, OnMenuClose)
871 LRESULT OnInitDialog(UINT , WPARAM , LPARAM , BOOL& bHandled)
873 if (DRA::GetDisplayMode() == DRA::Landscape)
874 SetOrientation(DRA::Landscape);
877 return bHandled = FALSE;
881 #endif // _WTL_CE_DRA 884 #endif // _WTL_CE_NO_DIALOGS 889 #ifndef _WTL_CE_NO_APPWINDOW 901 m_Key.Create(HKEY_CURRENT_USER, sAppKey.m_lpstr);
902 ATLASSERT(m_Key.m_hKey);
908 return m_Key.SetBinaryValue(sName.m_lpstr, &val,
sizeof(V));
914 return m_Key.SetBinaryValue(sName.m_lpstr, &val0, nb *
sizeof(V));
920 ULONG bufSize =
sizeof(V);
921 return m_Key.QueryBinaryValue(sName.m_lpstr, &val, &bufSize);
927 ULONG bufSize = nb *
sizeof(V);
928 return m_Key.QueryBinaryValue(sName.m_lpstr, &val0, &bufSize);
931 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) 934 return m_Key.SetStringValue(sName.m_lpstr, sval);
939 DWORD size = MAX_PATH;
940 LONG res = m_Key.QueryStringValue(sName.m_lpstr, sval.GetBuffer(size), &size);
941 sval.ReleaseBuffer();
945 #pragma message("Warning: CAppInfoBase compiles without CString support. Do not use CString in Save or Restore.") 946 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) 950 return m_Key.SetStringValue(sName.m_lpstr, sval);
955 return m_Key.QueryStringValue(sName.m_lpstr, sval, plength);
960 return m_Key.DeleteValue(sName.m_lpstr);
969 #define DECLARE_APPKEY(uAppKey) \ 970 static LPCTSTR GetAppKey() \ 972 static LPCTSTR sAppKey = ATL::_U_STRINGorID(uAppKey).m_lpstr; \ 988 #define DECLARE_APP_FRAME_CLASS(WndClassName, uCommonResourceID, uAppKey) \ 989 DECLARE_FRAME_WND_CLASS(WndClassName, uCommonResourceID) \ 990 DECLARE_APPKEY(uAppKey) 992 #define DECLARE_APP_FRAME_CLASS_EX(WndClassName, uCommonResourceID, style, bkgnd, uAppKey) \ 993 DECLARE_FRAME_WND_CLASS_EX(WndClassName, uCommonResourceID, style, bkgnd) \ 994 DECLARE_APPKEY(uAppKey) 1002 #ifndef WIN32_PLATFORM_WFSP 1003 SHACTIVATEINFO m_sai;
1004 #endif // WIN32_PLATFORM_WFSP 1010 #ifndef WIN32_PLATFORM_WFSP 1011 SHACTIVATEINFO sai = {
sizeof(SHACTIVATEINFO) };
1013 #endif // WIN32_PLATFORM_WFSP 1017 static HRESULT ActivatePreviousInstance(HINSTANCE hInstance, LPCTSTR lpstrCmdLine,
bool bDialog)
1022 ATLVERIFY(::LoadString(hInstance, classInfo.m_uCommonResourceID, classInfo.m_szAutoName,
sizeof(classInfo.m_szAutoName)/
sizeof(classInfo.m_szAutoName[0])) != 0);
1024 classInfo.m_wc.lpszClassName = classInfo.m_szAutoName;
1026 const TCHAR* pszClass = classInfo.m_wc.lpszClassName;
1028 if(NULL == pszClass ||
'\0' == *pszClass)
1033 const DWORD dRetryInterval = 100;
1034 const int iMaxRetries = 25;
1036 for(
int i = 0; i < iMaxRetries; ++i)
1038 HANDLE hMutex = CreateMutex(NULL, FALSE, pszClass);
1040 DWORD dw = GetLastError();
1048 case ERROR_INVALID_HANDLE:
1061 if(dw == ERROR_ALREADY_EXISTS)
1063 CloseHandle(hMutex);
1067 hwnd = FindWindow(NULL, pszClass);
1069 hwnd = FindWindow(pszClass, NULL);
1073 Sleep(dRetryInterval);
1079 if (lpstrCmdLine && *lpstrCmdLine)
1081 COPYDATASTRUCT cd = { NULL,
sizeof(TCHAR) * (wcslen(lpstrCmdLine) + 1), (PVOID)lpstrCmdLine };
1082 ::SendMessage(hwnd, WM_COPYDATA, NULL, (LPARAM)&cd);
1085 if(0 != SetForegroundWindow(reinterpret_cast<HWND>(reinterpret_cast<ULONG>(hwnd) | 0x1)))
1098 bool AppHibernate(
bool )
1103 bool AppNewInstance(LPCTSTR )
1112 #ifdef WIN32_PLATFORM_WFSP 1121 MESSAGE_HANDLER(WM_ACTIVATE, OnActivate)
1122 #ifdef WIN32_PLATFORM_WFSP 1123 MESSAGE_HANDLER(WM_HOTKEY, OnHotKey)
1125 MESSAGE_HANDLER(WM_SETTINGCHANGE, OnSettingChange)
1126 #endif // WIN32_PLATFORM_WFSP 1127 MESSAGE_HANDLER(WM_HIBERNATE, OnHibernate)
1128 MESSAGE_HANDLER(WM_COPYDATA, OnNewInstance)
1129 MESSAGE_HANDLER(WM_CLOSE, OnClose)
1132 LRESULT OnActivate(UINT , WPARAM wParam, LPARAM lParam, BOOL& bHandled)
1134 T* pT =
static_cast<T*
>(
this);
1136 m_bHibernate = pT->AppHibernate(
false);
1137 #ifndef WIN32_PLATFORM_WFSP 1138 ::SHHandleWMActivate(pT->m_hWnd, wParam, lParam, &m_sai, 0);
1142 #endif // WIN32_PLATFORM_WFSP 1143 return bHandled = FALSE;
1146 #ifdef WIN32_PLATFORM_WFSP 1148 LRESULT OnHotKey(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& )
1150 T* pT =
static_cast<T*
>(
this);
1151 const UINT uModif = (UINT)LOWORD(lParam);
1152 const UINT uVirtKey = (UINT)HIWORD(lParam);
1153 if(uVirtKey == VK_TBACK)
1154 if (AtlIsEditFocus())
1155 ::SHSendBackToFocusWindow(uMsg, wParam, lParam);
1156 else if (uModif & MOD_KEYUP)
1161 #else // !WIN32_PLATFORM_WFSP 1163 LRESULT OnSettingChange(UINT , WPARAM wParam, LPARAM lParam, BOOL& bHandled)
1165 T* pT =
static_cast<T*
>(
this);
1167 return ::SHHandleWMSettingChange(pT->m_hWnd, wParam, lParam, &m_sai);
1169 #endif // !WIN32_PLATFORM_WFSP 1171 LRESULT OnHibernate(UINT , WPARAM , LPARAM , BOOL& )
1173 T* pT =
static_cast<T*
>(
this);
1174 return m_bHibernate = pT->AppHibernate(
true);
1177 LRESULT OnNewInstance(UINT , WPARAM , LPARAM lParam, BOOL& )
1179 T* pT =
static_cast<T*
>(
this);
1180 PCOPYDATASTRUCT pcds = (PCOPYDATASTRUCT)lParam;
1181 return pT->AppNewInstance((LPCTSTR)pcds->lpData);
1184 LRESULT OnClose(UINT , WPARAM , LPARAM , BOOL& bHandled)
1186 T* pT =
static_cast<T*
>(
this);
1202 static int AppRun(LPTSTR lpstrCmdLine = NULL,
int nCmdShow = SW_SHOWNORMAL)
1205 _Module.AddMessageLoop(&theLoop);
1209 if(wndMain.CreateEx(NULL, NULL, 0, 0, lpstrCmdLine) == NULL)
1211 ATLTRACE2(atlTraceUI, 0, _T(
"Main window creation failed!\n"));
1215 wndMain.ShowWindow(nCmdShow);
1217 int nRet = theLoop.Run();
1219 _Module.RemoveMessageLoop();
1223 static HRESULT ActivatePreviousInstance(HINSTANCE hInstance, LPCTSTR lpstrCmdLine)
1230 #ifndef _WTL_CE_NO_DIALOGS 1236 #define DECLARE_APP_DLG_CLASS(WndClassName, uCommonResourceID, uAppKey) \ 1237 static WTL::CFrameWndClassInfo& GetWndClassInfo() \ 1239 static WTL::CFrameWndClassInfo wc = \ 1241 { 0, (WNDPROC)StartDialogProc, \ 1242 0, 0, NULL, NULL, NULL, (HBRUSH)(COLOR_WINDOW + 1), NULL, WndClassName }, \ 1243 NULL, NULL, IDC_ARROW, TRUE, 0, _T(""), uCommonResourceID \ 1247 DECLARE_APPKEY(uAppKey) 1253 static int AppRun(LPTSTR lpstrCmdLine = NULL,
int nCmdShow = SW_SHOWNORMAL)
1256 _Module.AddMessageLoop(&theLoop);
1260 if(dlgMain.Create(NULL, (LPARAM)lpstrCmdLine) == NULL)
1262 ATLTRACE2(atlTraceUI, 0, _T(
"Main dialog creation failed!\n"));
1266 dlgMain.ShowWindow(nCmdShow);
1268 int nRet = theLoop.Run();
1270 _Module.RemoveMessageLoop();
1274 static HRESULT ActivatePreviousInstance(HINSTANCE hInstance, LPCTSTR lpstrCmdLine)
1282 #ifdef WIN32_PLATFORM_WFSP 1283 #define WTL_APP_SHIDIF WTL_SP_SHIDIF 1285 #define WTL_APP_SHIDIF WTL_STD_SHIDIF 1291 template <
class T,
class TImplBase, UINT t_sh
idiFlags = WTL_APP_SHIDIF,
bool t_bModal = false>
1299 void StdCloseDialog(
int nVal)
1301 T* pT =
static_cast<T*
>(
this);
1302 if (nVal != IDCANCEL)
1304 if (t_bModal ==
false)
1306 pT->DestroyWindow();
1307 ::PostQuitMessage(nVal);
1310 ::EndDialog(pT->m_hWnd, nVal);
1314 MESSAGE_HANDLER(WM_CLOSE, OnSystemClose)
1315 CHAIN_MSG_MAP(TImplBase)
1319 LRESULT OnSystemClose(UINT , WPARAM , LPARAM , BOOL& )
1321 T* pT =
static_cast<T*
>(
this);
1322 pT->StdCloseDialog(IDCANCEL);
1330 template <
class T, UINT t_sh
idiFlags = WTL_APP_SHIDIF,
bool t_bModal = false>
1338 template <
class T, UINT t_sh
idiFlags = WTL_APP_SHIDIF,
bool t_bModal = false>
1340 public CAppStdDialogImplBase<T, CStdDialogResizeImpl<T, t_shidiFlags, t_bModal>, t_shidiFlags, t_bModal>
1343 #ifndef _ATL_NO_HOSTING 1347 template <
class T, UINT t_sh
idiFlags = WTL_APP_SHIDIF,
bool t_bModal = false>
1349 public CAppStdDialogImplBase<T, CStdAxDialogImpl<T, t_shidiFlags, t_bModal>, t_shidiFlags, t_bModal>
1355 template <
class T, UINT t_sh
idiFlags = WTL_APP_SHIDIF,
bool t_bModal = false>
1357 public CAppStdDialogImplBase<T, CStdAxDialogResizeImpl<T, t_shidiFlags, t_bModal>, t_shidiFlags, t_bModal>
1359 #endif // _ATL_NO_HOSTING 1361 #if defined(_WTL_CE_DRA) && defined(WIN32_PLATFORM_PSPC) 1365 template <
class T, UINT t_sh
idiFlags = WTL_APP_SHIDIF,
bool t_bModal = false>
1366 class ATL_NO_VTABLE CAppStdOrientedDialogImpl :
1367 public CAppStdDialogImplBase<T, CStdOrientedDialogImpl<T, t_shidiFlags, t_bModal>, t_shidiFlags, t_bModal>
1370 #ifndef _ATL_NO_HOSTING 1374 template <
class T, UINT t_sh
idiFlags = WTL_APP_SHIDIF,
bool t_bModal = false>
1375 class ATL_NO_VTABLE CAppStdAxOrientedDialogImpl :
1376 public CAppStdDialogImplBase<T, CStdAxOrientedDialogImpl<T, t_shidiFlags, t_bModal>, t_shidiFlags, t_bModal>
1378 #endif // _ATL_NO_HOSTING 1380 #endif // defined(_WTL_CE_DRA) && defined(WIN32_PLATFORM_PSPC) 1382 #endif // _WTL_CE_NO_DIALOGS 1384 #endif // _WTL_CE_NO_APPWINDOW 1389 #ifndef _WTL_CE_NO_FULLSCREEN 1394 template <
class T,
bool t_bHasSip = true>
1404 void SetFullScreen(
bool bFull)
1406 m_bFullScreen = bFull;
1407 ShowTaskBar(!bFull,
false);
1408 ShowMenuBar(!bFull);
1413 int FSDoModal(D& dlg)
1415 T* pT =
static_cast<T*
>(
this);
1417 ATLASSERT(pT->IsWindow());
1419 ShowTaskBar(
true,
false);
1420 int iRet = dlg.DoModal();
1427 void ShowMenuBar(
bool bShow)
1429 T* pT =
static_cast<T*
>(
this);
1430 ATLASSERT(pT->IsWindow());
1431 ATL::CWindow MenuBar = pT->m_hWndCECommandBar;
1432 ATLASSERT(MenuBar.IsWindow());
1433 MenuBar.ShowWindow(bShow ? SW_SHOWNORMAL : SW_HIDE);
1434 pT->SizeToMenuBar();
1437 void ShowTaskBar(
bool bShow,
bool bRepaint =
true)
1439 T* pT =
static_cast<T*
>(
this);
1440 ATLASSERT(pT->IsWindow());
1442 SystemParametersInfo(SPI_GETWORKAREA, NULL, &rect, FALSE);
1446 #ifdef WIN32_PLATFORM_PSPC // Pocket PC code 1447 UINT uShow = t_bHasSip ? SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON : SHFS_SHOWTASKBAR | SHFS_HIDESIPBUTTON;
1448 SHFullScreen(pT->m_hWnd, bShow ? uShow : SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON);
1449 #elif _WIN32_WCE > 0x500 // Smartphone 2005 code 1450 SHFullScreen(pT->m_hWnd, bShow ? SHFS_SHOWTASKBAR : SHFS_HIDETASKBAR);
1451 #else // Smartphone 2003 1452 HWND hTaskBar = FindWindow(_T(
"tray"), NULL);
1453 ATLASSERT(::IsWindow(hTaskBar));
1454 ::ShowWindow(hTaskBar, bShow ? SW_SHOW : SW_HIDE);
1455 #endif // WIN32_PLATFORM_PSPC 1457 pT->MoveWindow(&rect, bRepaint);
1462 MESSAGE_HANDLER(WM_SETTINGCHANGE, OnSettingChange)
1463 MESSAGE_HANDLER(WM_ACTIVATE, OnActivate)
1466 LRESULT OnSettingChange(UINT , WPARAM wParam, LPARAM , BOOL& bHandled)
1468 #ifndef SETTINGCHANGE_RESET // not defined for PPC 2002 1469 #define SETTINGCHANGE_RESET SPI_SETWORKAREA 1471 if (m_bFullScreen && (wParam == SETTINGCHANGE_RESET))
1472 SetFullScreen(m_bFullScreen);
1473 return bHandled = FALSE;
1476 LRESULT OnActivate(UINT , WPARAM wParam, LPARAM , BOOL& bHandled)
1480 ShowTaskBar(!wParam);
1481 ShowMenuBar(!wParam);
1483 return bHandled = FALSE;
1487 #endif // _WTL_CE_NO_FULLSCREEN 1492 #ifndef _WTL_CE_NO_ZOOMSCROLL 1502 _WTYPES_NS::CSize m_sizeTrue;
1510 void SetZoomScrollSize(_WTYPES_NS::CSize sizeTrue,
double fzoom = 1., BOOL bRedraw = TRUE)
1512 ATLASSERT(fzoom > 0.);
1513 m_sizeTrue = sizeTrue;
1519 void SetZoomScrollSize(
int cx,
int cy,
double fzoom=1., BOOL bRedraw = TRUE)
1521 SetZoomScrollSize(_WTYPES_NS::CSize(cx, cy), fzoom, bRedraw);
1524 void SetZoom(
double fzoom, BOOL bRedraw = TRUE)
1526 _WTYPES_NS::CPoint ptCenter = WndtoTrue(m_sizeClient / 2);
1527 _WTYPES_NS::CSize sizePage = GetScrollPage();
1528 _WTYPES_NS::CSize sizeLine = GetScrollLine();
1530 SetZoomScrollSize(GetScrollSize(), fzoom, bRedraw);
1532 SetScrollLine(sizeLine);
1533 SetScrollPage(sizePage);
1534 _WTYPES_NS::CPoint ptOffset = ptCenter - (m_sizeClient / 2) * fzoom;
1535 SetScrollOffset(ptOffset, bRedraw);
1544 void SetScrollOffset(
int x,
int y, BOOL bRedraw = TRUE)
1549 void SetScrollOffset(POINT ptOffset, BOOL bRedraw = TRUE)
1551 SetScrollOffset(ptOffset.x, ptOffset.y, bRedraw);
1554 void GetScrollOffset(POINT& ptOffset)
1556 ptOffset.x = (LONG)(m_ptOffset.x * m_fzoom);
1557 ptOffset.y = (LONG)(m_ptOffset.y * m_fzoom);
1560 void SetScrollSize(
int cx,
int cy, BOOL bRedraw = TRUE)
1562 SetZoomScrollSize(cx, cy, GetZoom(), bRedraw);
1565 void SetScrollSize(SIZE sizeTrue, BOOL bRedraw = TRUE)
1567 SetZoomScrollSize(sizeTrue, GetZoom(), bRedraw);
1570 void GetScrollSize(SIZE& sizeTrue)
const 1572 sizeTrue = m_sizeTrue;
1575 void SetScrollPage(
int cxPage,
int cyPage)
1577 SetScrollPage(_WTYPES_NS::CSize(cxPage, cyPage));
1580 void SetScrollPage(SIZE sizePage)
1585 void GetScrollPage(SIZE& sizePage)
const 1587 sizePage = m_sizePage * m_fzoom;
1590 void SetScrollLine(
int cxLine,
int cyLine)
1592 SetScrollLine(_WTYPES_NS::CSize(cxLine, cyLine));
1595 void SetScrollLine(SIZE sizeLine)
1600 void GetScrollLine(SIZE& sizeLine)
const 1602 sizeLine = m_sizeLine * m_fzoom;
1606 _WTYPES_NS::CSize GetScrollSize()
1611 _WTYPES_NS::CSize GetScrollPage()
1613 return m_sizePage * m_fzoom;
1616 _WTYPES_NS::CSize GetScrollLine()
1618 return m_sizeLine * m_fzoom;
1621 _WTYPES_NS::CPoint GetScrollOffset()
1623 return (_WTYPES_NS::CSize)m_ptOffset * m_fzoom;
1627 _WTYPES_NS::CPoint WndtoTrue(
CPoint ptW)
1629 return (_WTYPES_NS::CSize)ptW * GetZoom() + GetScrollOffset();
1632 void WndtoTrue(LPPOINT aptW,
int nPts)
1634 for (
int i = 0 ; i < nPts ; i++)
1635 aptW[i] = WndtoTrue(aptW[i]);
1638 void WndtoTrue(LPRECT prectW)
1640 WndtoTrue((LPPOINT)prectW, 2);
1643 _WTYPES_NS::CPoint TruetoWnd(
CPoint ptT)
1645 return (ptT - GetScrollOffset()) / GetZoom();
1648 void TruetoWnd(LPPOINT aptT,
int nPts)
1650 for (
int i = 0 ; i < nPts ; i++)
1651 aptT[i] = TruetoWnd(aptT[i]);
1654 void TruetoWnd(LPRECT prectT)
1656 TruetoWnd((LPPOINT)prectT, 2);
1660 BOOL Draw(HBITMAP hbm, HDC hdestDC, DWORD dwROP = SRCCOPY)
1662 CDC memDC = CreateCompatibleDC(hdestDC);
1664 BOOL bRes = Draw(memDC, hdestDC, dwROP);
1665 memDC.SelectBitmap(bmpOld);
1669 BOOL Draw(HDC hsourceDC, HDC hdestDC, DWORD dwROP = SRCCOPY)
1672 destDC.SetViewportOrg(0,0);
1673 _WTYPES_NS::CPoint ptOffset = GetScrollOffset();
1674 _WTYPES_NS::CSize sizeZClient = m_sizeClient * GetZoom();
1675 return destDC.StretchBlt(0, 0, m_sizeClient.cx, m_sizeClient.cy, hsourceDC, ptOffset.x, ptOffset.y, sizeZClient.cx, sizeZClient.cy, dwROP);
1679 BOOL Draw(IImage* pIImage, HDC hdestDC)
1682 destDC.SetViewportOrg(0,0);
1683 return SUCCEEDED(pIImage->Draw(destDC, _WTYPES_NS::CRect(-_WTYPES_NS::CPoint(m_ptOffset), m_sizeAll), NULL));
1689 MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
1693 LRESULT OnEraseBkgnd(UINT , WPARAM wParam, LPARAM , BOOL& bHandled)
1695 T* pT =
static_cast<T*
>(
this);
1696 ATLASSERT(::IsWindow(pT->m_hWnd));
1697 if ((GetScrollExtendedStyle() & SCRL_ERASEBACKGROUND))
1699 _WTYPES_NS::CRect rect;
1700 pT->GetClientRect(rect);
1701 _WTYPES_NS::CSize sizeClient=rect.Size();
1703 if (m_sizeAll.cx < sizeClient.cx || m_sizeAll.cy < sizeClient.cy)
1706 HBRUSH hbr = GetSysColorBrush((
int)T::GetWndClassInfo().m_wc.hbrBackground - 1);
1708 if (m_sizeAll.cx < sizeClient.cx)
1710 _WTYPES_NS::CRect rectBG(_WTYPES_NS::CPoint(m_sizeAll.cx, 0), sizeClient);
1711 hdc.FillRect(rectBG, hbr);
1714 if (m_sizeAll.cy < sizeClient.cy)
1716 _WTYPES_NS::CRect rectBG(_WTYPES_NS::CPoint(0, m_sizeAll.cy), sizeClient);
1717 hdc.FillRect(rectBG, hbr);
1730 #endif // _WTL_CE_NO_ZOOMSCROLL 1732 #ifndef _WTL_CE_NO_CONTROLS 1736 #if defined(__ATLCTRLX_H__) && defined(WIN32_PLATFORM_PSPC) 1741 template <
class T,
class TBase = ATL::CWindow,
class TWinTraits = ATL::CControlWinTraits>
1742 class ATL_NO_VTABLE CBottomTabViewImpl :
public CTabViewImpl<T, TBase, TWinTraits>
1745 DECLARE_WND_CLASS_EX(NULL, 0, COLOR_APPWORKSPACE)
1748 bool CreateTabControl()
1750 m_tab.Create(m_hWnd, rcDefault, NULL, WS_CHILD | TCS_BOTTOM, 0, m_nTabID);
1752 ATLASSERT(m_tab.m_hWnd != NULL);
1753 if(m_tab.m_hWnd == NULL)
1756 m_tab.SendMessage(CCM_SETVERSION, COMCTL32_VERSION);
1757 m_tab.SetItemExtra(
sizeof(TABVIEWPAGE));
1759 T* pT =
static_cast<T*
>(
this);
1760 m_cyTabHeight = pT->CalcTabHeight();
1767 int nCount = m_tab.GetItemCount();
1768 TCITEMEXTRA tcix = { 0 };
1769 tcix.tciheader.mask = TCIF_TEXT;
1770 tcix.tciheader.pszText = _T(
"NS");
1771 int nIndex = m_tab.InsertItem(nCount, tcix);
1774 SystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0);
1777 m_tab.AdjustRect(FALSE, &rect);
1778 rcWnd.top = rect.bottom;
1779 ::AdjustWindowRectEx(&rcWnd, m_tab.GetStyle(), FALSE, m_tab.GetExStyle());
1780 m_tab.DeleteItem(nIndex);
1782 return rcWnd.bottom - rcWnd.top;
1788 GetClientRect(&rect);
1790 if(m_tab.IsWindow() && ((m_tab.GetStyle() & WS_VISIBLE) != 0))
1791 m_tab.SetWindowPos(NULL, 0, rect.bottom - m_cyTabHeight, rect.right - rect.left, m_cyTabHeight, SWP_NOZORDER );
1793 if(m_nActivePage != -1)
1794 ::SetWindowPos(GetPageHWND(m_nActivePage), NULL, 0, 0, rect.right - rect.left, rect.bottom - m_cyTabHeight, SWP_NOZORDER);
1799 class CBottomTabView :
public CBottomTabViewImpl<CBottomTabView>
1802 DECLARE_WND_CLASS_EX(_T(
"WTL_BottomTabView"), 0, COLOR_APPWORKSPACE)
1805 #endif // defined(__ATLCTRLX_H__) && defined(WIN32_PLATFORM_PSPC) 1827 template <
class TBase>
1828 class CHtmlCtrlT :
public TBase
1832 CHtmlCtrlT(HWND hWnd = NULL) : TBase(hWnd)
1835 CHtmlCtrlT< TBase >& operator =(HWND hWnd)
1841 HWND Create(HWND hWndParent,
ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
1842 DWORD dwStyle = 0, DWORD dwExStyle = 0,
1845 HWND hWnd = TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
1846 ATLASSERT(hWnd != NULL);
1851 static LPCTSTR GetWndClassName()
1856 #if (_WIN32_WCE >= 400) 1857 void AddStyle(LPCWSTR pszStyle)
1859 ATLASSERT(::IsWindow(m_hWnd));
1860 ::SendMessage(m_hWnd, DTM_ADDSTYLE, 0, (LPARAM)pszStyle);
1862 #endif // (_WIN32_WCE >= 400) 1864 void AddText(BOOL bPlainText, LPCSTR pszText)
1866 ATLASSERT(::IsWindow(m_hWnd));
1867 ::SendMessage(m_hWnd, DTM_ADDTEXT, (WPARAM)bPlainText, (LPARAM)pszText);
1870 void AddHTML(LPCSTR pszHTML)
1872 ATLASSERT(::IsWindow(m_hWnd));
1873 ::SendMessage(m_hWnd, DTM_ADDTEXT, (WPARAM)FALSE, (LPARAM)pszHTML);
1876 void AddText(BOOL bPlainText, LPCWSTR pszText)
1878 ATLASSERT(::IsWindow(m_hWnd));
1879 ::SendMessage(m_hWnd, DTM_ADDTEXTW, (WPARAM)bPlainText, (LPARAM)pszText);
1882 void AddHTML(LPCWSTR pszHTML)
1884 ATLASSERT(::IsWindow(m_hWnd));
1885 ::SendMessage(m_hWnd, DTM_ADDTEXTW, (WPARAM)FALSE, (LPARAM)pszHTML);
1888 void Anchor(LPCSTR pszAnchor)
1890 ATLASSERT(::IsWindow(m_hWnd));
1891 ::SendMessage(m_hWnd, DTM_ANCHOR, 0, (LPARAM)pszAnchor);
1894 void Anchor(LPCWSTR pszAnchor)
1896 ATLASSERT(::IsWindow(m_hWnd));
1897 ::SendMessage(m_hWnd, DTM_ANCHORW, 0, (LPARAM)pszAnchor);
1900 #if (_WIN32_WCE >= 420) 1901 void GetBrowserDispatch(IDispatch** ppDispatch)
1903 ATLASSERT(::IsWindow(m_hWnd));
1904 ATLASSERT(ppDispatch);
1905 ATLASSERT(*ppDispatch==NULL);
1906 ::SendMessage(m_hWnd, DTM_BROWSERDISPATCH, 0, (LPARAM)ppDispatch);
1908 void GetDocumentDispatch(IDispatch** ppDispatch)
1910 ATLASSERT(::IsWindow(m_hWnd));
1911 ATLASSERT(ppDispatch);
1912 ATLASSERT(*ppDispatch==NULL);
1913 ::SendMessage(m_hWnd, DTM_DOCUMENTDISPATCH , 0, (LPARAM)ppDispatch);
1915 #endif // (_WIN32_WCE >= 420) 1919 ATLASSERT(::IsWindow(m_hWnd));
1920 ::SendMessage(m_hWnd, DTM_CLEAR, 0, 0L);
1923 void EnableClearType(BOOL bEnable = TRUE)
1925 ATLASSERT(::IsWindow(m_hWnd));
1926 ::SendMessage(m_hWnd, DTM_ENABLECLEARTYPE, 0, (LPARAM)bEnable);
1929 void EnableContextMenu(BOOL bEnable = TRUE)
1931 ATLASSERT(::IsWindow(m_hWnd));
1932 ::SendMessage(m_hWnd, DTM_ENABLECONTEXTMENU, 0, (LPARAM)bEnable);
1935 void EnableScripting(BOOL bEnable = TRUE)
1937 ATLASSERT(::IsWindow(m_hWnd));
1938 ::SendMessage(m_hWnd, DTM_ENABLESCRIPTING, 0, (LPARAM)bEnable);
1941 void EnableShrink(BOOL bEnable = TRUE)
1943 ATLASSERT(::IsWindow(m_hWnd));
1944 ::SendMessage(m_hWnd, DTM_ENABLESHRINK, 0, (LPARAM)bEnable);
1949 ATLASSERT(::IsWindow(m_hWnd));
1950 ::SendMessage(m_hWnd, DTM_ENDOFSOURCE, 0, 0L);
1953 void ImageFail(DWORD dwCookie)
1955 ATLASSERT(::IsWindow(m_hWnd));
1956 ::SendMessage(m_hWnd, DTM_IMAGEFAIL, 0, (LPARAM)dwCookie);
1959 int GetLayoutHeight()
const 1961 ATLASSERT(::IsWindow(m_hWnd));
1962 return (
int)::SendMessage(m_hWnd, DTM_LAYOUTHEIGHT, 0, 0L);
1965 int GetLayoutWidth()
const 1967 ATLASSERT(::IsWindow(m_hWnd));
1968 return (
int)::SendMessage(m_hWnd, DTM_LAYOUTWIDTH, 0, 0L);
1971 void Navigate(LPCTSTR pstrURL, UINT uFlags = 0)
1973 ATLASSERT(::IsWindow(m_hWnd));
1975 ::SendMessage(m_hWnd, DTM_NAVIGATE, (WPARAM)uFlags, (LPARAM)pstrURL);
1980 ATLASSERT(::IsWindow(m_hWnd));
1981 ::SendMessage(m_hWnd, DTM_SELECTALL, 0, 0L);
1984 void SetImage(INLINEIMAGEINFO* pImageInfo)
1986 ATLASSERT(::IsWindow(m_hWnd));
1987 ATLASSERT(pImageInfo);
1988 ::SendMessage(m_hWnd, DTM_SETIMAGE, 0, (LPARAM)pImageInfo);
1991 void ZoomLevel(
int iLevel)
1993 ATLASSERT(::IsWindow(m_hWnd));
1994 ::SendMessage(m_hWnd, DTM_ZOOMLEVEL, 0, (LPARAM)iLevel);
1997 #if (_WIN32_WCE >= 400) 2000 ATLASSERT(::IsWindow(m_hWnd));
2001 ::SendMessage(m_hWnd, DTM_STOP, 0, 0L);
2003 #endif // (_WIN32_WCE >= 400) 2005 void GetScriptDispatch(IDispatch** ppDispatch)
2007 ATLASSERT(::IsWindow(m_hWnd));
2008 ATLASSERT(ppDispatch);
2009 ATLASSERT(*ppDispatch==NULL);
2010 ::SendMessage(m_hWnd, DTM_SCRIPTDISPATCH, 0, (LPARAM)ppDispatch);
2014 typedef CHtmlCtrlT<ATL::CWindow> CHtmlCtrl;
2017 #ifdef WIN32_PLATFORM_PSPC 2022 template <
class TBase>
2023 class CRichInkCtrlT :
public TBase
2027 CRichInkCtrlT(HWND hWnd = NULL) : TBase(hWnd)
2030 CRichInkCtrlT< TBase >& operator =(HWND hWnd)
2036 HWND Create(HWND hWndParent,
ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
2037 DWORD dwStyle = 0, DWORD dwExStyle = 0,
2040 HWND hWnd = TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
2041 ATLASSERT(hWnd != NULL);
2046 static LPCTSTR GetWndClassName()
2051 BOOL CanPaste(UINT uFormat = 0)
const 2053 ATLASSERT(::IsWindow(m_hWnd));
2054 return (BOOL)::SendMessage(m_hWnd, EM_CANPASTE, (WPARAM)uFormat, 0L);
2057 BOOL CanRedo()
const 2059 ATLASSERT(::IsWindow(m_hWnd));
2060 return (BOOL)::SendMessage(m_hWnd, EM_CANREDO, 0, 0L);
2063 BOOL CanUndo()
const 2065 ATLASSERT(::IsWindow(m_hWnd));
2066 return (BOOL)::SendMessage(m_hWnd, EM_CANUNDO, 0, 0L);
2069 void ClearAll(BOOL bRepaint = TRUE)
const 2071 ATLASSERT(::IsWindow(m_hWnd));
2072 ::SendMessage(m_hWnd, EM_CLEARALL, (WPARAM)bRepaint, 0L);
2075 BOOL GetModify()
const 2077 ATLASSERT(::IsWindow(m_hWnd));
2078 return (BOOL)::SendMessage(m_hWnd, EM_GETMODIFY, 0, 0L);
2081 UINT GetPageStyle()
const 2083 ATLASSERT(::IsWindow(m_hWnd));
2084 return (UINT)::SendMessage(m_hWnd, EM_GETPAGESTYLE, 0, 0L);
2087 UINT GetPenMode()
const 2089 ATLASSERT(::IsWindow(m_hWnd));
2090 return (UINT)::SendMessage(m_hWnd, EM_GETPENMODE, 0, 0L);
2093 UINT GetViewStyle()
const 2095 ATLASSERT(::IsWindow(m_hWnd));
2096 return (UINT)::SendMessage(m_hWnd, EM_GETVIEW, 0, 0L);
2099 UINT GetWrapMode()
const 2101 ATLASSERT(::IsWindow(m_hWnd));
2102 return (UINT)::SendMessage(m_hWnd, EM_GETWRAPMODE, 0, 0L);
2105 UINT GetZoomPercent()
const 2107 ATLASSERT(::IsWindow(m_hWnd));
2108 return (UINT)::SendMessage(m_hWnd, EM_GETZOOMPERCENT, 0, 0L);
2111 void InsertLinks(LPWSTR lpString,
int cchLength = -1)
2113 ATLASSERT(::IsWindow(m_hWnd));
2115 cchLength = lstrlen(lpString);
2116 ::SendMessage(m_hWnd, EM_INSERTLINKS, (WPARAM)cchLength, (LPARAM)lpString);
2121 ATLASSERT(::IsWindow(m_hWnd));
2122 ::SendMessage(m_hWnd, EM_REDOEVENT, 0, 0L);
2125 UINT SetInkLayer(UINT uLayer)
2127 ATLASSERT(::IsWindow(m_hWnd));
2128 return (UINT)::SendMessage(m_hWnd, EM_SETINKLAYER, (WPARAM)uLayer, 0L);
2131 void SetPageStyle(UINT uStyle)
2133 ATLASSERT(::IsWindow(m_hWnd));
2134 ::SendMessage(m_hWnd, EM_SETPAGESTYLE, (WPARAM)uStyle, 0L);
2137 void SetPenMode(UINT uMode)
2139 ATLASSERT(::IsWindow(m_hWnd));
2140 ::SendMessage(m_hWnd, EM_SETPENMODE, (WPARAM)uMode, 0L);
2143 void SetViewStyle(UINT uStyle)
2145 ATLASSERT(::IsWindow(m_hWnd));
2146 ::SendMessage(m_hWnd, EM_SETVIEW, (WPARAM)uStyle, 0L);
2149 void SetViewAttributes(VIEWATTRIBUTES* pAttribs)
2151 ATLASSERT(::IsWindow(m_hWnd));
2152 ATLASSERT(pAttribs);
2153 ::SendMessage(m_hWnd, EM_SETVIEWATTRIBUTES, 0, (LPARAM)pAttribs);
2156 void SetWrapMode(UINT uMode)
2158 ATLASSERT(::IsWindow(m_hWnd));
2159 ::SendMessage(m_hWnd, EM_SETWRAPMODE, (WPARAM)uMode, 0L);
2162 void SetZoomPercent(UINT uPercent)
2164 ATLASSERT(::IsWindow(m_hWnd));
2165 ::SendMessage(m_hWnd, EM_SETZOOMPERCENT, (WPARAM)uPercent, 0L);
2168 LONG StreamIn(UINT uFormat, EDITSTREAM& es)
2170 ATLASSERT(::IsWindow(m_hWnd));
2171 return (LONG)::SendMessage(m_hWnd, EM_STREAMIN, (WPARAM)uFormat, (LPARAM)&es);
2174 LONG StreamOut(UINT uFormat, EDITSTREAM& es)
2176 ATLASSERT(::IsWindow(m_hWnd));
2177 return (LONG)::SendMessage(m_hWnd, EM_STREAMOUT, (WPARAM)uFormat, (LPARAM)&es);
2182 ATLASSERT(::IsWindow(m_hWnd));
2183 ::SendMessage(m_hWnd, EM_UNDOEVENT, 0, 0L);
2192 DWORD GetSel()
const 2194 ATLASSERT(::IsWindow(m_hWnd));
2195 ATLASSERT(GetViewStyle() != VT_DRAWINGVIEW);
2196 return (DWORD)::SendMessage(m_hWnd, EM_GETSEL, 0, 0L);
2199 void GetSel(
int& nStartChar,
int& nEndChar)
const 2201 ATLASSERT(::IsWindow(m_hWnd));
2202 ATLASSERT(GetViewStyle() != VT_DRAWINGVIEW);
2203 ::SendMessage(m_hWnd, EM_GETSEL, (WPARAM)&nStartChar, (LPARAM)&nEndChar);
2206 void SetSel(
int nStartChar,
int nEndChar)
2208 ATLASSERT(::IsWindow(m_hWnd));
2209 ATLASSERT(GetViewStyle() != VT_DRAWINGVIEW);
2210 ::SendMessage(m_hWnd, EM_SETSEL, nStartChar, nEndChar);
2213 void ReplaceSel(LPCTSTR lpszNewText, BOOL bCanUndo = FALSE)
2215 ATLASSERT(::IsWindow(m_hWnd));
2216 ATLASSERT(GetViewStyle() != VT_DRAWINGVIEW);
2217 ::SendMessage(m_hWnd, EM_REPLACESEL, (WPARAM)bCanUndo, (LPARAM)lpszNewText);
2220 void SetModify(BOOL bModified = TRUE)
2222 ATLASSERT(::IsWindow(m_hWnd));
2223 ::SendMessage(m_hWnd, EM_SETMODIFY, (WPARAM)bModified, 0L);
2226 int GetTextLength()
const 2228 ATLASSERT(::IsWindow(m_hWnd));
2229 return (
int)::SendMessage(m_hWnd, WM_GETTEXTLENGTH, 0, 0L);
2235 ATLASSERT(::IsWindow(m_hWnd));
2236 ::SendMessage(m_hWnd, WM_CLEAR, 0, 0L);
2241 ATLASSERT(::IsWindow(m_hWnd));
2242 ::SendMessage(m_hWnd, WM_COPY, 0, 0L);
2247 ATLASSERT(::IsWindow(m_hWnd));
2248 ::SendMessage(m_hWnd, WM_CUT, 0, 0L);
2253 ATLASSERT(::IsWindow(m_hWnd));
2254 ::SendMessage(m_hWnd, WM_PASTE, 0, 0L);
2258 typedef CRichInkCtrlT<ATL::CWindow> CRichInkCtrl;
2264 template <
class TBase>
2265 class CInkXCtrlT :
public TBase
2269 CInkXCtrlT(HWND hWnd = NULL) : TBase(hWnd)
2272 CInkXCtrlT< TBase >& operator =(HWND hWnd)
2278 HWND Create(HWND hWndParent,
ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
2279 DWORD dwStyle = 0, DWORD dwExStyle = 0,
2282 HWND hWnd = TBase::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
2283 ATLASSERT(hWnd != NULL);
2288 static LPCTSTR GetWndClassName()
2293 static UINT GetHotRecordingMessage()
2295 return ::RegisterWindowMessage(szHotRecording);
2300 ATLASSERT(::IsWindow(m_hWnd));
2301 ::SendMessage(m_hWnd, IM_CLEARALL, 0, 0L);
2304 int GetData(BYTE* lpBuffer, INT cbBuffer)
const 2306 ATLASSERT(::IsWindow(m_hWnd));
2307 ATLASSERT(lpBuffer);
2308 return (
int)::SendMessage(m_hWnd, IM_GETDATA, (WPARAM)cbBuffer, (LPARAM)lpBuffer);
2311 int GetDataLen()
const 2313 ATLASSERT(::IsWindow(m_hWnd));
2314 return (
int)::SendMessage(m_hWnd, IM_GETDATALEN, 0, 0L);
2317 CRichInkCtrl GetRichInk()
const 2319 ATLASSERT(::IsWindow(m_hWnd));
2320 return (HWND)::SendMessage(m_hWnd, IM_GETRICHINK, 0, 0L);
2323 BOOL IsRecording()
const 2325 ATLASSERT(::IsWindow(m_hWnd));
2326 return (BOOL)::SendMessage(m_hWnd, IM_RECORDING, 0, 0L);
2331 ATLASSERT(::IsWindow(m_hWnd));
2332 ::SendMessage(m_hWnd, IM_REINIT, 0, 0L);
2335 void SetData(
const BYTE* lpInkData, INT cbInkData)
2337 ATLASSERT(::IsWindow(m_hWnd));
2338 ATLASSERT(lpInkData);
2339 ::SendMessage(m_hWnd, IM_SETDATA, (WPARAM)cbInkData, (LPARAM)lpInkData);
2344 ATLASSERT(::IsWindow(m_hWnd));
2345 ::SendMessage(m_hWnd, IM_VOICE_PLAY, 0, 0L);
2348 BOOL IsVoicePlaying()
const 2350 ATLASSERT(::IsWindow(m_hWnd));
2351 return (BOOL)::SendMessage(m_hWnd, IM_VOICE_PLAYING, 0, 0L);
2356 ATLASSERT(::IsWindow(m_hWnd));
2357 return (BOOL)::SendMessage(m_hWnd, IM_VOICE_RECORD, 0, 0L);
2362 ATLASSERT(::IsWindow(m_hWnd));
2363 ::SendMessage(m_hWnd, IM_VOICE_STOP, 0, 0L);
2366 void ShowVoiceBar(BOOL bShow = TRUE)
2368 ATLASSERT(::IsWindow(m_hWnd));
2369 ::SendMessage(m_hWnd, IM_VOICEBAR, (WPARAM)bShow, 0L);
2373 typedef CInkXCtrlT<ATL::CWindow> CInkXCtrl;
2375 #endif // WIN32_PLATFORM_PSPC 2381 template <
class TBase>
2382 class CVoiceRecorderCtrlT :
public TBase
2386 CVoiceRecorderCtrlT(HWND hWnd = NULL) : TBase(hWnd)
2389 CVoiceRecorderCtrlT< TBase >& operator =(HWND hWnd)
2395 HWND Create(HWND hWndParent,
const POINT pt, LPTSTR pstrFileName, UINT nID, DWORD dwStyle = 0)
2397 ATLASSERT(pstrFileName != NULL);
2398 CM_VOICE_RECORDER cmvr = { 0 };
2399 cmvr.cb =
sizeof(CM_VOICE_RECORDER);
2400 cmvr.dwStyle = dwStyle;
2403 cmvr.hwndParent = hWndParent;
2405 cmvr.lpszRecordFileName = pstrFileName;
2406 m_hWnd = VoiceRecorder_Create(&cmvr);
2410 HWND Create(LPCM_VOICE_RECORDER pAttribs)
2412 ATLASSERT(pAttribs);
2413 m_hWnd = VoiceRecorder_Create(pAttribs);
2420 ATLASSERT(::IsWindow(m_hWnd));
2421 ::SendMessage(m_hWnd, VRM_RECORD, 0, 0L);
2426 ATLASSERT(::IsWindow(m_hWnd));
2427 ::SendMessage(m_hWnd, VRM_PLAY, 0, 0L);
2432 ATLASSERT(::IsWindow(m_hWnd));
2433 ::SendMessage(m_hWnd, VRM_STOP, 0, 0L);
2438 ATLASSERT(::IsWindow(m_hWnd));
2439 ::SendMessage(m_hWnd, VRM_CANCEL, 0, 0L);
2444 ATLASSERT(::IsWindow(m_hWnd));
2445 ::SendMessage(m_hWnd, VRM_OK, 0, 0L);
2449 typedef CVoiceRecorderCtrlT<ATL::CWindow> CVoiceRecorderCtrl;
2452 #ifdef WIN32_PLATFORM_PSPC 2457 template <
class TBase>
2458 class CDocListCtrlT :
public TBase
2462 DOCLISTCREATE m_dlc;
2463 TCHAR m_szPath[MAX_PATH];
2466 CDocListCtrlT(HWND hWnd = NULL) : TBase(hWnd)
2469 CDocListCtrlT< TBase >& operator =(HWND hWnd)
2475 HWND Create(HWND hWndParent, WORD wId, LPCTSTR pszFolder = NULL, LPCTSTR pstrFilter = NULL,
2476 WORD wFilterIndex = 0, DWORD dwFlags = DLF_SHOWEXTENSION)
2478 ATLASSERT(pstrFilter != NULL);
2479 ::ZeroMemory(&m_dlc,
sizeof(DOCLISTCREATE));
2480 ::ZeroMemory(m_szPath,
sizeof(m_szPath));
2481 if(pszFolder != NULL)
2482 SecureHelper::strncpy_x(m_szPath, MAX_PATH, pszFolder, MAX_PATH - 1);
2483 m_dlc.dwStructSize =
sizeof(DOCLISTCREATE);
2484 m_dlc.hwndParent = hWndParent;
2485 m_dlc.pszFolder = m_szPath;
2486 m_dlc.pstrFilter = pstrFilter;
2487 m_dlc.wFilterIndex = wFilterIndex;
2489 m_dlc.dwFlags = dwFlags;
2490 m_hWnd = DocList_Create(&m_dlc);
2494 HWND Create(DOCLISTCREATE* pDlc)
2497 m_hWnd = DocList_Create(&m_dlc);
2504 ATLASSERT(::IsWindow(m_hWnd));
2505 ::SendMessage(m_hWnd, DLM_DELETESEL, 0, 0L);
2508 void DisableUpdates()
2510 ATLASSERT(::IsWindow(m_hWnd));
2511 ::SendMessage(m_hWnd, DLM_DISABLEUPDATES, 0, 0L);
2514 void EnableUpdates()
2516 ATLASSERT(::IsWindow(m_hWnd));
2517 ::SendMessage(m_hWnd, DLM_ENABLEUPDATES, 0, 0L);
2520 int GetFilterIndex()
const 2522 ATLASSERT(::IsWindow(m_hWnd));
2523 return (
int)::SendMessage(m_hWnd, DLM_GETFILTERINDEX, 0, 0L);
2526 int GetItemCount()
const 2528 ATLASSERT(::IsWindow(m_hWnd));
2529 return (
int)::SendMessage(m_hWnd, DLM_GETITEMCOUNT, 0, 0L);
2532 int GetNextItem(
int iIndex, DWORD dwRelation = LVNI_ALL)
const 2534 ATLASSERT(::IsWindow(m_hWnd));
2535 return (
int)::SendMessage(m_hWnd, DLM_GETNEXTITEM, (WPARAM)iIndex, (LPARAM)dwRelation);
2538 int GetFirstItem(DWORD dwRelation = LVNI_ALL)
const 2540 ATLASSERT(::IsWindow(m_hWnd));
2541 return (
int)::SendMessage(m_hWnd, DLM_GETNEXTITEM, (WPARAM)-1, (LPARAM)dwRelation);
2544 BOOL GetNextWave(
int* pIndex)
const 2546 ATLASSERT(::IsWindow(m_hWnd));
2548 return (BOOL)::SendMessage(m_hWnd, DLM_GETNEXTWAVE, 0, (LPARAM)pIndex);
2551 BOOL GetPrevWave(
int* pIndex)
const 2553 ATLASSERT(::IsWindow(m_hWnd));
2555 return (BOOL)::SendMessage(m_hWnd, DLM_GETPREVWAVE, 0, (LPARAM)pIndex);
2558 int GetSelCount()
const 2560 ATLASSERT(::IsWindow(m_hWnd));
2561 return (
int)::SendMessage(m_hWnd, DLM_GETSELCOUNT, 0, 0L);
2564 BOOL GetSelPathName(LPTSTR pstrPath,
int cchMax)
const 2566 ATLASSERT(::IsWindow(m_hWnd));
2567 ATLASSERT(pstrPath);
2568 return (BOOL)::SendMessage(m_hWnd, DLM_GETSELPATHNAME, (WPARAM)cchMax, (LPARAM)pstrPath);
2571 void ReceiveIR(LPCTSTR pstrPath)
const 2573 ATLASSERT(::IsWindow(m_hWnd));
2574 ATLASSERT(pstrPath);
2575 ::SendMessage(m_hWnd, DLM_RECEIVEIR, 0, (LPARAM)pstrPath);
2580 ATLASSERT(::IsWindow(m_hWnd));
2581 ::SendMessage(m_hWnd, DLM_REFRESH, 0, 0L);
2584 BOOL RenameMoveSelectedItems()
2586 ATLASSERT(::IsWindow(m_hWnd));
2587 return (BOOL)::SendMessage(m_hWnd, DLM_RENAMEMOVE, 0, 0L);
2592 ATLASSERT(::IsWindow(m_hWnd));
2593 return (
int)::SendMessage(m_hWnd, DLM_SELECTALL, 0, 0L);
2596 HRESULT SelectItem(LPCTSTR pstrPath, BOOL bVisible = TRUE)
2598 ATLASSERT(::IsWindow(m_hWnd));
2599 ATLASSERT(pstrPath);
2600 return (HRESULT)::SendMessage(m_hWnd, DLM_SELECTITEM, (WPARAM)bVisible, (LPARAM)pstrPath);
2603 void SendEMail(LPCTSTR pstrAttachment)
2605 ATLASSERT(::IsWindow(m_hWnd));
2606 ::SendMessage(m_hWnd, DLM_SENDEMAIL, 0, (LPARAM)pstrAttachment);
2609 void SendIR(LPCTSTR pstrPath)
2611 ATLASSERT(::IsWindow(m_hWnd));
2612 ::SendMessage(m_hWnd, DLM_SENDIR, 0, (LPARAM)pstrPath);
2615 HRESULT SetFilterIndex(
int iIndex)
2617 ATLASSERT(::IsWindow(m_hWnd));
2618 return (HRESULT)::SendMessage(m_hWnd, DLM_SETFILTERINDEX, (WPARAM)iIndex, 0L);
2621 void SetFolder(LPCTSTR pstrPath)
2623 ATLASSERT(::IsWindow(m_hWnd));
2624 ATLASSERT(pstrPath);
2625 ::SendMessage(m_hWnd, DLM_SETFOLDER, 0, (LPARAM)pstrPath);
2628 BOOL SetItemState(
int iIndex,
const LVITEM* pItem)
2630 ATLASSERT(::IsWindow(m_hWnd));
2632 return (BOOL)::SendMessage(m_hWnd, DLM_SETITEMSTATE, (WPARAM)iIndex, (LPARAM)pItem);
2635 BOOL SetItemState(
int iIndex, UINT uState, UINT uMask)
2637 ATLASSERT(::IsWindow(m_hWnd));
2638 LV_ITEM lvi = { 0 };
2639 lvi.stateMask = uMask;
2641 return (BOOL)::SendMessage(m_hWnd, DLM_SETITEMSTATE, (WPARAM)iIndex, (LPARAM)&lvi);
2644 void SetOneItem(
int iIndex, LPCVOID pPA)
2646 ATLASSERT(::IsWindow(m_hWnd));
2647 ::SendMessage(m_hWnd, DLM_SETONEITEM, (WPARAM)iIndex, (LPARAM)pPA);
2650 void SetSelect(
int iIndex)
2652 ATLASSERT(::IsWindow(m_hWnd));
2653 ::SendMessage(m_hWnd, DLM_SETSELECT, (WPARAM)iIndex, 0L);
2656 void SetSelPathName(LPCTSTR pstrPath)
2658 ATLASSERT(::IsWindow(m_hWnd));
2659 ATLASSERT(pstrPath);
2660 ::SendMessage(m_hWnd, DLM_SETSELPATHNAME, 0, (LPARAM)pstrPath);
2665 ATLASSERT(::IsWindow(m_hWnd));
2666 return (BOOL)::SendMessage(m_hWnd, DLM_SETSORTORDER, 0, 0L);
2671 ATLASSERT(::IsWindow(m_hWnd));
2672 return (HRESULT)::SendMessage(m_hWnd, DLM_UPDATE, 0, 0L);
2675 BOOL ValidateFolder()
2677 ATLASSERT(::IsWindow(m_hWnd));
2678 return (BOOL)::SendMessage(m_hWnd, DLM_VALIDATEFOLDER, 0, 0L);
2682 BOOL GetFirstSelectedWaveFile(
int* pIndex, LPTSTR szPath,
const size_t cchPath)
2684 ATLASSERT(::IsWindow(m_hWnd));
2685 return DocList_GetFirstSelectedWaveFile(m_hWnd, pIndex, szPath, cchPath);
2688 BOOL GetNextSelectedWaveFile(
int* pIndex, LPTSTR szPath,
const size_t cchPath)
2690 ATLASSERT(::IsWindow(m_hWnd));
2691 return DocList_GetNextSelectedWaveFile(m_hWnd, pIndex, szPath, cchPath);
2695 typedef CDocListCtrlT<ATL::CWindow> CDocListCtrl;
2697 #endif // WIN32_PLATFORM_PSPC 2703 template <
class TBase>
2704 class CCapEditT :
public TBase
2708 CCapEditT(HWND hWnd = NULL) : TBase(hWnd)
2711 CCapEditT< TBase >& operator =(HWND hWnd)
2717 HWND Create(HWND hWndParent,
ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
2718 DWORD dwStyle = 0, DWORD dwExStyle = 0,
2721 HWND hWnd = CWindow::Create(GetWndClassName(), hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
2722 ATLASSERT(hWnd != NULL);
2727 static LPCTSTR GetWndClassName()
2733 typedef CCapEditT<WTL::CEdit> CCapEdit;
2738 #ifndef WIN32_PLATFORM_WFSP // Tooltips not supported on SmartPhone 2740 template <
class TBase>
2741 class CTTStaticT :
public TBase
2745 CTTStaticT(HWND hWnd = NULL) : TBase(hWnd)
2748 CTTStaticT< TBase >& operator =(HWND hWnd)
2754 HWND Create(HWND hWndParent,
ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
2755 DWORD dwStyle = 0, DWORD dwExStyle = 0,
2758 HWND hWnd = TBase::Create(hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
2759 ATLASSERT(hWnd != NULL);
2764 static LPCTSTR GetWndClassName()
2770 BOOL SetToolTipText(LPCTSTR pstrTipText)
2772 ATLASSERT(::IsWindow(m_hWnd));
2773 ATLASSERT(pstrTipText);
2774 ATLASSERT(lstrlen(pstrTipText) <= 253);
2776 int cchLen = lstrlen(pstrTipText) + 3;
2777 LPTSTR pstr = buff.Allocate(cchLen);
2780 SecureHelper::strcpy_x(pstr, cchLen, _T(
"~~"));
2781 SecureHelper::strcat_x(pstr, cchLen, pstrTipText);
2782 return SetWindowText(pstr);
2786 typedef CTTStaticT<WTL::CStatic> CTTStatic;
2792 template <
class TBase>
2793 class CTTButtonT :
public TBase
2797 CTTButtonT(HWND hWnd = NULL) : TBase(hWnd)
2800 CTTButtonT< TBase >& operator =(HWND hWnd)
2806 HWND Create(HWND hWndParent,
ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
2807 DWORD dwStyle = 0, DWORD dwExStyle = 0,
2810 HWND hWnd = TBase::Create(hWndParent, rect.m_lpRect, szWindowName, dwStyle, dwExStyle, MenuOrID.m_hMenu, lpCreateParam);
2811 ATLASSERT(hWnd != NULL);
2816 static LPCTSTR GetWndClassName()
2822 BOOL SetToolTipText(LPCTSTR pstrTipText)
2824 ATLASSERT(::IsWindow(m_hWnd));
2825 ATLASSERT(pstrTipText);
2826 ATLASSERT(lstrlen(pstrTipText) <= 253);
2828 int cchLen = lstrlen(pstrTipText) + 3;
2829 LPTSTR pstr = buff.Allocate(cchLen);
2832 SecureHelper::strcpy_x(pstr, cchLen, _T(
"~~"));
2833 SecureHelper::strcat_x(pstr, cchLen, pstrTipText);
2834 return SetWindowText(pstr);
2838 typedef CTTButtonT<WTL::CButton> CTTButton;
2840 #endif // !WIN32_PLATFORM_WFSP 2845 #ifdef WIN32_PLATFORM_WFSP 2850 template <
class TBase>
2858 CSpinCtrlT< TBase >& operator =(HWND hWnd)
2864 HWND Create(HWND hWndParent, HWND hBuddy, DWORD dwStyle,
int nID, LPCTSTR szExpandedName = NULL)
2866 ATLASSERT(::IsWindow(hWndParent));
2868 ATLASSERT(m_hWnd != NULL);
2871 ATLASSERT(::IsWindow(hBuddy));
2878 typedef CSpinCtrlT<ATL::CWindow> CSpinCtrl;
2884 template <
class TBase,
bool t_bExpandOnly>
2885 class CSpinned :
public TBase
2888 CSpinCtrl m_SpinCtrl;
2889 DWORD m_dwSpinnedStyle;
2892 CSpinned(HWND hWnd = NULL) : TBase(hWnd)
2894 m_dwSpinnedStyle = WS_VISIBLE | UDS_ALIGNRIGHT | UDS_EXPANDABLE;
2896 if (t_bExpandOnly ==
true)
2897 m_dwSpinnedStyle |= UDS_NOSCROLL;
2899 m_dwSpinnedStyle |= UDS_HORZ | UDS_ARROWKEYS | UDS_SETBUDDYINT | UDS_WRAP;
2902 AttachOrCreateSpinCtrl();
2905 CSpinned<TBase, t_bExpandOnly>& operator =(HWND hWnd)
2911 void Attach(HWND hWnd)
2913 ATLASSERT(!IsWindow());
2914 TBase* pT =
static_cast<TBase*
>(
this);
2917 AttachOrCreateSpinCtrl();
2920 HWND Create(HWND hWndParent,
ATL::_U_RECT rect = NULL, LPCTSTR szExpandedName = NULL,
2921 DWORD dwStyle = 0, DWORD dwExStyle = 0,
2925 TBase* pT =
static_cast<TBase*
>(
this);
2926 TBase::Create(hWndParent, rect, NULL, dwStyle, dwExStyle, MenuOrID, lpCreateParam);
2927 ATLASSERT(pT->m_hWnd != NULL);
2929 m_SpinCtrl.Create(hWndParent, pT->m_hWnd, m_dwSpinnedStyle, ATL_IDW_SPIN_ID + (
int)MenuOrID.m_hMenu, szExpandedName);
2931 ATLASSERT(m_SpinCtrl.m_hWnd != NULL);
2937 CSpinCtrl& GetSpinCtrl()
2944 bool AttachOrCreateSpinCtrl()
2946 TBase* pT =
static_cast<TBase*
>(
this);
2948 HWND hSpin = ::GetDlgItem(pT->GetParent(), ATL_IDW_SPIN_ID + pT->GetDlgCtrlID());
2952 m_SpinCtrl.Attach(hSpin);
2954 TCHAR sClassName[16] = { 0 };
2955 ::GetClassName(hSpin, sClassName, 16);
2956 ATLASSERT(!_tcscmp(sClassName, UPDOWN_CLASS));
2957 ATLASSERT(m_SpinCtrl.GetBuddy().m_hWnd == pT->m_hWnd);
2962 m_SpinCtrl.Create(pT->GetParent(), pT->m_hWnd, m_dwSpinnedStyle, ATL_IDW_SPIN_ID + pT->GetDlgCtrlID());
2965 return m_SpinCtrl.m_hWnd != NULL;
2976 typedef CSpinned<CListBox, false> CSpinListBox;
2977 typedef CSpinned<CListBox, true> CExpandListBox;
2978 typedef CSpinned<CEdit, true> CExpandEdit;
2979 typedef CSpinned<CCapEdit, true> CExpandCapEdit;
2981 #endif // WIN32_PLATFORM_WFSP 2983 #endif // _WTL_CE_NO_CONTROLS 2987 #endif // __ATLWINCE_H__ Definition: atlwinx.h:455
Definition: atlwince.h:532
Definition: atlwince.h:1198
Definition: atlctrls.h:6769
Definition: atlwince.h:658
Definition: atlwince.h:1395
Definition: atldlgs.h:3511
Definition: atlwince.h:606
Definition: atlapp.h:1730
Definition: atlframe.h:3178
Definition: atlwince.h:1331
Definition: atlapp.h:1094
Definition: atlwince.h:1339
Definition: atlframe.h:52
Definition: atlwince.h:1250
Definition: atlwince.h:1348
Definition: atlmisc.h:165
Definition: atlwince.h:614
Definition: atlctrlx.h:3743
Definition: atlapp.h:1317
Definition: atlwince.h:1356
Definition: atlwince.h:977
Definition: atlgdi.h:1211
Definition: atlwince.h:486
Definition: atlwince.h:997
Definition: atlwince.h:722
Definition: atlwinx.h:435
Definition: atlwince.h:1292
Definition: atlgdi.h:3364
Definition: atlgdi.h:3409
Definition: atlwince.h:894
Definition: atlwince.h:704
Definition: atlwince.h:234
Definition: atlwince.h:695