INT_PTR Tab::TabDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { Tab *tab = (Tab *)GetWindowLongPtr(hDlg, GWLP_USERDATA); switch(message) { case WM_INITDIALOG: { if (!centered) //HACK { CenterWindow(GetParent(hDlg)); centered=true; } LPARAM l = ((LPPROPSHEETPAGE)lParam)->lParam; tab = (Tab *)l; SetWindowLongPtr(hDlg, GWLP_USERDATA, (DWORD_PTR)l); tab->Init(hDlg); } break; case WM_COMMAND: tab->Command(hDlg,wParam); break; case WM_NOTIFY: { LPPSHNOTIFY lppsn = (LPPSHNOTIFY) lParam; HWND sheet = lppsn->hdr.hwndFrom; switch(lppsn->hdr.code) { case PSN_APPLY: tab->Apply(hDlg); break; case PSN_SETACTIVE: PropSheet_SetWizButtons(GetParent(hDlg), (tab->HasPrev()?PSWIZB_BACK:0) | (tab->HasNext()?PSWIZB_NEXT:0) | (tab->HasFinish()?PSWIZB_FINISH:0)); break; case PSN_WIZNEXT: tab->Apply(hDlg); //maybe not always good break; case PSN_WIZBACK: case PSN_RESET: //cancel break; } } break; } return 0; }