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; } |
本文介绍如何使用WTL简化属性页的创建过程。通过简单的代码示例展示了基本属性页的实现,并进一步讲解了如何定制属性页,包括设置图标、处理用户输入等步骤。
2516

被折叠的 条评论
为什么被折叠?



