NotePad功能:
1.向上查找,大小写,全字匹配,利用CFindDlg的基类的成员函数实现;
switch case
PreTranslateMessage()函数
http://blog.sina.com.cn/s/blog_9cd8465f01010cwe.html
http://blog.csdn.net/liuzhuomju/article/details/7380539
2.查找对话框只允许出现一次,利用“if ...else...在主对话框Create CFindReplaceDialog之前判断”实现;
3.使用CWinAPP中的Profile相关函数实现退出时记录窗口位置和字体的功能,再次启动时位置和字体加载退出时的状态
4.PreTranslateMessage函数的使用(在class wizard中建立映射)可以实现快捷键设置的功能
关于PreTranslateMessage
MFC消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage(),通过重载这个函数,我们可以改变MFC的消息控制流程,甚至可以作一个全新的控制流出来。只有穿过消息队列的消息才受PreTranslateMessage()影响,采用SendMessage()或其他类似的方式向窗口直接发送的而不经过消息队列的消息根本不会理睬PreTranslateMessage()的存在。
顾名思义,PreTranslateMessage就是消息发送给窗口之前,提前拦截消息,然后对消息进行处理(即,改变了MFC的消息控制流程)
要注意一下两点:
1)是否调用TranslateMessage()和DispatchMessage()是由一个名称为PreTranslateMessage()函数的返回值决定的,如果该函数返回TRUE,则不会把该消息分发给窗口函数处理。
2)传给PreTranslateMessage()的消息是未经翻译过的消息,它没有经过TranslateMessage()处理。可以在该函数中使用(pMsg->wParam==VK_RETURN)来拦截回车键。
5.OnInitDialog在class wizard中添加如果找不到可以到最后一页的过滤器(Message filter)中设置为Dialog
6.实现快捷键的功能
定义快捷键的就是自定义加速键
1)首先在资源文件Accelerator中添加快捷键资源 ID选择你要关联菜单项的名称然后再设置你的快捷键
2)在.h文件中加入一个HACCEL hAccel;
3)变量然后在OnInitDialog或初始化中加入 hAccel=::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MENU_MAIN)); IDR_MENU_MAIN为加速键的资源文件名
4)最后在PreTranslateMessage(MSG* pMsg) 中加入:
[cpp] view plain copy
if(::TranslateAccelerator(GetSafeHwnd(),hAccel,pMsg))
return true;
这样 以后只要在Accelerator资源文件中添加快捷键就可以了
7.CFindReplaceDialog()这种非模式对话框建立“替代”和“替代全部”的映射方法:
方法一:
1.使用PreTranslateMessage()在消息传递之前拦截消息,提前处理
2.使用ON_BN_CLICKED(0X400,OnReplace)建立函数和控件的联系
方法二:
消息注册,消息映射,对话框创建
http://blog.sina.com.cn/s/blog_9cd8465f01010cwe.html