按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
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()两个函数进行调用。
前一个函数是 CW