理函数。
打开查找对话框后,当用户单击“查找下一个”或者其他按钮时,对话框会向父窗口发
送FINDMSGSTRING 消息,这不是MFC 中预先定义好的消息,故不能通过ClassWizard 添
加消息处理函数,必须手动添加。添加过程如下:
? 先在CGridDemoView.h 文件的头部“class CGridDemoView”语句前添加如下代码,将
FINDMSGSTRING 消息注册为WM_FINDREPLACE 自定义消息:
枫叶文学网www.fywxw.com
第4 章 对话框
·93·
const WM_FINDREPLACE = ::RegisterWindowMessage(FINDMSGSTRING);
? 同时在CGridDemoView.h 文件的CGridDemoView 类的声明中找到
“DECLARE_MESSAGE_MAP()”语句,在这个语句前一行添加如下语句作为消息处
理函数的声明:
afx_msg LONG OnFindReplace(WPARAM wParam, LPARAM lParam);
? 接着在CGridDemoView.cpp 文件的头部找到“END_MESSAGE_MAP()”语句,在这
个语句的前一行添加如下语句绑定消息WM_FINDREPLACE 和消息处理函数
OnFindReplace():
ON_REGISTERED_MESSAGE(WM_FINDREPLACE, OnFindReplace)
? 最后在CGridDemoView.cpp 文件的末尾编写CGridDemoView::OnFindReplace()函数,
其代码如下:
LRESULT CGridDemoView::OnFindReplace(WPARAM wparam, LPARAM lparam)
{
//获得查找对话框的对象指针
CFindReplaceDialog *pDlg = CFindReplaceDialog::GetNotifier(lparam);
if( NULL != pDlg )
{
if (pDlg->FindNext())
{
//处理单击“查找下一个”按钮的查找处理
??
}
}
else if (pDlg->IsTerminating())
{
//处理查找对话框关闭的消息
delete pDlg; //删除对话框对象
}
return 0;
}
在CGridDemoView::OnFindReplace()查找消息处理函数中,先调用了CFindReplaceDialog
静态成员函数GetNotifier 根据消息的lparam 参数获得查找对话框的指针,然后访问查找对话
框对象查询当前的查找状态,主要有以下一些查询函数。
? FindNext():查询用户是否单击“查找下一个”按钮。