13. 属性页处理通知消息
CPropertyPageImpl有一个消息映射处理WM_NOTIFY。如果通知代码是PSN_*的值,OnNotify()就会调用相应的通知处理函数。这使用了编译阶段虚函数机制,从而使得派生类可以很容易的重载这些处理函数。
由于WTL 3和WTL 7设计的改变,从而存在两套不同的通知处理机制。在WTL 3中通知处理函数返回的值与PSN_*消息的返回值不同,例如,WTL 3是这样处理PSN_WIZFINISH的:
case PSN_WIZFINISH:
lResult = !pT->OnWizardFinish();
break;
OnWizardFinish() 期望返回TRUE结束向导,FALSE阻止关闭向导。这个方法很简陋,但是IE5的通用控件对PSN_WIZFINISH处理的返回值添加了新解释,他返 回需要获得焦点的窗口的句柄。WTL 3的程序将不能使用这个特性,因为它对所有非0的返回值都做相同的处理。
在WTL 7中,OnNotify() 没有改变 PSN_* 消息的返回值,处理函数返回任何文档中规定的合法数值和正确的行为。当然,为了向前兼容,WTL 3 仍然使用当前默认的工作方式,要使用WTL 7的消息处理方式,你必须在中including atldlgs.h一行之前添加一行定义:
#define _WTL_NEW_PAGE_NOTIFY_HANDLERS
编写新的代码没有理由不使用WTL 7的消息处理函数,所以这里就不介绍WTL 3的消息处理方式。
CPropertyPageImpl 为所有消息提供了默认的通知消息处理函数,你可以重载与你的程序有关的消息处理函数完成特殊的操作。默认的消息处理函数和相应的行为如下:
int OnSetActive() - 允许页面成为激活状态
BOOL OnKillActive() - 允许页面成为非激活状态
int OnApply() - 返回 PSNRET_NOERROR 表示应用操作成功完成
void OnReset() - 无相应的动作
BOOL OnQueryCancel() - 允许取消操作
int OnWizardBack() - 返回到前一个页面
int OnWizardNext() - 进行到下一个页面
INT_PTR OnWizardFinish() - 允许向导结束
void OnHelp() - 无相应的动作
BOOL OnGetObject(LPNMOBJECTNOTIFY lpObjectNotify) - 无相应的动作
int OnTranslateAccelerator(LPMSG lpMsg) - 返回 PSNRET_NOERROR 表示消息没有被处理
HWND OnQueryInitialFocus(HWND hWndFocus) - 返回 NULL 表示将按Tab Order顺序的第一个控件设为焦点状态
属性页处理通知消息
来源:清泛编译 2016-05-23 13:43:54 人气: 我有话说( 0 人参与)
1.属性页的添加:创建对话框的类,该类要从CpropertyPage继承;然后在要添加该对话框为 属性页的类(头文件)里创建CpropertySheet类的一
上一篇:std::find,std::find_if使用小结
下一篇:MFC Telnet Application(mfc telnet 端口,代码实现、不调用telnet.exe)
本文源自互联网,采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可,
版权归原作者,如有问题请联系service@tsingfun.com (编辑:admin)
版权归原作者,如有问题请联系service@tsingfun.com (编辑:admin)
相关热点
- 1google mock分享(全网最全最好的gmock文...
- 2【解决】asan runtime does not come ...
- 3MFC学习总结 (90个技巧) dlg 上建立View
- 4coinitialize失败,返回值是0x80010106 无...
- 5VS Addin插件基本开发入门
- 6c++编译错误:invalid new-expression of abstract class type
- 7use of deleted function std::unique_...
- 8hidden symbol ... is referenced by DSO 剖析
- 9C++使用OLE/COM高速读写EXCEL的源码
- 10error C2664: “std::list<_Ty>::list(co...
本月排行
- 1google mock分享(全网最全最... 266次浏览
- 2【解决】asan runtime does... 259次浏览
- 3浅析Linux段错误:SEGV_MAPERR... 137次浏览
- 4hidden symbol ... is referenced by DSO 剖析 112次浏览
- 5【解决】munmap_chunk(): invalid pointer 74次浏览
- 6Reference to ' ' is ambi... 74次浏览
- 7coinitialize失败,返回值是0x8... 73次浏览
- 8use of deleted function s... 60次浏览
- 9C++ Lock-free Hazard Pointer(冒险指针) 59次浏览
- 10stl 字符串std::string作为std... 51次浏览
评论排行
- 1C++ 读写xml方法整理(持续更新)3次评论
- 2Reference to ' ' is ambiguous:符号定义重复2次评论
- 3全民OS2次评论
- 4__attribute__2次评论
- 5海量数据相似度计算之simhash和海...2次评论
- 6C++使用OLE/COM高速读写EXCEL的源码2次评论
- 7AfxIsValidAddress 测试内存地址2次评论
- 8C++入门进阶最佳实战2次评论
- 9解决xrdp登陆不上的问题:xrdp s...2次评论
- 10VC 自绘日历,有绘制日历需求的...2次评论