|
|
#include "precomp.hxx"
#include "PropertyPage.h"
void PropertyPage::FillPropSheetPage() { ZeroMemory(&psp, sizeof(psp));
psp.dwSize = sizeof(psp); psp.dwFlags = PSP_USECALLBACK; psp.pszTemplate = MAKEINTRESOURCE(resID); psp.hInstance = hInstance; psp.lParam = (LPARAM) this; psp.pfnDlgProc = PropertyPageStaticDlgProc; psp.pfnCallback = PropertyPageStaticCallback; }
HPROPSHEETPAGE PropertyPage::CreatePropertyPage() { HPROPSHEETPAGE hp; FillPropSheetPage(); return ::CreatePropertySheetPage(&psp); }
UINT CALLBACK PropertyPage::PropertyPageStaticCallback(HWND hwnd, UINT msg, LPPROPSHEETPAGE ppsp) { PropertyPage * pThis = (PropertyPage*) ppsp->lParam;
switch (msg) { case PSPCB_CREATE: return pThis->CallbackCreate();
case PSPCB_RELEASE: pThis->CallbackRelease(); return FALSE; // return value ignored
default: break; }
return TRUE; }
INT_PTR PropertyPage::PropertyPageStaticDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { Dialog *pThis;
pThis = (PropertyPage*) GetWindowLongPtr(hDlg, DWLP_USER);
if (msg == WM_INITDIALOG) { pThis = (PropertyPage *) ((LPPROPSHEETPAGE)lParam)->lParam; SetWindowLongPtr(hDlg, DWLP_USER, (ULONG_PTR) pThis);
return pThis->OnInitDialog(hDlg); }
if (pThis) { return pThis->MainDlgProc(msg, wParam, lParam); }
return FALSE; }
INT_PTR PropertyPage::OnNotify(NMHDR * nmhdr) { INT_PTR res = Dialog::OnNotify(nmhdr); LPPSHNOTIFY lppsn = (LPPSHNOTIFY) nmhdr;
switch (nmhdr->code) { case PSN_APPLY: OnApply(lppsn); return TRUE;
case PSN_KILLACTIVE: OnKillActive(lppsn); return TRUE;
case PSN_SETACTIVE: OnSetActive(lppsn); return TRUE; case PSN_HELP: OnHelp(lppsn); return TRUE;
case PSN_RESET: OnReset(lppsn); return FALSE;
case PSN_QUERYCANCEL: OnQueryCancel(lppsn); return TRUE;
default: return FALSE; } }
void PropertyPage::OnApply(LPPSHNOTIFY lppsn) { SetWindowLongPtr(hDlg, DWLP_MSGRESULT, PSNRET_NOERROR); }
void PropertyPage::OnSetActive(LPPSHNOTIFY lppsn) { SetWindowLongPtr(hDlg, DWLP_MSGRESULT, 0); }
void PropertyPage::OnKillActive(LPPSHNOTIFY lppsn) { SetWindowLongPtr(hDlg, DWLP_MSGRESULT, 0); }
void PropertyPage::OnQueryCancel(LPPSHNOTIFY lppsn) { SetWindowLongPtr(hDlg, DWLP_MSGRESULT, 0); }
void PropertyPage::SetModified(BOOL bChanged) { assert(::IsWindow(hDlg)); assert(GetParent(hDlg) != NULL); UINT uMsg = bChanged ? PSM_CHANGED : PSM_UNCHANGED; ::SendMessage(GetParent(hDlg), uMsg, (WPARAM)hDlg, 0L); }
//
// SHBrowseForFolder callback
//
int CALLBACK BrowseCallback( HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData ) { switch (uMsg) { case BFFM_INITIALIZED: // set the initial seclection to our default folder
// (from the registry or SIDL_MYPICTURES).
// the lpData points to the folder path.
// It must contain a path.
assert(lpData && _T('\0') != *((LPTSTR)lpData));
SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData); break; case BFFM_VALIDATEFAILED: IdMessageBox(hwnd, IDS_ERROR_INVALID_FOLDER); return 1; default: break; }
return 0; }
extern HINSTANCE gHInst;
int IdMessageBox( HWND hwnd, int MsgId, DWORD Options, int CaptionId ) { TCHAR MsgText[MAX_PATH]; TCHAR Caption[MAX_PATH]; assert(MsgId); if (MsgId) LoadString(gHInst, MsgId, MsgText, sizeof(MsgText) / sizeof(TCHAR)); else LoadString(gHInst, IDS_ERROR_UNKNOWN, MsgText, sizeof(MsgText) / sizeof(TCHAR)); if (CaptionId) LoadString(gHInst, CaptionId, Caption, sizeof(Caption) / sizeof(TCHAR)); else LoadString(gHInst, IDS_APPLETNAME, Caption, sizeof(Caption) / sizeof(TCHAR)); return MessageBox(hwnd, MsgText, Caption, Options); }
|