Доброго всем времени суток.
Цель: создание немодального property sheet с возможностью изменеия размеров.
Как делаю:
// Базовый класс для страниц-закладок
template <WORD t_wDlgTemplateID>
class CModelessPropertyPage:
public CPropertyPageImpl<CModelessPropertyPage>,
public CDialogResize<CModelessPropertyPage>
{
public:
enum { IDD = t_wDlgTemplateID };
CModelessPropertyPage(ATL::_U_STRINGorID title = (LPCTSTR)NULL):
CPropertyPageImpl<CModelessPropertyPage>(title)
{
}
~CModelessPropertyPage() { if(m_hWnd) DestroyWindow(); }
BEGIN_MSG_MAP(CModelessPropertyPage)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitPage)
CHAIN_MSG_MAP(CPropertyPageImpl<CModelessPropertyPage>)
CHAIN_MSG_MAP(CDialogResize<CModelessPropertyPage>)
END_MSG_MAP()
BEGIN_DLGRESIZE_MAP(CModelessPropertyPage)
END_DLGRESIZE_MAP()
LRESULT OnInitPage(UINT, WPARAM , LPARAM , BOOL& bHandled)
{
bHandled = false;
DlgResize_Init(false, false, WS_CHILD | WS_CLIPCHILDREN);
return 0;
}
};
// Базовый класс для sheet
// Сразу замечу, что я убиваю property sheet только при закрытии самого приложения, иначе,
// я его просто прячу.
class CModelessPropertySheet :
public CPropertySheetImpl<CModelessPropertySheet>,
public CDialogResize<CModelessPropertySheet>
{
public:
CModelessPropertySheet(_U_STRINGorID title = (LPCTSTR)NULL, UINT uStartPage = 0, HWND hWndParent = NULL):
CPropertySheetImpl<CModelessPropertySheet>(title, uStartPage, hWndParent)
{
m_fChilded = false;
m_psh.dwFlags |= PSH_NOAPPLYNOW;
m_psh.dwFlags |= PSH_NOCONTEXTHELP;
}
~CModelessPropertySheet() { if(m_hWnd) DestroyWindow(); }
virtual HWND Create()
{
if(m_hSheet) ShowWindow(SW_SHOW);
else
{
m_hSheet = CPropertySheetImpl<CModelessPropertySheet>::Create();
ModifyStyle(0, WS_THICKFRAME);
DlgResize_Init(true, false, 0);
}
::SetFocus(m_hSheet);
return m_hSheet;
}
BEGIN_MSG_MAP(CModelessPropertySheet)
MESSAGE_HANDLER(WM_CLOSE, OnClose)
COMMAND_HANDLER(IDOK, BN_CLICKED, OnHide)
COMMAND_HANDLER(IDCANCEL, BN_CLICKED, OnHide)
CHAIN_MSG_MAP(CPropertySheetImpl<CModelessPropertySheet>)
CHAIN_MSG_MAP(CDialogResize<CModelessPropertySheet>)
END_MSG_MAP()
BEGIN_DLGRESIZE_MAP(CModelessPropertySheet)
END_DLGRESIZE_MAP()
LRESULT OnHide(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
return ShowWindow(SW_HIDE);
}
LRESULT OnClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
return ShowWindow(SW_HIDE);
}
private:
bool m_fChilded;
HWND m_hSheet;
};
Сооответственно, я создаю наследников от этих базовых классов, добавлюя закладки, вроде всё работает нормально, но никак не получается изменить размеры окна. В чём тут может быть проблема?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>