WTL 学习笔记 -- Property Sheets and Wizards

 

属性页和向导也是很常用的组件,两者表现形式大不相同,但功能差不多,无非前者所有界面同时出现,而后者要按规定的次序出现罢。MFC中提供属性页组件,实在太难用,现在还记忆犹新。

 

WTL中的属性页是否有所改进呢?答案是当然的,对于简单情况,几行代码就搞定了,对于复杂情况,使用也很直观,总之你无需要花太多精力在这种手段身上。

 

让我们先看看最很简单的情况:

         CPropertySheet sheet;

         CPropertyPage<IDD_ABOUTBOX> page;

         sheet.AddPage(page);

         sheet.DoModal();

 

怎么样,4行代码就搞定了,很简单吧。当然,实际情况决不会这么简单,因为这些对话是用来对话的,而不只是用来显示信息。这时就需要实现Page的子类:

1.         CpropertyPageImpl继承。

class CColorPage  : public CPropertyPageImpl<CColorPage>

2.         指定属性页的图标。

         CColorPage()

         {

                   m_psp.dwFlags |= PSP_USEICONID;

                   m_psp.pszIcon = MAKEINTRESOURCE(IDR_MAINFRAME); 

                   m_psp.hInstance = _Module.GetResourceInstance();

         }

3.         指定对话框资源ID

enum {IDD = IDD_COLOR};

4.         CpropertyPageImpl能接收消息

CHAIN_MSG_MAP(CPropertyPageImpl<CColorPage>)

5.         让数据修改后,让Apply按钮有效

         LRESULT OnColorChange(WORD wNotifyCode, WORD wID, HWND hWnd, BOOL& bHandled)

         {

                   this->SetModified(TRUE);

                   return 0;

         }

6.         处理Apply消息

         int OnApply()

         {

                   MessageBox("ApplyPage");

 

                   return 0;

         }