8 class CPropertyPageImpl
: public CDialogImplBaseT
<CWindow
>
13 operator PROPSHEETPAGE
*()
18 CPropertyPageImpl(LPCTSTR lpszTitle
= NULL
)
20 T
* pT
= static_cast<T
*>(this);
22 memset(&m_psp
, 0, sizeof(m_psp
));
23 m_psp
.dwSize
= sizeof(m_psp
);
24 m_psp
.hInstance
= _AtlBaseModule
.GetResourceInstance();
25 m_psp
.pszTemplate
= MAKEINTRESOURCE(T::IDD
);
26 m_psp
.pszTitle
= lpszTitle
;
27 m_psp
.pfnDlgProc
= T::StartDialogProc
;
28 m_psp
.pfnCallback
= T::PropPageCallback
;
29 m_psp
.lParam
= reinterpret_cast<LPARAM
>(pT
);
31 m_psp
.dwFlags
= PSP_USECALLBACK
;
33 m_psp
.dwFlags
|= PSP_USETITLE
;
36 static UINT CALLBACK
PropPageCallback(HWND hwnd
, UINT uMsg
, LPPROPSHEETPAGE ppsp
)
38 T
* pT
= reinterpret_cast<T
*>(ppsp
->lParam
);
39 CDialogImplBaseT
<CWindow
>* pThis
= static_cast<CDialogImplBaseT
<CWindow
>*>(pT
);
44 _AtlWinModule
.AddCreateWndData(&pThis
->m_thunk
.cd
, pThis
);
45 return pT
->OnPageCreate();
57 HPROPSHEETPAGE
Create()
59 return ::CreatePropertySheetPage(&m_psp
);
62 BOOL
EndDialog(_In_
int nRetCode
)
67 void SetModified(BOOL bChanged
= TRUE
)
69 ::SendMessage(GetParent(), bChanged
? PSM_CHANGED
: PSM_UNCHANGED
, (WPARAM
)m_hWnd
, 0L);
97 return PSNRET_NOERROR
;
118 BOOL
OnWizardFinish()
128 BOOL
OnGetObject(LPNMOBJECTNOTIFY lpObjectNotify
)
133 int OnTranslateAccelerator(LPMSG lpMsg
)
138 HWND
OnQueryInitialFocus(HWND hwnd
)
143 // message map and handlers
144 typedef CPropertyPageImpl
<T
> thisClass
;
145 BEGIN_MSG_MAP(thisClass
)
146 MESSAGE_HANDLER(WM_NOTIFY
, OnNotify
)
149 LRESULT
OnNotify(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
)
151 NMHDR
* pnmh
= (NMHDR
*)lParam
;
152 T
* pThis
= static_cast<T
*>(this);
154 if (pnmh
->hwndFrom
!= GetParent() && pnmh
->hwndFrom
!= m_hWnd
)
163 return pThis
->OnSetActive();
165 return pThis
->OnKillActive();
167 return pThis
->OnApply();
175 return pThis
->OnWizardBack();
177 return pThis
->OnWizardNext();
179 return pThis
->OnWizardFinish();
180 case PSN_QUERYCANCEL
:
181 return pThis
->OnQueryCancel();
183 return pThis
->OnGetObject((LPNMOBJECTNOTIFY
)lParam
);
184 case PSN_TRANSLATEACCELERATOR
:
185 return pThis
->OnTranslateAccelerator((LPMSG
)lParam
);
186 case PSN_QUERYINITIALFOCUS
:
187 return (LRESULT
)pThis
->OnQueryInitialFocus((HWND
)lParam
);