1. 스택 페이지로 쓰일 다이얼로그 윈도우 리소스들을 만든다. - Child, No border, Not visible, Disabled
2. 해당 클래스를 생성해서 TStackedPage에서 상속한다.
3. 메인 다이얼로그 윈도우 리소스를 만든다.
플레이스 홀더로 사용될 픽쳐 컨트롤 - invisible, disable
TStackedDialog의 생성자에서 리소스 ID가 사용된다.
4. 해당 클래스를 생성해서 TStackedDialog에서 상속한다.
CreatePage, OnPageChanged 가상 함수를 생성한다.
AddPage(), SetPage()에서 호출된다.
5. OnInitDialog등에서 AddPage(), SetPage()를 호출한다.
TStackedPage
stacked dialog
OnCreatePage
called once after the page is created
OnDestroyPage
called once before the page is destroyed
OnSetActive
called once the page becomes active
OnKillActive
called once the page becomes inactive
// TODO: Add extra initialization here
// { AddPage(IDD_PAGE1); AddPage(IDD_PAGE2);
... SetPage(IDD_PAGE2);
// }
return TRUE; // return TRUE unless you set the focus to a control
}
// 패토리 패턴?
// Must be implemented
// Create a dialog object based on dialog resource id TStackedPage *CSampleDlg::CreatePage(UINT nId)
{
switch (nId) {
case IDD_PAGE1: return new CPageOneDialog;
case IDD_PAGE2: return new CPageTwoDialog;
...
}
return NULL; // this will assert }
// Must be implemented but may have an ampty implementation
// Here, I update the controls based on the currently active page void CSampleDlg::OnPageChanged(UINT nId, BOOL bActivated)
{
if (bActivated) {
switch (nId) {
case IDD_PAGE1:
...
break;
case IDD_PAGE2:
...
break;
...
}
} else {
...
} }
void CSampleDlg::OnButton1()
{
// TODO: Add your control notification handler code here
...
}