📄 atlwince.h
字号:
{
pT->DestroyWindow();
::PostQuitMessage(nVal);
}
else
::EndDialog(pT->m_hWnd, nVal);
}
BEGIN_MSG_MAP(CAppStdDialogImplBase)
MESSAGE_HANDLER(WM_CLOSE, OnSystemClose)
CHAIN_MSG_MAP(TImplBase)
CHAIN_MSG_MAP(CAppDialog< T >)
END_MSG_MAP()
LRESULT OnSystemClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
T* pT = static_cast<T*>(this);
pT->StdCloseDialog(IDCANCEL);
return 0;
}
};
///////////////////////////////////////////////////////////////////////////////
// CAppStdDialogImpl - Implementation of standard application dialog
template <class T, UINT t_shidiFlags = WTL_APP_SHIDIF, bool t_bModal = false>
class ATL_NO_VTABLE CAppStdDialogImpl :
public CAppStdDialogImplBase<T, CStdDialogImpl<T, t_shidiFlags, t_bModal>, t_shidiFlags, t_bModal>
{};
///////////////////////////////////////////////////////////////////////////////
// CAppStdDialogResizeImpl - implementation of orientation resizing standard application dialog
template <class T, UINT t_shidiFlags = WTL_APP_SHIDIF, bool t_bModal = false>
class ATL_NO_VTABLE CAppStdDialogResizeImpl :
public CAppStdDialogImplBase<T, CStdDialogResizeImpl<T, t_shidiFlags, t_bModal>, t_shidiFlags, t_bModal>
{};
#ifndef _ATL_NO_HOSTING
///////////////////////////////////////////////////////////////////////////////
// CAppStdAxDialogImpl - Implementation of standard application AxDialog
template <class T, UINT t_shidiFlags = WTL_APP_SHIDIF, bool t_bModal = false>
class ATL_NO_VTABLE CAppStdAxDialogImpl :
public CAppStdDialogImplBase<T, CStdAxDialogImpl<T, t_shidiFlags, t_bModal>, t_shidiFlags, t_bModal>
{};
///////////////////////////////////////////////////////////////////////////////
// CAppStdAxDialogResizeImpl - implementation of orientation resizing standard application AxDialog
template <class T, UINT t_shidiFlags = WTL_APP_SHIDIF, bool t_bModal = false>
class ATL_NO_VTABLE CAppStdAxDialogResizeImpl :
public CAppStdDialogImplBase<T, CStdAxDialogResizeImpl<T, t_shidiFlags, t_bModal>, t_shidiFlags, t_bModal>
{};
#endif // _ATL_NO_HOSTING
#if defined(_WTL_CE_DRA) && defined(WIN32_PLATFORM_PSPC)
///////////////////////////////////////////////////////////////////////////////
// CAppStdOrientedDialogImpl - implementation of oriented PPC standard application dialog
template <class T, UINT t_shidiFlags = WTL_APP_SHIDIF, bool t_bModal = false>
class ATL_NO_VTABLE CAppStdOrientedDialogImpl :
public CAppStdDialogImplBase<T, CStdOrientedDialogImpl<T, t_shidiFlags, t_bModal>, t_shidiFlags, t_bModal>
{};
#ifndef _ATL_NO_HOSTING
///////////////////////////////////////////////////////////////////////////////
// CAppStdAxOrientedDialogImpl - implementation of oriented PPC standard application AxDialog
template <class T, UINT t_shidiFlags = WTL_APP_SHIDIF, bool t_bModal = false>
class ATL_NO_VTABLE CAppStdAxOrientedDialogImpl :
public CAppStdDialogImplBase<T, CStdAxOrientedDialogImpl<T, t_shidiFlags, t_bModal>, t_shidiFlags, t_bModal>
{};
#endif // _ATL_NO_HOSTING
#endif // defined(_WTL_CE_DRA) && defined(WIN32_PLATFORM_PSPC)
#endif // _WTL_CE_NO_DIALOGS
#endif // _WTL_CE_NO_APPWINDOW
// --- Full screen support ---
#ifndef _WTL_CE_NO_FULLSCREEN
///////////////////////////////////////////////////////////////////////////////
// CFullScreenFrame - full screen frame implementation
template <class T, bool t_bHasSip = true>
class CFullScreenFrame
{
public:
bool m_bFullScreen;
CFullScreenFrame() : m_bFullScreen(false)
{ }
// Operation
void SetFullScreen(bool bFull)
{
m_bFullScreen = bFull;
ShowTaskBar(!bFull, false);
ShowMenuBar(!bFull);
}
// Manage TaskBar for modal dialogs and property sheets
template <class D>
int FSDoModal(D& dlg)
{
T* pT = static_cast<T*>(this);
pT; // avoid level 4 warning
ATLASSERT(pT->IsWindow());
if (m_bFullScreen) // Show taskbar if hidden
ShowTaskBar(true, false);
int iRet = dlg.DoModal();
if (m_bFullScreen) // Hide taskbar if restored
ShowTaskBar(false);
return iRet;
}
// Implementation
void ShowMenuBar(bool bShow)
{
T* pT = static_cast<T*>(this);
ATLASSERT(pT->IsWindow());
ATL::CWindow MenuBar = pT->m_hWndCECommandBar;
ATLASSERT(MenuBar.IsWindow());
MenuBar.ShowWindow(bShow ? SW_SHOWNORMAL : SW_HIDE);
pT->SizeToMenuBar();
}
void ShowTaskBar(bool bShow, bool bRepaint = true)
{
T* pT = static_cast<T*>(this);
ATLASSERT(pT->IsWindow());
RECT rect = { 0 };
SystemParametersInfo(SPI_GETWORKAREA, NULL, &rect, FALSE);
if (!bShow)
rect.top = 0;
#ifdef WIN32_PLATFORM_PSPC // Pocket PC code
UINT uShow = t_bHasSip ? SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON : SHFS_SHOWTASKBAR | SHFS_HIDESIPBUTTON;
SHFullScreen(pT->m_hWnd, bShow ? uShow : SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON);
#elif _WIN32_WCE > 0x500 // Smartphone 2005 code
SHFullScreen(pT->m_hWnd, bShow ? SHFS_SHOWTASKBAR : SHFS_HIDETASKBAR);
#else // Smartphone 2003
HWND hTaskBar = FindWindow(_T("tray"), NULL);
ATLASSERT(::IsWindow(hTaskBar));
::ShowWindow(hTaskBar, bShow ? SW_SHOW : SW_HIDE);
#endif // WIN32_PLATFORM_PSPC
pT->MoveWindow(&rect, bRepaint);
}
// Message map and handler
BEGIN_MSG_MAP(CFullScreenFrame)
MESSAGE_HANDLER(WM_SETTINGCHANGE, OnSettingChange)
MESSAGE_HANDLER(WM_ACTIVATE, OnActivate)
END_MSG_MAP()
LRESULT OnSettingChange(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
{
#ifndef SETTINGCHANGE_RESET // not defined for PPC 2002
#define SETTINGCHANGE_RESET SPI_SETWORKAREA
#endif
if (m_bFullScreen && (wParam & SETTINGCHANGE_RESET))
SetFullScreen(m_bFullScreen);
return bHandled = FALSE;
}
LRESULT OnActivate(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
{
if (m_bFullScreen)
{
ShowTaskBar(!wParam);
ShowMenuBar(!wParam);
}
return bHandled = FALSE;
}
};
#endif // _WTL_CE_NO_FULLSCREEN
// --- WinCE zoom support ---
#ifndef _WTL_CE_NO_ZOOMSCROLL
///////////////////////////////////////////////////////////////////////////////
// CZoomScrollImpl - WinCE zooming implementation on top of CScrollImpl
template <class T>
class CZoomScrollImpl: public CScrollImpl< T >
{
public:
// Data members
_WTYPES_NS::CSize m_sizeTrue;
double m_fzoom;
// Creation
CZoomScrollImpl() : m_sizeTrue(0), m_fzoom(1.)
{ }
// Zoom operations and access
void SetZoomScrollSize(_WTYPES_NS::CSize sizeTrue, double fzoom = 1., BOOL bRedraw = TRUE)
{
ATLASSERT(fzoom > 0.);
m_sizeTrue = sizeTrue;
m_fzoom = fzoom;
CScrollImpl< T >::SetScrollSize(sizeTrue / fzoom, bRedraw);
}
void SetZoomScrollSize(int cx, int cy, double fzoom=1., BOOL bRedraw = TRUE)
{
SetZoomScrollSize(_WTYPES_NS::CSize(cx, cy), fzoom, bRedraw);
}
void SetZoom(double fzoom, BOOL bRedraw = TRUE)
{
_WTYPES_NS::CPoint ptCenter = WndtoTrue(m_sizeClient / 2);
_WTYPES_NS::CSize sizePage = GetScrollPage();
_WTYPES_NS::CSize sizeLine = GetScrollLine();
SetZoomScrollSize(GetScrollSize(), fzoom, bRedraw);
SetScrollLine(sizeLine);
SetScrollPage(sizePage);
_WTYPES_NS::CPoint ptOffset = ptCenter - (m_sizeClient / 2) * fzoom;
SetScrollOffset(ptOffset, bRedraw);
}
double GetZoom()
{
return m_fzoom;
}
// CScrollImpl overrides
void SetScrollOffset(int x, int y, BOOL bRedraw = TRUE)
{
CScrollImpl< T >::SetScrollOffset((int)(x / m_fzoom), (int)(y / m_fzoom), bRedraw);
}
void SetScrollOffset(POINT ptOffset, BOOL bRedraw = TRUE)
{
SetScrollOffset(ptOffset.x, ptOffset.y, bRedraw);
}
void GetScrollOffset(POINT& ptOffset)
{
ptOffset.x = (LONG)(m_ptOffset.x * m_fzoom);
ptOffset.y = (LONG)(m_ptOffset.y * m_fzoom);
}
void SetScrollSize(int cx, int cy, BOOL bRedraw = TRUE)
{
SetZoomScrollSize(cx, cy, GetZoom(), bRedraw);
}
void SetScrollSize(SIZE sizeTrue, BOOL bRedraw = TRUE)
{
SetZoomScrollSize(sizeTrue, GetZoom(), bRedraw);
}
void GetScrollSize(SIZE& sizeTrue) const
{
sizeTrue = m_sizeTrue;
}
void SetScrollPage(int cxPage, int cyPage)
{
SetScrollPage(_WTYPES_NS::CSize(cxPage, cyPage));
}
void SetScrollPage(SIZE sizePage)
{
CScrollImpl< T >::SetScrollPage(sizePage / m_fzoom);
}
void GetScrollPage(SIZE& sizePage) const
{
sizePage = m_sizePage * m_fzoom;
}
void SetScrollLine(int cxLine, int cyLine)
{
SetScrollLine(_WTYPES_NS::CSize(cxLine, cyLine));
}
void SetScrollLine(SIZE sizeLine)
{
CScrollImpl< T >::SetScrollLine(sizeLine / m_fzoom);
}
void GetScrollLine(SIZE& sizeLine) const
{
sizeLine = m_sizeLine * m_fzoom;
}
// Data access complements
_WTYPES_NS::CSize GetScrollSize()
{
return m_sizeTrue;
}
_WTYPES_NS::CSize GetScrollPage()
{
return m_sizePage * m_fzoom;
}
_WTYPES_NS::CSize GetScrollLine()
{
return m_sizeLine * m_fzoom;
}
_WTYPES_NS::CPoint GetScrollOffset()
{
return (_WTYPES_NS::CSize)m_ptOffset * m_fzoom;
}
// Helper coordinate functions
_WTYPES_NS::CPoint WndtoTrue(CPoint ptW)
{
return (_WTYPES_NS::CSize)ptW * GetZoom() + GetScrollOffset();
}
void WndtoTrue(LPPOINT aptW, int nPts) // in place coord transformation
{
for (int i = 0 ; i < nPts ; i++)
aptW[i] = WndtoTrue(aptW[i]);
}
void WndtoTrue(LPRECT prectW) // in place coord transformation
{
WndtoTrue((LPPOINT)prectW, 2);
}
_WTYPES_NS::CPoint TruetoWnd(CPoint ptT)
{
return (ptT - GetScrollOffset()) / GetZoom();
}
void TruetoWnd(LPPOINT aptT, int nPts) // in place coord transformation
{
for (int i = 0 ; i < nPts ; i++)
aptT[i] = TruetoWnd(aptT[i]);
}
void TruetoWnd(LPRECT prectT) // in place coord transformation
{
TruetoWnd((LPPOINT)prectT, 2);
}
// Drawing operations : assume adequate setting of data members
BOOL Draw(HBITMAP hbm, HDC hdestDC, DWORD dwROP = SRCCOPY)
{
CDC memDC = CreateCompatibleDC(hdestDC);
CBitmapHandle bmpOld = memDC.SelectBitmap(hbm);
BOOL bRes = Draw(memDC, hdestDC, dwROP);
memDC.SelectBitmap(bmpOld);
return bRes;
}
BOOL Draw(HDC hsourceDC, HDC hdestDC, DWORD dwROP = SRCCOPY)
{
CDCHandle destDC = hdestDC;
destDC.SetViewportOrg(0,0);
_WTYPES_NS::CPoint ptOffset = GetScrollOffset();
_WTYPES_NS::CSize sizeZClient = m_sizeClient * GetZoom();
return destDC.StretchBlt(0, 0, m_sizeClient.cx, m_sizeClient.cy, hsourceDC, ptOffset.x, ptOffset.y, sizeZClient.cx, sizeZClient.cy, dwROP);
}
#ifdef _IMAGING_H
BOOL Draw(IImage* pIImage, HDC hdestDC)
{
CDCHandle destDC = hdestDC;
destDC.SetViewportOrg(0,0);
return SUCCEEDED(pIImage->Draw(destDC, _WTYPES_NS::CRect(-_WTYPES_NS::CPoint(m_ptOffset), m_sizeAll), NULL));
}
#endif
// Message map and handlers
BEGIN_MSG_MAP(CZoomScrollImpl< T >)
MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
CHAIN_MSG_MAP(CScrollImpl< T >)
END_MSG_MAP()
LRESULT OnEraseBkgnd(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
{
T* pT = static_cast<T*>(this);
ATLASSERT(::IsWindow(pT->m_hWnd));
if ((GetScrollExtendedStyle() & SCRL_ERASEBACKGROUND))
{
_WTYPES_NS::CRect rect;
pT->GetClientRect(rect);
_WTYPES_NS::CSize sizeClient=rect.Size();
if (m_sizeAll.cx < sizeClient.cx || m_sizeAll.cy < sizeClient.cy)
{
CDCHandle hdc = (HDC)wParam;
HBRUSH hbr = GetSysColorBrush((int)T::GetWndClassInfo().m_wc.hbrBackground - 1);
if (m_sizeAll.cx < sizeClient.cx)
{
_WTYPES_NS::CRect rectBG(_WTYPES_NS::CPoint(m_sizeAll.cx, 0), sizeClient);
hdc.FillRect(rectBG, hbr);
}
if (m_sizeAll.cy < sizeClient.cy)
{
_WTYPES_NS::CRect rectBG(_WTYPES_NS::CPoint(0, m_sizeAll.cy), sizeClient);
hdc.FillRect(rectBG, hbr);
}
}
}
else
{
bHandled = FALSE;
}
return 1;
}
};
#endif // _WTL_CE_NO_ZOOMSCROLL
#ifndef _WTL_CE_NO_CONTROLS
// --- PPC bottom TabView control ---
#if defined(__ATLCTRLX_H__) && defined(WIN32_PLATFORM_PSPC)
///////////////////////////////////////////////////////////////////////////////
// CBottomTabViewImpl
template <class T, class TBase = ATL::CWindow, class TWinTraits = ATL::CControlWinTraits>
class ATL_NO_VTABLE CBottomTabViewImpl : public CTabViewImpl<T, TBase, TWinTraits>
{
public:
DECLARE_WND_CLASS_EX(NULL, 0, COLOR_APPWORKSPACE)
// Implementation overrideables
bool CreateTabControl()
{
m_tab.Create(m_hWnd, rcDefault, NULL, WS_CHILD | TCS_BOTTOM, 0, m_nTabID);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -