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; } |