mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
4.0 KiB
182 lines
4.0 KiB
#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);
|
|
}
|
|
|
|
|