按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
dlg。m_psd。rtMargin=m_rectMargin;
(3 )打开页面设置对话框,保存程序用户设置的页面空白区域。这部分功能的实现代码
在 CGridDemoView::OnFilePrintSetup()函数中具体如下:
if (dlg。DoModal()==IDOK)
{
//设置新的页边空白区域
dlg。GetMargins(&m_rectMargin;NULL);
}
4。5。3 查找对话框
用户在查找字符串时,在查找对话框中可进行查找字符串的设置和其他查找选项的设
·91 ·
…………………………………………………………Page 101……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
置,如查找方向、是否区分大小写等,如图 4…29 所示。
图 4…29 查找对话框
查找对话框在 MFC 中封装为 CFindReplaceDialog 。该对话框跟其他 Windows 通用对话
框不同之处在于该对话框一般不作为模态对话框使用,而作为非模态对话框。如单击“查找
下一个”按钮时,对话框会向父窗口发送消息,通知主窗口进行查找。创建查找对话框的步
骤如下:
(1)添加“编辑|查找”菜单的消息处理函数 CGridDemoView::OnFind() 。
GridDemo 例程中创建查找对话框的代码在 CGridDemoView::OnFind() 函数中添加。
CGridDemoView::OnFind() 函 数 是 “ 编 辑 | 查 找 ” 菜 单 的 消 息 处 理 函 数 , 对 应 ID 为
ID_EDIT_FIND 。需要按照第 3 章的讲解,在“编辑”顶层菜单中添加标题为“查找”,ID 为
ID_EDIT_FIND 的子菜单,然后为 CGridDemoView 类添加这个 ID 的消息处理函数,即
OnFind() 。
(2 )为 CGridDemoView 类添加 CFindReplaceDialog 的指针成员变量。
按照 4。3 节中非模态对话框的创建过程,应当在堆中创建查找对话框的对象,因此,用
户还需为 CGridDemoView 添加类型为“CFindReplaceDialog * ”的 m_pFindDlg 成员变量。方
法为在 IDE 左侧工作区单击“ClassView ”选项卡,展开 GridDemo classes 节点,然后在
CGridDemoView 上单击鼠标右键,选择“Add Member Variable ”菜单项,打开“Add Member
Variable ”对话框,在“Variable Type ”栏中输入“CFindReplaceDialog * ”,在“Variable Name ”
栏中输入“m_pFindDlg ”的变量。
(3 )创建 CFindReplaceDialog 对象,并打开查找对话框。
这一功能由 CGridDemoView::OnFind()函数实现,代码如下:
void CGridDemoView::OnFind()
{
// TODO: Add your mand handler code here
//在堆中创建对话框
m_pFindDlg = new CFindReplaceDialog();
//打开一个没有匹配全词的查找对话框
m_pFindDlg…》Create( TRUE; 〃〃; 〃〃; FR_DOWN|FR_HIDEWHOLEWORD; this );
}
(4 )在 CGridDemoView 类中添加接收查找对话框 FINDMSGSTRING 消息的处理函数。
打开查找对话框后,当用户单击“查找下一个”或者其他按钮时,对话框会向父窗口发
送 FINDMSGSTRING 消息,这不是 MFC 中预先定义好的消息,故不能通过 ClassWizard 添
加消息处理函数,必须手动添加。添加过程如下:
o 先在 CGridDemoView。h 文件的头部“class CGridDemoView ”语句前添加如下代码,将
FINDMSGSTRING 消息注册为 WM_FINDREPLACE 自定义消息:
·92 ·
…………………………………………………………Page 102……………………………………………………………
第 4 章 对话框
const WM_FINDREPLACE = ::RegisterWindowMessage(FINDMSGSTRING);
o 同 时 在 CGridDemoView。h 文 件 的 CGridDemoView 类 的 声 明 中 找 到
DECLARE_MESSAGE_MAP() ”语句,在这个语句前一行添加如下语句作为消息处
“
理函数的声明:
afx_msg LONG OnFindReplace(WPARAM wParam; LPARAM lParam);
o 接着在 CGridDemoView。cpp 文件的头部找到“END_MESSAGE_MAP() ”语句,在这
个语句的前一行添加如下语句绑定消息 WM_FINDREPLACE 和消息处理函 数
OnFindReplace() :
ON_REGISTERED_MESSAGE(WM_FINDREPLACE; OnFindReplace)
o 最后在 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 参数获得查找对话框的指针,然后访问查找对话
框对象查询当前的查找状态,主要有以下一些查询函数。
o FindNext() :查询用户是否单击“查找下一个”按钮。
o GetFindString() :获得查找字符串。
o GetReplaceString() :获得替换字符串。
o IsTerminating() :获得对话框是否关闭。
o MatchCase() :获得是否区分大小写。
o MatchWholeWord() :获得是否匹配全词。
·93 ·
…………………………………………………………Page 103……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
o ReplaceAll() :查询用户是否单击“替换全部”按钮。
o ReplaceCurrent() :查询用户是否单击“替换”按钮。
o SearchDown():查询用户是否想向下查找。
完成上述 4 个步骤,就可以在 GridDemo 例程中使用查找对话框了。
4。5。4 文件对话框
文件对话框一般出现在用户打开或保存文件时,用于选择打开或保存的文件路径,如图
4…30 所示。