📄 atldlgs.h
字号:
}
BOOL ReplaceCurrent() const // TRUE if replacing current string
{
return ((m_fr. Flags & FR_REPLACE) != 0) ? TRUE : FALSE;
}
BOOL ReplaceAll() const // TRUE if replacing all occurrences
{
return ((m_fr.Flags & FR_REPLACEALL) != 0) ? TRUE : FALSE;
}
BOOL IsTerminating() const // TRUE if terminating dialog
{
return ((m_fr.Flags & FR_DIALOGTERM) != 0) ? TRUE : FALSE ;
}
};
class CFindReplaceDialog : public CFindReplaceDialogImpl<CFindReplaceDialog>
{
public:
DECLARE_EMPTY_MSG_MAP()
};
#endif // !_WIN32_WCE
///////////////////////////////////////////////////////////////////////////////
// CPropertySheetWindow - client side for a property sheet
class CPropertySheetWindow : public ATL::CWindow
{
public:
// Constructors
CPropertySheetWindow(HWND hWnd = NULL) : ATL::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
BOOL AddPage(HPROPSHEETPAGE hPage)
{
ATLASSERT(::IsWindow(m_hWnd));
ATLASSERT(hPage != NULL);
return (BOOL)::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;
return (BOOL)::SendMessage(m_hWnd, PSM_ADDPAGE, 0, (LPARAM)hPage);
}
#ifndef _WIN32_WCE
BOOL InsertPage(int nNewPageIndex, HPROPSHEETPAGE hPage)
{
ATLASSERT(::IsWindow(m_hWnd));
ATLASSERT(hPage != NULL);
return (BOOL)::SendMessage(m_hWnd, PSM_INSERTPAGE, nNewPageIndex, (LPARAM)hPage);
}
BOOL InsertPage(int nNewPageIndex, LPCPROPSHEETPAGE pPage)
{
ATLASSERT(::IsWindow(m_hWnd));
ATLASSERT(pPage != NULL);
HPROPSHEETPAGE hPage = ::CreatePropertySheetPage(pPage);
if(hPage == NULL)
return FALSE;
return (BOOL)::SendMessage(m_hWnd, PSM_INSERTPAGE, nNewPageIndex, (LPARAM)hPage);
}
BOOL InsertPage(HPROPSHEETPAGE hPageInsertAfter, HPROPSHEETPAGE hPage)
{
ATLASSERT(::IsWindow(m_hWnd));
ATLASSERT(hPage != NULL);
return (BOOL)::SendMessage(m_hWnd, PSM_INSERTPAGE, (WPARAM)hPageInsertAfter, (LPARAM)hPage);
}
BOOL InsertPage(HPROPSHEETPAGE hPageInsertAfter, LPCPROPSHEETPAGE pPage)
{
ATLASSERT(::IsWindow(m_hWnd));
ATLASSERT(pPage != NULL);
HPROPSHEETPAGE hPage = ::CreatePropertySheetPage(pPage);
if(hPage == NULL)
return FALSE;
return (BOOL)::SendMessage(m_hWnd, PSM_INSERTPAGE, (WPARAM)hPageInsertAfter, (LPARAM)hPage);
}
#endif // !_WIN32_WCE
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) && !defined(_WIN32_WCE)
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);
}
void SetHeaderTitle(int nIndex, LPCTSTR lpstrHeaderTitle)
{
ATLASSERT(::IsWindow(m_hWnd));
::SendMessage(m_hWnd, PSM_SETHEADERTITLE, nIndex, (LPARAM)lpstrHeaderTitle);
}
void SetHeaderSubTitle(int nIndex, LPCTSTR lpstrHeaderSubTitle)
{
ATLASSERT(::IsWindow(m_hWnd));
::SendMessage(m_hWnd, PSM_SETHEADERSUBTITLE, nIndex, (LPARAM)lpstrHeaderSubTitle);
}
#endif // (_WIN32_IE >= 0x0500) && !defined(_WIN32_WCE)
// Implementation - override to prevent usage
HWND Create(LPCTSTR, HWND, ATL::_U_RECT = NULL, LPCTSTR = NULL, DWORD = 0, DWORD = 0, ATL::_U_MENUorID = 0U, LPVOID = NULL)
{
ATLASSERT(FALSE);
return NULL;
}
};
///////////////////////////////////////////////////////////////////////////////
// CPropertySheetImpl - implements a property sheet
template <class T, class TBase = CPropertySheetWindow>
class ATL_NO_VTABLE CPropertySheetImpl : public ATL::CWindowImplBaseT< TBase >
{
public:
PROPSHEETHEADER m_psh;
ATL::CSimpleArray<HPROPSHEETPAGE> m_arrPages;
#if defined(_AYGSHELL_H_) || defined(__AYGSHELL_H__) // PPC specific
#ifndef PROPSHEET_LINK_SIZE
#define PROPSHEET_LINK_SIZE 128
#endif // PROPSHEET_LINK_SIZE
TCHAR m_szLink[PROPSHEET_LINK_SIZE];
static LPCTSTR m_pszTitle;
static LPCTSTR m_pszLink;
#endif // defined(_AYGSHELL_H_) || defined(__AYGSHELL_H__)
// Construction/Destruction
CPropertySheetImpl(ATL::_U_STRINGorID title = (LPCTSTR)NULL, UINT uStartPage = 0, HWND hWndParent = NULL)
{
memset(&m_psh, 0, sizeof(PROPSHEETHEADER));
m_psh.dwSize = sizeof(PROPSHEETHEADER);
m_psh.dwFlags = PSH_USECALLBACK;
#if (_ATL_VER >= 0x0700)
m_psh.hInstance = ATL::_AtlBaseModule.GetResourceInstance();
#else // !(_ATL_VER >= 0x0700)
m_psh.hInstance = _Module.GetResourceInstance();
#endif // !(_ATL_VER >= 0x0700)
m_psh.phpage = NULL; // will be set later
m_psh.nPages = 0; // will be set later
m_psh.pszCaption = title.m_lpstr;
m_psh.nStartPage = uStartPage;
m_psh.hwndParent = hWndParent; // if NULL, will be set in DoModal/Create
m_psh.pfnCallback = T::PropSheetCallback;
#if defined(_AYGSHELL_H_) || defined(__AYGSHELL_H__) // PPC specific
m_psh.dwFlags |= PSH_MAXIMIZE;
m_szLink[0] = 0;
#endif // defined(_AYGSHELL_H_) || defined(__AYGSHELL_H__)
}
~CPropertySheetImpl()
{
if(m_arrPages.GetSize() > 0) // sheet never created, destroy all pages
{
for(int i = 0; i < m_arrPages.GetSize(); i++)
::DestroyPropertySheetPage((HPROPSHEETPAGE)m_arrPages[i]);
}
}
// Callback function and overrideables
static int CALLBACK PropSheetCallback(HWND hWnd, UINT uMsg, LPARAM lParam)
{
lParam; // avoid level 4 warning
int nRet = 0;
if(uMsg == PSCB_INITIALIZED)
{
ATLASSERT(hWnd != NULL);
#if (_ATL_VER >= 0x0700)
T* pT = (T*)ATL::_AtlWinModule.ExtractCreateWndData();
#else // !(_ATL_VER >= 0x0700)
T* pT = (T*)_Module.ExtractCreateWndData();
#endif // !(_ATL_VER >= 0x0700)
// subclass the sheet window
pT->SubclassWindow(hWnd);
// remove page handles array
pT->_CleanUpPages();
#if defined(_AYGSHELL_H_) || defined(__AYGSHELL_H__) // PPC specific
m_pszTitle = pT->m_psh.pszCaption;
if(*pT->m_szLink != 0)
m_pszLink = pT->m_szLink;
#endif // defined(_AYGSHELL_H_) || defined(__AYGSHELL_H__) // PPC specific
pT->OnSheetInitialized();
}
#if defined(_AYGSHELL_H_) || defined(__AYGSHELL_H__) // PPC specific uMsg
else
{
switch(uMsg)
{
case PSCB_GETVERSION :
nRet = COMCTL32_VERSION;
break;
case PSCB_GETTITLE :
if(m_pszTitle != NULL)
{
lstrcpy((LPTSTR)lParam, m_pszTitle);
m_pszTitle = NULL;
}
break;
case PSCB_GETLINKTEXT:
if(m_pszLink != NULL)
{
lstrcpy((LPTSTR)lParam, m_pszLink);
m_pszLink = NULL;
}
break;
default:
break;
}
}
#endif // defined(_AYGSHELL_H_) || defined(__AYGSHELL_H__)
return nRet;
}
void OnSheetInitialized()
{
}
// Create method
HWND Create(HWND hWndParent = NULL)
{
ATLASSERT(m_hWnd == NULL);
m_psh.dwFlags |= PSH_MODELESS;
if(m_psh.hwndParent == NULL)
m_psh.hwndParent = hWndParent;
m_psh.phpage = (HPROPSHEETPAGE*)m_arrPages.GetData();
m_psh.nPages = m_arrPages.GetSize();
T* pT = static_cast<T*>(this);
#if (_ATL_VER >= 0x0700)
ATL::_AtlWinModule.AddCreateWndData(&pT->m_thunk.cd, pT);
#else // !(_ATL_VER >= 0x0700)
_Module.AddCreateWndData(&pT->m_thunk.cd, pT);
#endif // !(_ATL_VER >= 0x0700)
HWND hWnd = (HWND)::PropertySheet(&m_psh);
_CleanUpPages(); // ensure clean-up, required if call failed
ATLASSERT(m_hWnd == hWnd);
return hWnd;
}
INT_PTR DoModal(HWND hWndParent = ::GetActiveWindow())
{
ATLASSERT(m_hWnd == NULL);
m_psh.dwFlags &= ~PSH_MODELESS;
if(m_psh.hwndParent == NULL)
m_psh.hwndParent = hWndParent;
m_psh.phpage = (HPROPSHEETPAGE*)m_arrPages.GetData();
m_psh.nPages = m_arrPages.GetSize();
T* pT = static_cast<T*>(this);
#if (_ATL_VER >= 0x0700)
ATL::_AtlWinModule.AddCreateWndData(&pT->m_thunk.cd, pT);
#else // !(_ATL_VER >= 0x0700)
_Module.AddCreateWndData(&pT->m_thunk.cd, pT);
#endif // !(_ATL_VER >= 0x0700)
INT_PTR nRet = ::PropertySheet(&m_psh);
_CleanUpPages(); // ensure clean-up, required if call failed
return nRet;
}
// implementation helper - clean up pages array
void _CleanUpPages()
{
m_psh.nPages = 0;
m_psh.phpage = NULL;
m_arrPages.RemoveAll();
}
// Attributes (extended overrides of client class methods)
// These now can be called before the sheet is created
// Note: Calling these after the sheet is created gives unpredictable results
int GetPageCount() const
{
if(m_hWnd == NULL) // not created yet
return m_arrPages.GetSize();
return TBase::GetPageCount();
}
int GetActiveIndex() const
{
if(m_hWnd == NULL) // not created yet
return m_psh.nStartPage;
return TBase::G
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -