Source code of Windows XP (NT5)
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.

507 lines
16 KiB

  1. /*======================================================================================//
  2. | Process Control //
  3. | //
  4. |Copyright (c) 1998 Sequent Computer Systems, Incorporated. All rights reserved. //
  5. | //
  6. |File Name: ManagementRuleWizards.h //
  7. | //
  8. |Description: Implementation of management rule wizards //
  9. | //
  10. |Created: Paul Skoglund 09-1998 //
  11. | //
  12. |Rev History: //
  13. | //
  14. |=======================================================================================*/
  15. #ifndef __MANAGEMENTRULEWIZARDS_H__
  16. #define __MANAGEMENTRULEWIZARDS_H__
  17. #include "BaseNode.h"
  18. #include "ppage.h"
  19. extern bool GetGrpNameList(PCid id, list<tstring> &jobs);
  20. extern list<tstring> *GetGrpNameList(PCid id);
  21. BOOL IsValidName(const CComBSTR &bStr, BOOL nullOK);
  22. extern BOOL ProcRuleWizard(int nTitle, const list<tstring> &jobsdefined, PCProcDetail &out, const PCSystemParms &SystemParms, PROC_NAME *procName = NULL);
  23. extern BOOL GroupRuleWizard(int nTitle, PCJobDetail &out, const PCSystemParms &SystemParms, JOB_NAME *jobName = NULL);
  24. class CProcNameWiz :
  25. public CMySnapInPropertyWizardImpl<CProcNameWiz>
  26. {
  27. public :
  28. CProcNameWiz(WIZ_POSITION pos, int nTitle, PCProcDetail *ProcDetail);
  29. ~CProcNameWiz();
  30. enum { IDD = IDD_PROCNAME_WIZ };
  31. enum { ID_HeaderTitle = IDS_PROCESSALIAS_HDRTITLE };
  32. enum { ID_HeaderSubTitle = IDS_PROCESSALIAS_HDRSUBTITLE };
  33. BEGIN_MSG_MAP(CProcNameWiz)
  34. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  35. MESSAGE_HANDLER(WM_HELP, OnWMHelp)
  36. CHAIN_MSG_MAP(CMySnapInPropertyWizardImpl<CProcNameWiz>)
  37. END_MSG_MAP()
  38. LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  39. LRESULT OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  40. BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
  41. BOOL OnWizardNext();
  42. void SetReadOnly() { m_bReadOnly = TRUE;}
  43. void SetNoNameChange() { m_bNoNameChange = TRUE;}
  44. private:
  45. PCProcDetail *m_pProcDetail;
  46. BOOL m_bReadOnly;
  47. BOOL m_bNoNameChange;
  48. };
  49. class CProcGrpMemberWiz :
  50. public CMySnapInPropertyWizardImpl<CProcGrpMemberWiz>
  51. {
  52. public :
  53. CProcGrpMemberWiz(WIZ_POSITION pos, int nTitle, PCProcDetail *ProcDetail, const list<tstring> &jobsdefined);
  54. ~CProcGrpMemberWiz();
  55. enum { IDD = IDD_PROCJOBMEMBER_WIZ };
  56. enum { ID_HeaderTitle = IDS_GRPMEM_HDRTITLE };
  57. enum { ID_HeaderSubTitle = IDS_GRPMEM_HDRSUBTITLE };
  58. BEGIN_MSG_MAP(CProcGrpMemberWiz)
  59. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  60. MESSAGE_HANDLER(WM_HELP, OnWMHelp)
  61. COMMAND_HANDLER(IDC_JOBMEMBER_CHK, BN_CLICKED, OnJobChk)
  62. CHAIN_MSG_MAP(CMySnapInPropertyWizardImpl<CProcGrpMemberWiz>)
  63. END_MSG_MAP()
  64. LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  65. LRESULT OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  66. LRESULT OnJobChk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  67. BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
  68. BOOL OnWizardNext();
  69. void SetReadOnly() { m_bReadOnly = TRUE;}
  70. private:
  71. PCProcDetail *m_pProcDetail;
  72. BOOL m_bReadOnly;
  73. const list<tstring> &m_JobsExisting;
  74. };
  75. class CAffinityWiz :
  76. public CMySnapInPropertyWizardImpl<CAffinityWiz>
  77. {
  78. public :
  79. CAffinityWiz(WIZ_POSITION pos, int nTitle, PCProcDetail *ProcDetail, AFFINITY ProcessorMask = 0xFFffFFff);
  80. CAffinityWiz(WIZ_POSITION pos, int nTitle, PCJobDetail *JobDetail, AFFINITY ProcessorMask = 0xFFffFFff);
  81. ~CAffinityWiz();
  82. enum { IDD = IDD_AFFINITY_WIZ };
  83. enum { ID_HeaderTitle = IDS_AFFINITY_HDRTITLE };
  84. enum { ID_HeaderSubTitle = IDS_AFFINITY_HDRSUBTITLE };
  85. BEGIN_MSG_MAP(CAffinityWiz)
  86. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  87. MESSAGE_HANDLER(WM_HELP, OnWMHelp)
  88. COMMAND_RANGE_HANDLER(IDC_AFFINITY1, IDC_AFFINITY64, OnAffinityEdit)
  89. COMMAND_HANDLER(IDC_AFFINITY_CHK, BN_CLICKED, OnChk)
  90. CHAIN_MSG_MAP(CMySnapInPropertyWizardImpl<CAffinityWiz>)
  91. END_MSG_MAP()
  92. LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  93. LRESULT OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  94. LRESULT OnAffinityEdit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  95. LRESULT OnChk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  96. BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
  97. BOOL OnWizardNext();
  98. BOOL OnSetActive();
  99. void SetReadOnly() { m_bReadOnly = TRUE;}
  100. private:
  101. typedef enum _PageType
  102. {
  103. PROCESS_PAGE,
  104. JOB_PAGE,
  105. } PageType;
  106. PageType m_PageType;
  107. PCProcDetail *m_pProcDetail;
  108. PCJobDetail *m_pJobDetail;
  109. BOOL m_bReadOnly;
  110. AFFINITY m_ProcessorMask;
  111. void Initialize();
  112. void ApplyControlEnableRules(BOOL bForceDisable);
  113. };
  114. class CPriorityWiz :
  115. public CMySnapInPropertyWizardImpl<CPriorityWiz>
  116. {
  117. public :
  118. CPriorityWiz(WIZ_POSITION pos, int nTitle, PCProcDetail *ProcDetail);
  119. CPriorityWiz(WIZ_POSITION pos, int nTitle, PCJobDetail *JobDetail);
  120. ~CPriorityWiz();
  121. enum { IDD = IDD_PRIORITY_WIZ };
  122. enum { ID_HeaderTitle = IDS_PRIORITY_HDRTITLE };
  123. enum { ID_HeaderSubTitle = IDS_PRIORITY_HDRSUBTITLE };
  124. BEGIN_MSG_MAP(CPriorityWiz)
  125. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  126. MESSAGE_HANDLER(WM_HELP, OnWMHelp)
  127. COMMAND_HANDLER(IDC_PRIORITY_CHK, BN_CLICKED, OnChk)
  128. CHAIN_MSG_MAP(CMySnapInPropertyWizardImpl<CPriorityWiz>)
  129. END_MSG_MAP()
  130. LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  131. LRESULT OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  132. LRESULT OnChk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  133. BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
  134. BOOL OnWizardNext();
  135. BOOL OnSetActive();
  136. void SetReadOnly() { m_bReadOnly = TRUE;}
  137. private:
  138. typedef enum _PageType
  139. {
  140. PROCESS_PAGE,
  141. JOB_PAGE,
  142. } PageType;
  143. PageType m_PageType;
  144. PCProcDetail *m_pProcDetail;
  145. PCJobDetail *m_pJobDetail;
  146. BOOL m_bReadOnly;
  147. void Initialize();
  148. void ApplyControlEnableRules(BOOL bForceDisable);
  149. };
  150. class CJobNameWiz :
  151. public CMySnapInPropertyWizardImpl<CJobNameWiz>
  152. {
  153. public :
  154. CJobNameWiz(WIZ_POSITION pos, int nTitle, PCJobDetail *JobDetail);
  155. ~CJobNameWiz();
  156. enum { IDD = IDD_JOBNAME_WIZ };
  157. enum { ID_HeaderTitle = IDS_GRPNAME_HDRTITLE };
  158. enum { ID_HeaderSubTitle = IDS_GRPNAME_HDRSUBTITLE };
  159. BEGIN_MSG_MAP(CJobNameWiz)
  160. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  161. MESSAGE_HANDLER(WM_HELP, OnWMHelp)
  162. CHAIN_MSG_MAP(CMySnapInPropertyWizardImpl<CJobNameWiz>)
  163. END_MSG_MAP()
  164. LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  165. LRESULT OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  166. BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
  167. BOOL OnWizardNext();
  168. void SetReadOnly() { m_bReadOnly = TRUE;}
  169. void SetNoNameChange() { m_bNoNameChange = TRUE;}
  170. private:
  171. PCJobDetail *m_pJobDetail;
  172. BOOL m_bReadOnly;
  173. BOOL m_bNoNameChange;
  174. };
  175. class CSchedulingClassWiz :
  176. public CMySnapInPropertyWizardImpl<CSchedulingClassWiz>
  177. {
  178. public :
  179. CSchedulingClassWiz(WIZ_POSITION pos, int nTitle, SCHEDULING_CLASS *sclass, bool *sclasschk);
  180. ~CSchedulingClassWiz();
  181. enum { IDD = IDD_SCHEDULING_CLASS_WIZ };
  182. enum { ID_HeaderTitle = IDS_SCHEDCLASS_HDRTITLE };
  183. enum { ID_HeaderSubTitle = IDS_SCHEDCLASS_HDRSUBTITLE };
  184. BEGIN_MSG_MAP(CSchedulingClassWiz)
  185. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  186. MESSAGE_HANDLER(WM_HELP, OnWMHelp)
  187. COMMAND_HANDLER(IDC_SCHEDULING_CHK, BN_CLICKED, OnChk)
  188. CHAIN_MSG_MAP(CMySnapInPropertyWizardImpl<CSchedulingClassWiz>)
  189. END_MSG_MAP()
  190. LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  191. LRESULT OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  192. LRESULT OnChk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  193. BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
  194. BOOL OnWizardNext();
  195. void SetReadOnly() { m_bReadOnly = TRUE;}
  196. private:
  197. bool &m_schedClasschk;
  198. SCHEDULING_CLASS &m_schedClass;
  199. BOOL m_bReadOnly;
  200. };
  201. class CWorkingSetWiz :
  202. public CMySnapInPropertyWizardImpl<CWorkingSetWiz>
  203. {
  204. public :
  205. CWorkingSetWiz(WIZ_POSITION pos, int nTitle, PCProcDetail *ProcDetail);
  206. CWorkingSetWiz(WIZ_POSITION pos, int nTitle, PCJobDetail *JobDetail);
  207. ~CWorkingSetWiz();
  208. enum { IDD = IDD_MEMORY_WS_WIZ };
  209. enum { ID_HeaderTitle = IDS_WSET_HDRTITLE };
  210. enum { ID_HeaderSubTitle = IDS_WSET_HDRSUBTITLE };
  211. BEGIN_MSG_MAP(CWorkingSetWiz)
  212. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  213. MESSAGE_HANDLER(WM_HELP, OnWMHelp)
  214. NOTIFY_HANDLER (IDC_MINWS_SPIN, UDN_DELTAPOS, OnSpin)
  215. NOTIFY_HANDLER (IDC_MAXWS_SPIN, UDN_DELTAPOS, OnSpin)
  216. COMMAND_HANDLER(IDC_WORKINGSET_CHK, BN_CLICKED, OnChk)
  217. CHAIN_MSG_MAP(CMySnapInPropertyWizardImpl<CWorkingSetWiz>)
  218. END_MSG_MAP()
  219. LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  220. LRESULT OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  221. LRESULT OnSpin(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  222. LRESULT OnChk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  223. BOOL Validate(BOOL bSave = FALSE);
  224. BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
  225. BOOL OnWizardNext();
  226. BOOL OnSetActive();
  227. void SetReadOnly() { m_bReadOnly = TRUE;}
  228. private:
  229. PCProcDetail *m_pProcDetail;
  230. PCJobDetail *m_pJobDetail;
  231. BOOL m_bReadOnly;
  232. void Initialize();
  233. void ApplyControlEnableRules(BOOL bForceDisable);
  234. };
  235. class CCommittedMemoryWiz :
  236. public CMySnapInPropertyWizardImpl<CCommittedMemoryWiz>
  237. {
  238. public :
  239. CCommittedMemoryWiz(WIZ_POSITION pos, int nTitle, MEMORY_VALUE *procmemorylimit, bool *procmemorylimitchk, MEMORY_VALUE *jobmemorylimit, bool *jobmemorylimitchk);
  240. ~CCommittedMemoryWiz();
  241. enum { IDD = IDD_MEMORY_COMMIT_WIZ };
  242. enum { ID_HeaderTitle = IDS_CMEM_HDRTITLE };
  243. enum { ID_HeaderSubTitle = IDS_CMEM_HDRSUBTITLE };
  244. BEGIN_MSG_MAP(CCommittedMemoryWiz)
  245. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  246. MESSAGE_HANDLER(WM_HELP, OnWMHelp)
  247. NOTIFY_HANDLER (IDC_PROC_SPIN, UDN_DELTAPOS, OnSpin)
  248. NOTIFY_HANDLER (IDC_JOB_SPIN, UDN_DELTAPOS, OnSpin)
  249. COMMAND_HANDLER(IDC_PROCMEMORY_CHK, BN_CLICKED, OnChk)
  250. COMMAND_HANDLER(IDC_JOBMEMORY_CHK, BN_CLICKED, OnChk)
  251. CHAIN_MSG_MAP(CMySnapInPropertyWizardImpl<CCommittedMemoryWiz>)
  252. END_MSG_MAP()
  253. LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  254. LRESULT OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  255. LRESULT OnSpin(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  256. LRESULT OnChk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  257. BOOL Validate(BOOL bSave = FALSE);
  258. BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
  259. BOOL OnWizardNext();
  260. void SetReadOnly() { m_bReadOnly = TRUE;}
  261. private:
  262. bool &m_procmemorylimitchk;
  263. MEMORY_VALUE &m_procmemorylimit;
  264. bool &m_jobmemorylimitchk;
  265. MEMORY_VALUE &m_jobmemorylimit;
  266. BOOL m_bReadOnly;
  267. };
  268. class CProcCountWiz :
  269. public CMySnapInPropertyWizardImpl<CProcCountWiz>
  270. {
  271. public :
  272. CProcCountWiz(WIZ_POSITION pos, int nTitle, PROC_COUNT *processcount, bool *processcountchk);
  273. ~CProcCountWiz();
  274. enum { IDD = IDD_PROC_COUNT_WIZ };
  275. enum { ID_HeaderTitle = IDS_PROCCOUNT_HDRTITLE };
  276. enum { ID_HeaderSubTitle = IDS_PROCCOUNT_HDRSUBTITLE };
  277. BEGIN_MSG_MAP(CProcCountWiz)
  278. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  279. MESSAGE_HANDLER(WM_HELP, OnWMHelp)
  280. COMMAND_HANDLER(IDC_PROCESSCOUNT_CHK, BN_CLICKED, OnChk)
  281. CHAIN_MSG_MAP(CMySnapInPropertyWizardImpl<CProcCountWiz>)
  282. END_MSG_MAP()
  283. LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  284. LRESULT OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  285. LRESULT OnChk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  286. BOOL Validate(BOOL bSave = FALSE);
  287. BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
  288. BOOL OnWizardNext();
  289. void SetReadOnly() { m_bReadOnly = TRUE;}
  290. private:
  291. bool &m_processcountchk;
  292. PROC_COUNT &m_processcount;
  293. BOOL m_bReadOnly;
  294. };
  295. class CTimeWiz :
  296. public CMySnapInPropertyWizardImpl<CTimeWiz>
  297. {
  298. public :
  299. CTimeWiz(WIZ_POSITION pos, int nTitle, TIME_VALUE *procusertime, bool *procusertimechk, TIME_VALUE *jobusertime, bool *jobusertimechk, bool *jobmsgontimelimit);
  300. ~CTimeWiz();
  301. enum { IDD = IDD_TIME_WIZ };
  302. enum { ID_HeaderTitle = IDS_CPUTIME_HDRTITLE };
  303. enum { ID_HeaderSubTitle = IDS_CPUTIME_HDRSUBTITLE };
  304. BEGIN_MSG_MAP(CTimeWiz)
  305. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  306. MESSAGE_HANDLER(WM_HELP, OnWMHelp)
  307. COMMAND_HANDLER(IDC_PROCUSERTIME_CHK, BN_CLICKED, OnChk)
  308. COMMAND_HANDLER(IDC_JOBUSERTIME_CHK, BN_CLICKED, OnChk)
  309. CHAIN_MSG_MAP(CMySnapInPropertyWizardImpl<CTimeWiz>)
  310. END_MSG_MAP()
  311. LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  312. LRESULT OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  313. LRESULT OnChk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  314. BOOL Validate(BOOL bSave = FALSE);
  315. BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
  316. BOOL OnWizardNext();
  317. void SetReadOnly() { m_bReadOnly = TRUE;}
  318. private:
  319. bool &m_procusertimechk;
  320. TIME_VALUE &m_procusertime;
  321. bool &m_jobusertimechk;
  322. TIME_VALUE &m_jobusertime;
  323. bool &m_jobmsgontimelimit;
  324. BOOL m_bReadOnly;
  325. };
  326. class CAdvancedWiz :
  327. public CMySnapInPropertyWizardImpl<CAdvancedWiz>
  328. {
  329. public :
  330. CAdvancedWiz(WIZ_POSITION pos, int nTitle, bool *endjob, bool *unhandledexcept);
  331. ~CAdvancedWiz();
  332. enum { IDD = IDD_ADVANCED_WIZ };
  333. enum { ID_HeaderTitle = IDS_ADVANCED_HDRTITLE };
  334. enum { ID_HeaderSubTitle = IDS_ADVANCED_HDRSUBTITLE };
  335. BEGIN_MSG_MAP(CAdvancedWiz)
  336. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  337. MESSAGE_HANDLER(WM_HELP, OnWMHelp)
  338. CHAIN_MSG_MAP(CMySnapInPropertyWizardImpl<CAdvancedWiz>)
  339. END_MSG_MAP()
  340. LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  341. LRESULT OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  342. BOOL Validate(BOOL bSave = FALSE);
  343. BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
  344. BOOL OnWizardNext();
  345. void SetReadOnly() { m_bReadOnly = TRUE;}
  346. private:
  347. bool &m_endjob;
  348. bool &m_unhandledexcept;
  349. BOOL m_bReadOnly;
  350. };
  351. class CAdvBreakawayWiz :
  352. public CMySnapInPropertyWizardImpl<CAdvBreakawayWiz>
  353. {
  354. public :
  355. CAdvBreakawayWiz(WIZ_POSITION pos, int nTitle, bool *breakaway, bool *silentbreakaway);
  356. ~CAdvBreakawayWiz();
  357. enum { IDD = IDD_ADV_BREAKAWAY_WIZ};
  358. enum { ID_HeaderTitle = IDS_ADV_BREAKAWAY_HDRTITLE };
  359. enum { ID_HeaderSubTitle = IDS_ADV_BREAKAWAY_HDRSUBTITLE };
  360. BEGIN_MSG_MAP(CAdvBreakawayWiz)
  361. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  362. MESSAGE_HANDLER(WM_HELP, OnWMHelp)
  363. CHAIN_MSG_MAP(CMySnapInPropertyWizardImpl<CAdvBreakawayWiz>)
  364. END_MSG_MAP()
  365. LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  366. LRESULT OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  367. BOOL Validate(BOOL bSave = FALSE);
  368. BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
  369. BOOL OnWizardNext();
  370. void SetReadOnly() { m_bReadOnly = TRUE;}
  371. private:
  372. bool &m_breakaway;
  373. bool &m_silentbreakaway;
  374. BOOL m_bReadOnly;
  375. };
  376. #endif //ifdef __MANAGEMENTRULEWIZARDS_H__