?? atldlgs.h
字號:
};
#endif //(WINVER >= 0x0500)
/////////////////////////////////////////////////////////////////////////////
// CPageSetupDialogImpl - Page Setup dialog
template <class T>
class ATL_NO_VTABLE CPageSetupDialogImpl : public CCommonDialogImplBase
{
public:
PAGESETUPDLG m_psd;
CWndProcThunk m_thunkPaint;
// Constructors
CPageSetupDialogImpl(DWORD dwFlags = PSD_MARGINS | PSD_INWININIINTLMEASURE, HWND hWndParent = NULL)
{
memset(&m_psd, 0, sizeof(m_psd));
m_psd.lStructSize = sizeof(m_psd);
m_psd.hwndOwner = hWndParent;
m_psd.Flags = (dwFlags | PSD_ENABLEPAGESETUPHOOK | PSD_ENABLEPAGEPAINTHOOK);
m_psd.lpfnPageSetupHook = (LPPAGESETUPHOOK)T::HookProc;
m_thunkPaint.Init((WNDPROC)T::PaintHookProc, this);
#if (_ATL_VER >= 0x0700)
m_psd.lpfnPagePaintHook = (LPPAGEPAINTHOOK)m_thunkPaint.GetWNDPROC();
#else
m_psd.lpfnPagePaintHook = (LPPAGEPAINTHOOK)&(m_thunkPaint.thunk);
#endif
}
DECLARE_EMPTY_MSG_MAP()
// Attributes
LPDEVMODE GetDevMode() const // return DEVMODE
{
if(m_psd.hDevMode == NULL)
return NULL;
return (LPDEVMODE)::GlobalLock(m_psd.hDevMode);
}
LPCTSTR GetDriverName() const // return driver name
{
if(m_psd.hDevNames == NULL)
return NULL;
LPDEVNAMES lpDev = (LPDEVNAMES)::GlobalLock(m_psd.hDevNames);
return (LPCTSTR)lpDev + lpDev->wDriverOffset;
}
LPCTSTR GetDeviceName() const // return device name
{
if(m_psd.hDevNames == NULL)
return NULL;
LPDEVNAMES lpDev = (LPDEVNAMES)::GlobalLock(m_psd.hDevNames);
return (LPCTSTR)lpDev + lpDev->wDeviceOffset;
}
LPCTSTR GetPortName() const // return output port name
{
if(m_psd.hDevNames == NULL)
return NULL;
LPDEVNAMES lpDev = (LPDEVNAMES)::GlobalLock(m_psd.hDevNames);
return (LPCTSTR)lpDev + lpDev->wOutputOffset;
}
HDC CreatePrinterDC()
{
return _AtlCreateDC(m_psd.hDevNames, m_psd.hDevMode);
}
SIZE GetPaperSize() const
{
SIZE size;
size.cx = m_psd.ptPaperSize.x;
size.cy = m_psd.ptPaperSize.y;
return size;
}
void GetMargins(LPRECT lpRectMargins, LPRECT lpRectMinMargins) const
{
if(lpRectMargins != NULL)
memcpy(lpRectMargins, &m_psd.rtMargin, sizeof(RECT));
if(lpRectMinMargins != NULL)
memcpy(lpRectMinMargins, &m_psd.rtMinMargin, sizeof(RECT));
}
// Operations
INT_PTR DoModal(HWND hWndParent = ::GetActiveWindow())
{
ATLASSERT(m_psd.Flags & PSD_ENABLEPAGESETUPHOOK);
ATLASSERT(m_psd.Flags & PSD_ENABLEPAGEPAINTHOOK);
ATLASSERT(m_psd.lpfnPageSetupHook != NULL); // can still be a user hook
ATLASSERT(m_psd.lpfnPagePaintHook != NULL); // can still be a user hook
if(m_psd.hwndOwner == NULL) // set only if not specified before
m_psd.hwndOwner = hWndParent;
ATLASSERT(m_hWnd == NULL);
_Module.AddCreateWndData(&m_thunk.cd, (CCommonDialogImplBase*)this);
BOOL bRet = ::PageSetupDlg(&m_psd);
m_hWnd = NULL;
return bRet ? IDOK : IDCANCEL;
}
// Implementation
static UINT CALLBACK PaintHookProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
CPageSetupDialogImpl< T >* pDlg = (CPageSetupDialogImpl< T >*)hWnd;
ATLASSERT(pDlg->m_hWnd == ::GetParent(hWnd));
UINT uRet = 0;
switch(uMsg)
{
case WM_PSD_PAGESETUPDLG:
uRet = pDlg->PreDrawPage(LOWORD(wParam), HIWORD(wParam), (LPPAGESETUPDLG)lParam);
break;
case WM_PSD_FULLPAGERECT:
case WM_PSD_MINMARGINRECT:
case WM_PSD_MARGINRECT:
case WM_PSD_GREEKTEXTRECT:
case WM_PSD_ENVSTAMPRECT:
case WM_PSD_YAFULLPAGERECT:
uRet = pDlg->OnDrawPage(uMsg, (HDC)wParam, (LPRECT)lParam);
break;
default:
ATLTRACE2(atlTraceUI, 0, _T("CPageSetupDialogImpl::PaintHookProc - unknown message received\n"));
break;
}
return uRet;
}
// Overridables
UINT PreDrawPage(WORD /*wPaper*/, WORD /*wFlags*/, LPPAGESETUPDLG /*pPSD*/)
{
// return 1 to prevent any more drawing
return 0;
}
UINT OnDrawPage(UINT /*uMsg*/, HDC /*hDC*/, LPRECT /*lpRect*/)
{
return 0; // do the default
}
};
class CPageSetupDialog : public CPageSetupDialogImpl<CPageSetupDialog>
{
public:
CPageSetupDialog(DWORD dwFlags = PSD_MARGINS | PSD_INWININIINTLMEASURE, HWND hWndParent = NULL)
: CPageSetupDialogImpl<CPageSetupDialog>(dwFlags, hWndParent)
{ }
// override PaintHookProc and references to handlers
static UINT CALLBACK PaintHookProc(HWND, UINT, WPARAM, LPARAM)
{
return 0;
}
};
/////////////////////////////////////////////////////////////////////////////
// CFindReplaceDialogImpl - Find/FindReplace modeless dialogs
template <class T>
class ATL_NO_VTABLE CFindReplaceDialogImpl : public CCommonDialogImplBase
{
public:
FINDREPLACE m_fr;
TCHAR m_szFindWhat[128];
TCHAR m_szReplaceWith[128];
// Constructors
CFindReplaceDialogImpl()
{
memset(&m_fr, 0, sizeof(m_fr));
m_szFindWhat[0] = '\0';
m_szReplaceWith[0] = '\0';
m_fr.lStructSize = sizeof(m_fr);
m_fr.Flags = FR_ENABLEHOOK;
m_fr.lpfnHook = (LPFRHOOKPROC)T::HookProc;
m_fr.lpstrFindWhat = (LPTSTR)m_szFindWhat;
}
// Note: You must allocate the object on the heap.
// If you do not, you must override OnFinalMessage()
virtual void OnFinalMessage(HWND /*hWnd*/)
{
delete this;
}
HWND Create(BOOL bFindDialogOnly, // TRUE for Find, FALSE for FindReplace
LPCTSTR lpszFindWhat,
LPCTSTR lpszReplaceWith = NULL,
DWORD dwFlags = FR_DOWN,
HWND hWndParent = NULL)
{
ATLASSERT(m_fr.Flags & FR_ENABLEHOOK);
ATLASSERT(m_fr.lpfnHook != NULL);
m_fr.wFindWhatLen = sizeof(m_szFindWhat)/sizeof(TCHAR);
m_fr.lpstrReplaceWith = (LPTSTR)m_szReplaceWith;
m_fr.wReplaceWithLen = sizeof(m_szReplaceWith)/sizeof(TCHAR);
m_fr.Flags |= dwFlags;
if(hWndParent == NULL)
m_fr.hwndOwner = ::GetActiveWindow();
else
m_fr.hwndOwner = hWndParent;
ATLASSERT(m_fr.hwndOwner != NULL); // must have an owner for modeless dialog
if(lpszFindWhat != NULL)
lstrcpyn(m_szFindWhat, lpszFindWhat, sizeof(m_szFindWhat)/sizeof(TCHAR));
if(lpszReplaceWith != NULL)
lstrcpyn(m_szReplaceWith, lpszReplaceWith, sizeof(m_szReplaceWith)/sizeof(TCHAR));
ATLASSERT(m_hWnd == NULL);
_Module.AddCreateWndData(&m_thunk.cd, (CCommonDialogImplBase*)this);
HWND hWnd;
if(bFindDialogOnly)
hWnd = ::FindText(&m_fr);
else
hWnd = ::ReplaceText(&m_fr);
ATLASSERT(m_hWnd == hWnd);
return hWnd;
}
static const UINT GetFindReplaceMsg()
{
static const UINT nMsgFindReplace = ::RegisterWindowMessage(FINDMSGSTRING);
return nMsgFindReplace;
}
// call while handling FINDMSGSTRING registered message
// to retreive the object
static T* PASCAL GetNotifier(LPARAM lParam)
{
ATLASSERT(lParam != NULL);
T* pDlg = (T*)(lParam - offsetof(T, m_fr));
return pDlg;
}
// Operations
// Helpers for parsing information after successful return
LPCTSTR GetFindString() const // get find string
{
return (LPCTSTR)m_fr.lpstrFindWhat;
}
LPCTSTR GetReplaceString() const // get replacement string
{
return (LPCTSTR)m_fr.lpstrReplaceWith;
}
BOOL SearchDown() const // TRUE if search down, FALSE is up
{
return (m_fr.Flags & FR_DOWN) ? TRUE : FALSE;
}
BOOL FindNext() const // TRUE if command is find next
{
return (m_fr.Flags & FR_FINDNEXT) ? TRUE : FALSE;
}
BOOL MatchCase() const // TRUE if matching case
{
return (m_fr.Flags & FR_MATCHCASE) ? TRUE : FALSE;
}
BOOL MatchWholeWord() const // TRUE if matching whole words only
{
return (m_fr.Flags & FR_WHOLEWORD) ? TRUE : FALSE;
}
BOOL ReplaceCurrent() const // TRUE if replacing current string
{
return (m_fr. Flags & FR_REPLACE) ? TRUE : FALSE;
}
BOOL ReplaceAll() const // TRUE if replacing all occurrences
{
return (m_fr.Flags & FR_REPLACEALL) ? TRUE : FALSE;
}
BOOL IsTerminating() const // TRUE if terminating dialog
{
return (m_fr.Flags & FR_DIALOGTERM) ? TRUE : FALSE ;
}
};
class CFindReplaceDialog : public CFindReplaceDialogImpl<CFindReplaceDialog>
{
public:
DECLARE_EMPTY_MSG_MAP()
};
/////////////////////////////////////////////////////////////////////////////
// CPropertySheetWindow - client side for a property sheet
class CPropertySheetWindow : public CWindow
{
public:
// Constructors
CPropertySheetWindow(HWND hWnd = NULL) : CWindow(hWnd) { }
CPropertySheetWindow& operator=(HWND hWnd)
{
m_hWnd = hWnd;
return *this;
}
// Attributes
int GetPageCount() const
{
ATLASSERT(::IsWindow(m_hWnd));
HWND hWndTabCtrl = GetTabControl();
ATLASSERT(hWndTabCtrl != NULL);
return (int)::SendMessage(hWndTabCtrl, TCM_GETITEMCOUNT, 0, 0L);
}
HWND GetActivePage() const
{
ATLASSERT(::IsWindow(m_hWnd));
return (HWND)::SendMessage(m_hWnd, PSM_GETCURRENTPAGEHWND, 0, 0L);
}
int GetActiveIndex() const
{
ATLASSERT(::IsWindow(m_hWnd));
HWND hWndTabCtrl = GetTabControl();
ATLASSERT(hWndTabCtrl != NULL);
return (int)::SendMessage(hWndTabCtrl, TCM_GETCURSEL, 0, 0L);
}
BOOL SetActivePage(int nPageIndex)
{
ATLASSERT(::IsWindow(m_hWnd));
return (BOOL)::SendMessage(m_hWnd, PSM_SETCURSEL, nPageIndex, 0L);
}
BOOL SetActivePage(HPROPSHEETPAGE hPage)
{
ATLASSERT(::IsWindow(m_hWnd));
ATLASSERT(hPage != NULL);
return (BOOL)::SendMessage(m_hWnd, PSM_SETCURSEL, 0, (LPARAM)hPage);
}
BOOL SetActivePageByID(int nPageID)
{
ATLASSERT(::IsWindow(m_hWnd));
return (BOOL)::SendMessage(m_hWnd, PSM_SETCURSELID, 0, nPageID);
}
void SetTitle(LPCTSTR lpszText, UINT nStyle = 0)
{
ATLASSERT(::IsWindow(m_hWnd));
ATLASSERT((nStyle & ~PSH_PROPTITLE) == 0); // only PSH_PROPTITLE is valid
ATLASSERT(lpszText != NULL);
::SendMessage(m_hWnd, PSM_SETTITLE, nStyle, (LPARAM)lpszText);
}
HWND GetTabControl() const
{
ATLASSERT(::IsWindow(m_hWnd));
return (HWND)::SendMessage(m_hWnd, PSM_GETTABCONTROL, 0, 0L);
}
void SetFinishText(LPCTSTR lpszText)
{
ATLASSERT(::IsWindow(m_hWnd));
::SendMessage(m_hWnd, PSM_SETFINISHTEXT, 0, (LPARAM)lpszText);
}
void SetWizardButtons(DWORD dwFlags)
{
ATLASSERT(::IsWindow(m_hWnd));
::PostMessage(m_hWnd, PSM_SETWIZBUTTONS, 0, dwFlags);
}
// Operations
void AddPage(HPROPSHEETPAGE hPage)
{
ATLASSERT(::IsWindow(m_hWnd));
ATLASSERT(hPage != NULL);
::SendMessage(m_hWnd, PSM_ADDPAGE, 0, (LPARAM)hPage);
}
BOOL AddPage(LPCPROPSHEETPAGE pPage)
{
ATLASSERT(::IsWindow(m_hWnd));
ATLASSERT(pPage != NULL);
HPROPSHEETPAGE hPage = ::CreatePropertySheetPage(pPage);
if(hPage == NULL)
return FALSE;
::SendMessage(m_hWnd, PSM_ADDPAGE, 0, (LPARAM)hPage);
return TRUE;
}
void RemovePage(int nPageIndex)
{
ATLASSERT(::IsWindow(m_hWnd));
::SendMessage(m_hWnd, PSM_REMOVEPAGE, nPageIndex, 0L);
}
void RemovePage(HPROPSHEETPAGE hPage)
{
ATLASSERT(::IsWindow(m_hWnd));
ATLASSERT(hPage != NULL);
::SendMessage(m_hWnd, PSM_REMOVEPAGE, 0, (LPARAM)hPage);
}
BOOL PressButton(int nButton)
{
ATLASSERT(::IsWindow(m_hWnd));
return (BOOL)::SendMessage(m_hWnd, PSM_PRESSBUTTON, nButton, 0L);
}
BOOL Apply()
{
ATLASSERT(::IsWindow(m_hWnd));
return (BOOL)::SendMessage(m_hWnd, PSM_APPLY, 0, 0L);
}
void CancelToClose()
{
ATLASSERT(::IsWindow(m_hWnd));
::SendMessage(m_hWnd, PSM_CANCELTOCLOSE, 0, 0L);
}
void SetModified(HWND hWndPage, BOOL bChanged = TRUE)
{
ATLASSERT(::IsWindow(m_hWnd));
ATLASSERT(::IsWindow(hWndPage));
UINT uMsg = bChanged ? PSM_CHANGED : PSM_UNCHANGED;
::SendMessage(m_hWnd, uMsg, (WPARAM)hWndPage, 0L);
}
LRESULT QuerySiblings(WPARAM wParam, LPARAM lParam)
{
ATLASSERT(::IsWindow(m_hWnd));
return ::SendMessage(m_hWnd, PSM_QUERYSIBLINGS, wParam, lParam);
}
void RebootSystem()
{
ATLASSERT(::IsWindow(m_hWnd));
::SendMessage(m_hWnd, PSM_REBOOTSYSTEM, 0, 0L);
}
void RestartWindows()
{
ATLASSERT(::IsWindow(m_hWnd));
::SendMessage(m_hWnd, PSM_RESTARTWINDOWS, 0, 0L);
}
BOOL IsDialogMessage(LPMSG lpMsg)
{
ATLASSERT(::IsWindow(m_hWnd));
return (BOOL)::SendMessage(m_hWnd, PSM_ISDIALOGMESSAGE, 0, (LPARAM)lpMsg);
}
#if (_WIN32_IE >= 0x0500)
int HwndToIndex(HWND hWnd) const
{
ATLASSERT(::IsWindow(m_hWnd));
return (int)::SendMessage(m_hWnd, PSM_HWNDTOINDEX, (WPARAM)hWnd, 0L);
}
HWND IndexToHwnd(int nIndex) const
{
ATLASSERT(::IsWindow(m_hWnd));
return (HWND)::SendMessage(m_hWnd, PSM_INDEXTOHWND, nIndex, 0L);
}
int PageToIndex(HPROPSHEETPAGE hPage) const
{
ATLASSERT(::IsWindow(m_hWnd));
return (int)::SendMessage(m_hWnd, PSM_PAGETOINDEX, 0, (LPARAM)hPage);
}
HPROPSHEETPAGE IndexToPage(int nIndex) const
{
ATLASSERT(::IsWindow(m_hWnd));
return (HPROPSHEETPAGE)::SendMessage(m_hWnd, PSM_INDEXTOPAGE, nIndex, 0L);
}
int IdToIndex(int nID) const
{
ATLASSERT(::IsWindow(m_hWnd));
return (int)::SendMessage(m_hWnd, PSM_IDTOINDEX, 0, nID);
}
int IndexToId(int nIndex) const
{
ATLASSERT(::IsWindow(m_hWnd));
return (int)::SendMessage(m_hWnd, PSM_INDEXTOID, nIndex, 0L);
}
int GetResult() const
{
ATLASSERT(::IsWindow(m_hWnd));
return (int)::SendMessage(m_hWnd, PSM_GETRESULT, 0, 0L);
}
BOOL RecalcPageSizes()
{
ATLASSERT(::IsWindow(m_hWnd));
return (BOOL)::SendMessage(m_hWnd, PSM_RECALCPAGESIZES, 0, 0L);
}
#endif //(_WIN32_IE >= 0x0500)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -