友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
VC语言6.0程序设计从入门到精通-第16部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
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 所示。
图 4…30 文件对话框
使用文件对话框时,同样只需打开一个对应的模态对话框。CFileDialog 封装了文件对话
框的操作。相关代码在 CGridDemoDoc::OnFileOpen()函数中,添加步骤如下:
(1)创建 CGridDemoDoc::OnFileOpen()消息处理函数。
CGridDemoDoc::OnFileOpen()是文档类 CGridDemoDoc 处理“文件|打开”菜单消息的函
数。用户可以根据第 3 章的讲解,为 GridDemoDoc 添加 ID 为 ID_FILE_OPEN 的消息处理函
数,名称为 OnFileOpen,即可完成该处理函数的添加。
(2 )创建打开文件对话框对象。
这部分功能在 CGridDemoDoc::OnFileOpen() 函数的头部实现,其创建了名为 dlg 的
CFileDialog 类对象,代码如下:
//设置过滤器
char szFilters''=
〃数据文件 (*。dat)|*。dat|所有文件 (*。*)|*。*||〃;
//创建打开文件对话框
CFileDialog dlg (TRUE; 〃数据文件〃; 〃*。dat〃;
OFN_FILEMUSTEXIST| OFN_HIDEREADONLY; szFilters);
(3 )打开并使用打开文件对话框。
这部分功能在 CGridDemoDoc::OnFileOpen()函数中,具体如下:
//运行对话框
if( dlg。DoModal ()==IDOK )
{
//处理选中的文件
CString szPathName = dlg。GetPathName();
·94 ·
…………………………………………………………Page 104……………………………………………………………
第 4 章 对话框
SetTitle(dlg。GetFileTitle());
OnOpenDocument(szPathName); //打开文档
}
在这个步骤中,还可以用以下 CFileDialog 的一些成员函数获得对话框的选择。
o GetFileExt() :获得选定文件的后缀名。
o GetFileName() :获得选定文件的名称,包括后缀名。
o GetFileTitle() :获得选定文件的标题,即不包括后缀名。
o GetFolderPath() :获得选定文件的目录。
o GetNextPathName() :获得下一个选定的文件的路径全名。
o GetPathName() :获得选定文件的路径全名。
o GetReadOnlyPref() :获得是否“以只读方式打开”。
o GetStartPosition() :获得文件名列表中的第一个元素的位置。
4。5。5 字体对话框
字体对话框用于选择字体,如图 4…31 所示。CFontDialog 封装了字体对话框的操作,其
使用方法类似于其他模态通用对话框。
图 4…31 字体对话框
相关代码在 CGridDemoView::OnSetFont()函数中,添加步骤如下:
(1)添加 CGridDemoView::OnSetFont()消息处理函数。
CGridDemoView::OnSetFont() 函数是“编辑|字体”菜单的消息处理函数,对应 ID 为
ID_SET_FONT 。用户需要按照第 3 章的讲解,在“编辑”顶层菜单中添加标题为“字体”,
ID 为 ID_SET_FONT 的子菜单,然后为 CGridDemoView 类添加这个 ID 的消息处理函数,即
OnSetFont() 。
(2 )编辑 CGridDemoView::OnSetFont()消息处理函数使用字体对话框。代码如下:
void CGridDemoView::OnSetFont()
{
// TODO: Add your mand handler code here
//获得选中单元格的旧字体
CFont *pFont=m_CellArray'm_nCurCellID'。GetFont();
LOGFONT lf;
·95 ·
…………………………………………………………Page 105……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
if (pFont != NULL)
pFont…》GetObject(sizeof(LOGFONT); &lf);
else //单元格使用默认字体
::GetObject(GetStockObject(SYSTEM_FONT); sizeof(LOGFONT); &lf);
//使用选择字体对话框
CFontDialog dlg(&lf; CF_SCREENFONTS|CF_INITTOLOGFONTSTRUCT);
if (dlg。DoModal()==IDOK)
{
//设置新字体
m_CellArray'm_nCurCellID'。SetFont(&lf);
}
}
4。5。6 颜色对话框
当需要选择颜色的时候就可以使用 Windows 通用的颜色对话框,如图 4…32 所示。
CColorDialog 封装了字体对话框的使用,其使用方法与前面所述的模态通用对话框类似。
图 4…32 颜色对话框
GridDemo 例程中使用颜色对话框的代码在 CGridDemoView::OnSetColor()函数中。添加
步骤如下。
(1)添加 CGridDemoView::OnSetColor()消息处理函数。
CGridDemoView::OnSetColor() 函数是“编辑|颜色”菜单的消息处理函数,对应 ID 为
ID_SET_COLOR 。用户需要按照第 3 章的讲解,在“编辑”顶层菜单中添加标题为“颜色”,
ID 为 ID_SET_COLOR 的子菜单,然后为 CGridDemoView 类添加这个 ID 的消息处理函数,
即 OnSetColor() 。
(2 )编辑 CGridDemoView::OnSetColor()消息处理函数使用颜色对话框。代码如下:
void CGridDemoView::OnSetColor()
{
// TODO: Add your mand handler code here
//获得选中单元格的旧前景色
CColorDialog dlg(m_CellArray'm_nCurCellID'。GetFgColor());
if (dlg。DoModal()==IDOK)
·96 ·
…………………………………………………………Page 106……………………………………………………………
第 4 章 对话框
{
//设置新的前景颜色
m_CellArray'm_nCurCellID'。SetFgColor(dlg。GetColor());
}
}
4。6 消息对话框
消息对话框 MessageBox 是 Windows 系统中自带的最简单的对话框,用于提示一些简单
的信息,如图 4…33 所示。本章 4。1。3 节中实例 Sample4_1 在登录对话框的消息处理函数中就
大量使用了消息对话框。
图 4…33 消息对话框
在 MFC 中,消息对话框通过 CWnd::MessageBox()和 AfxMessageBox()两个函数进行调用。
前一个函数是 CWnd 的成员函数,而 AfxMessageBox()则是全局函数。两个函数的原型分别为:
int MessageBox(
LPCTSTR lpszText;
LPCTSTR lpszCaption = NULL;
UINT nType = MB_OK
);
int AfxMessageBox(
LPCTSTR lpszText;
UINT nType = MB_OK;
UINT nIDHelp = 0
);
o lpszText 参数:用于设置对话框的内容。
o lpszCaption 参数:用于设置对话框的标题。
o nType 参数:设置消息对话框的属性,属性可以为表 4…2 和表 4…3 中的取值的按位或的组合。
o nIDHelp 参数:用于设置帮助的上下文 ID 。
表 4…2 消息对话框主要参数——对话框类型
nType 取值 参数说明
MB_ABORTRETRY 有“终止”、“重试”和“忽略”按钮
MB_OK 有“确定”按钮
MB_OKCANCEL 有“确定”和“取消”按钮
MB_RETRYCANCEL 有“重试”和“取消”按钮
MB_YESNO 有“是”和“否”按钮
MB_YESNOCANCEL 有“是”、“否”和“取消”按钮
·97 ·
…………………………………………………………Page 107……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
表 4…3 消息对话框主要参数——对话框图标
nType 取值 显示图标
MB_ICONEXCLAMTION
MB_ICONWARNING
MB_ICONASTERISK
MB_ICONINFORMATION
MB_ICONQUESTION
MB_ICONHAND
MB_ICONSTOP
MB_ICONERROR
如图 4…33 所示的消息对话框可以用如下代码显示:
MessageBox(〃查找至末尾,是否从头开始查找?〃;
〃查找〃;MB_YESNO|MB_ICONQUESTION)
技巧:WM_MOUSEFIST 和 WM_MOUSELAST 分别指定了鼠标所能产生的第一个消息和最后一
个消息类型,因此程序可以 GetMessage (&msg; WM_MOUSEFIRST; WM_MOUSELAST )
函数等待并获取鼠标消息,获取的鼠标消息保存在参数 msg 中。
运行 MessageBox()或者 AfxMessageBox()都可打开模态消息对话框,返回值就是用户单
击的消息对话框的按钮 ID :
o IDABORT :单击“终止”按钮。
o IDCANCEL :单击“取消”按钮。
o IDIGNORE :单击“忽略”按钮。
o IDNO :单击“否”按钮。
o IDOK :单击“确定”按钮。
o IDRETRY :单击“重试”按钮。
o IDYES :单击“是”按钮。
4。7 本章小结
本章详细介绍了 Windows 系统中最常用的用户界面——对话框的使用,并根据对话框的
各种不同类型进行分类介绍。本章需要掌握的内容有:
o 一般对话框的创建和使用方法,包括模态和非模态对话框。
o 属性页对话框的创建和使用。
o 通用对话框的使用。
o 消息对话框的使用。
对话框在任何一个程序中都会大量使用,设计功能丰富完善、界面合理美观的对话框是
设计用户界面的重点和难点,需要认真学习、理解和掌握。
·98 ·
…………………………………………………………Page 108……………………………………………………………
第 5 章 常用控件
第 5 章 常用控件
在与用户的交互过程中,控件(Control )担任着重要的角色。MFC 提供了大量的控件类,
它们封装了控件的功能,通过这些控件类,可以方便地创建控件,对控件进行查询和控制。
控件可粗分为两类,一类是在 Windows 3。x 中就已支持的传统控件,另一类是 Windows
95/NT/2000 中支持的新型 Win32 控件,所有的控件类都是 CWnd 类的直接或间接派生类 。不
过对于新型 Win32 控件,应用程序只能创建控件对象而不能创建数据变量 。不管是什么类型
的控件,一般都具有 WS_CHILD 和 WS_VISIBLE 窗口风格,其中 WS_CHILD 指定窗口为子
窗口,WS_VISIBLE 使窗口是可见的。另外,大部分控件还具有 WS_TABSTOP 风格,
WS_TABSTOP 使控件具有 Tabstop 属性。MFC 类库提供的主要控件如表 5…1 所示。
表 5…1 常用控件列表
控件 功能 对应控件类
静态文本(Static Text ) 显示正文,一般不能接受输入信息 CStatic
显式位图、图标、方框和图元文件,一般不能接
图片(Picture ) CStatic
受输入信息
文本编辑框(Edit Box ) 输入并编辑正文,支持单行和多行编辑 CEdit
命令按钮(Button ) 响应用户的输入,触发相应的事件 CButton
用作选择标记,可以有选中、不选中和不确定 3
检查框(Check Box ) CButton
种状态
单选按钮(Radio Button ) 用来从两个或多个选项中选中一项 CButton
显示正文和方框,主要用来将相关的一些控件聚
组框(Group Box ) CButton
成一组
显示一个列表,用户可以从该列表中选择一项或
列表框(List Box ) CListBox
多项
是一个编辑框和一个列表框的组合,分为简易式、
组合框(bo Box ) CboBox
下拉式和下拉列表式
主要用来从一个预定义范围值中迅速而有效地选
滚动条(Scroll Bar ) CScrollBar
取一个整数值
列表控件(ListCtrl ) 主要用来显示列表型报表,提供多种显示模式 CListCtrl
树型控件(TreeCtrl ) 主要用来显示树状结构数据 CTreeCtrl
选项卡控件(TabCtrl ) 主要用来�
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!