1 // Windows/Control/PropertyPage.cpp
\r
5 #include "Windows/Control/PropertyPage.h"
\r
7 #include "../../Common/StringConvert.h"
\r
10 extern HINSTANCE g_hInstance;
\r
15 namespace NWindows {
\r
16 namespace NControl {
\r
18 INT_PTR APIENTRY ProperyPageProcedure(HWND dialogHWND, UINT message,
\r
19 WPARAM wParam, LPARAM lParam)
\r
21 CDialog tempDialog(dialogHWND);
\r
22 if (message == WM_INITDIALOG)
\r
23 tempDialog.SetUserDataLongPtr(((PROPSHEETPAGE *)lParam)->lParam);
\r
24 CDialog *dialog = (CDialog *)(tempDialog.GetUserDataLongPtr());
\r
25 if (message == WM_INITDIALOG)
\r
26 dialog->Attach(dialogHWND);
\r
30 return dialog->OnInit();
\r
32 return dialog->OnCommand(wParam, lParam);
\r
34 return dialog->OnNotify((UINT)wParam, (LPNMHDR) lParam);
\r
38 return dialog->OnMessage(message, wParam, lParam);
\r
41 bool CPropertyPage::OnNotify(UINT /* controlID */, LPNMHDR lParam)
\r
43 switch(lParam->code)
\r
46 SetMsgResult(OnApply(LPPSHNOTIFY(lParam)));
\r
48 case PSN_KILLACTIVE:
\r
49 SetMsgResult(BoolToBOOL(OnKillActive(LPPSHNOTIFY(lParam))));
\r
52 SetMsgResult(OnSetActive(LPPSHNOTIFY(lParam)));
\r
55 OnReset(LPPSHNOTIFY(lParam));
\r
58 OnNotifyHelp(LPPSHNOTIFY(lParam));
\r
66 INT_PTR MyPropertySheet(const CObjectVector<CPageInfo> &pagesInfo, HWND hwndParent, const UString &title)
\r
69 AStringVector titles;
\r
72 CRecordVector<PROPSHEETPAGEA> pagesA;
\r
74 CRecordVector<PROPSHEETPAGEW> pagesW;
\r
78 for (i = 0; i < pagesInfo.Size(); i++)
\r
79 titles.Add(GetSystemString(pagesInfo[i].Title));
\r
82 for (i = 0; i < pagesInfo.Size(); i++)
\r
84 const CPageInfo &pageInfo = pagesInfo[i];
\r
88 page.dwSize = sizeof(page);
\r
89 page.dwFlags = PSP_HASHELP;
\r
90 page.hInstance = g_hInstance;
\r
91 page.pszTemplate = MAKEINTRESOURCE(pageInfo.ID);
\r
92 page.pszIcon = NULL;
\r
93 page.pfnDlgProc = NWindows::NControl::ProperyPageProcedure;
\r
95 if (titles[i].IsEmpty())
\r
96 page.pszTitle = NULL;
\r
99 page.dwFlags |= PSP_USETITLE;
\r
100 page.pszTitle = titles[i];
\r
102 page.lParam = (LPARAM)pageInfo.Page;
\r
103 page.pfnCallback = NULL;
\r
108 PROPSHEETPAGEW page;
\r
109 page.dwSize = sizeof(page);
\r
110 page.dwFlags = PSP_HASHELP;
\r
111 page.hInstance = g_hInstance;
\r
112 page.pszTemplate = MAKEINTRESOURCEW(pageInfo.ID);
\r
113 page.pszIcon = NULL;
\r
114 page.pfnDlgProc = NWindows::NControl::ProperyPageProcedure;
\r
116 if (pageInfo.Title.IsEmpty())
\r
117 page.pszTitle = NULL;
\r
120 page.dwFlags |= PSP_USETITLE;
\r
121 page.pszTitle = pageInfo.Title;
\r
123 page.lParam = (LPARAM)pageInfo.Page;
\r
124 page.pfnCallback = NULL;
\r
132 PROPSHEETHEADER sheet;
\r
133 sheet.dwSize = sizeof(sheet);
\r
134 sheet.dwFlags = PSH_PROPSHEETPAGE;
\r
135 sheet.hwndParent = hwndParent;
\r
136 sheet.hInstance = g_hInstance;
\r
137 AString titleA = GetSystemString(title);
\r
138 sheet.pszCaption = titleA;
\r
139 sheet.nPages = pagesInfo.Size();
\r
140 sheet.nStartPage = 0;
\r
141 sheet.ppsp = &pagesA.Front();
\r
142 sheet.pfnCallback = NULL;
\r
143 return ::PropertySheetA(&sheet);
\r
148 PROPSHEETHEADERW sheet;
\r
149 sheet.dwSize = sizeof(sheet);
\r
150 sheet.dwFlags = PSH_PROPSHEETPAGE;
\r
151 sheet.hwndParent = hwndParent;
\r
152 sheet.hInstance = g_hInstance;
\r
153 sheet.pszCaption = title;
\r
154 sheet.nPages = pagesInfo.Size();
\r
155 sheet.nStartPage = 0;
\r
156 sheet.ppsp = &pagesW.Front();
\r
157 sheet.pfnCallback = NULL;
\r
158 return ::PropertySheetW(&sheet);
\r