VS2010&MFC对话框编程(4)——通用对话框

1 简要

    MFC提供公用对话框类包括以下几种:

    CColorDialog类:                     用于选择颜色对话框

    CFileDialog类:                        ........实现打开和保存文件对话框

    CFindReplaceDialog类:       ........查找和替换文本

    CFontDialog类:                      .........选择字体对话框

    COleDialog类:                        .........该类及其派生类用于生成OLE应用程序对话框

    CpageSetupDialog类:          ..........OLE Page Setup(指定页面设置和打印边界)

    CPrintDialog类:                      ..........打印和打印设置对话框


2 文件打开对话框

    简要

    首先在堆栈上构建一个CFileDialog类的对象,然后调用CFileDialog::DoModal()函数创建并显示对话框

    CFileDialog构造函数

    CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );

    参数意义如下:

    bOpenFileDialog 为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框。 

    lpszDefExt 指定默认的文件扩展名。 

    lpszFileName 指定默认的文件名。 
    dwFlags 指明一些特定风格。 
    lpszFilter 是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。参数格式如: "Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。 

    pParentWnd 为父窗口指针。 

    <例子>

    创建新工程Dialog,在菜单资源添加为“打开文件对话框”的菜单,ID为ID_FILEIO_DLG_OPEN,再添加菜单命令的的“打开文件对话框”的COMMAND命令消息处理函数,为OnFileioDlgOpen,代码如下:

   
void CDialogView::OnFileioDlgOpen()
{
	// TODO: 在此添加命令处理程序代码
	CFileDialog fileDlg(TRUE);//定义CFileDialog类对象,设第一个参数为TRUE,表示创建打开文件对话框
	fileDlg.m_ofn.lpstrFilter=LPCTSTR(_T("Text Files(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0"));
	//定义打开对话框的标题“打开文件”
	fileDlg.m_ofn.lpstrTitle=LPCTSTR(_T("打开文件"));
	char szchar[20];
	memset(szchar,0,20);
	if(fileDlg.DoModal() == IDOK)
	{
		CFile file(fileDlg.m_ofn.lpstrFile,CFile::modeRead);
		file.Read(szchar,20);
		file.Close();
		MessageBox(LPCTSTR(szchar));
	}
}
    效果如下:
VS2010&MFC对话框编程(4)——通用对话框_第1张图片

3 文件保存对话框

     创建新工程Dialog,在菜单资源添加为“保存文件对话框”的菜单,ID为 ID_FILEIO_DLG_SAVE,再添加菜单命令的的“打开文件对话框”的COMMAND命令消息处理函数,为 OnFileioDlgSave,代码如下:
   
//DialogView.h 
..................
public:
	CFont m_font;//用来保护字体对话框中设置的字体
	CString m_FontName;//用来存储字体对话框中字体的名称
.......................



//DialogView.cpp
void CDialogView::OnGraphFontset()
{
	// TODO: 在此添加命令处理程序代码
	CFontDialog m_setfontDlg;
	//如果已经产生了字体,那么创建为新字体,将原来的字体删除
	if(m_font.m_hObject)
		m_font.DeleteObject();
	if(m_setfontDlg.DoModal() == IDOK)
	{
		m_font.CreateFontIndirect(m_setfontDlg.m_cf.lpLogFont);
		m_FontName = m_setfontDlg.m_cf.lpLogFont->lfFaceName;
		Invalidate();//调用Invalidate重绘窗口
	}
}

    效果如下:
VS2010&MFC对话框编程(4)——通用对话框_第2张图片

4、颜色对话框

    简要

    首先在堆栈上构建一个CColorDialog类的对象,然后调用CColorDialog::DoModal()函数创建并显示对话框

    构造函数CColorDialog

    CColorDialog( COLORREF  clrInit  = 0, DWORD  dwFlags  = 0, CWnd*  pParentWnd  = NULL );

    clrInit 默认颜色选择。 如果未指定任何值,则默认值为RGB (0,0,0) (黑色)。
    dwFlags 自定义对话框的功能和外观的设置标志。 
    pParentWnd 指针到对话框的父级或所有者窗口。

    <例子>
    创建新工程Dialog,在菜单资源添加为“颜色设置”的菜单,ID为ID_GRAPH_CLRSET,再添加菜单命令的的“打开文件对话框”的COMMAND命令消息处理函数,为OnGraphClrset,

    在CDialogView.h头文件中声明一个COLORREF类型变量m_clr来保护用户设置的颜色,然后在CDialogView构造函数中对m_clr初始化,m_clr = REG(0,255,255)代码如下:

   
//DialogView.h 
..................
public:
	CFont m_font;//用来保护字体对话框中设置的字体
	CString m_FontName;//用来存储字体对话框中字体的名称
.......................



//DialogView.cpp
void CDialogView::OnGraphFontset()
{
	// TODO: 在此添加命令处理程序代码
	CFontDialog m_setfontDlg;
	//如果已经产生了字体,那么创建为新字体,将原来的字体删除
	if(m_font.m_hObject)
		m_font.DeleteObject();
	if(m_setfontDlg.DoModal() == IDOK)
	{
		m_font.CreateFontIndirect(m_setfontDlg.m_cf.lpLogFont);
		m_FontName = m_setfontDlg.m_cf.lpLogFont->lfFaceName;
		Invalidate();//调用Invalidate重绘窗口
	}
}

    效果如下:
VS2010&MFC对话框编程(4)——通用对话框_第3张图片

5 字体对话框

    简要

    首先在堆栈上构建一个CFontDialog类的对象,然后调用CFontDialog::DoModal()函数创建并显示对话框

    构造函数CFontDialog

    CFontDialog(LPLOGFONT lplfInitial = NULL , DWORD dwFlags = CF_EFFECTS | CF_SCREENFONTS , CDC* pdcPrinter = NULL , CWnd* pParentWnd = NULL);
      lplfInitial LOGFONT结构指针,用于设置默认的字体
    dwFlags 用于控制对话框的行为
    pdcPrinter 打印机设备内容指针
    pParentWnd “字体”对话框父窗口指针

    <例子>
    步骤1:创建新工程Dialog,在菜单资源添加为“字体设置”的菜单,ID为ID_GRAPH_FONTSET,再添加菜单命令的的“打开文件对话框”的COMMAND命令消息处理函数,为OnGraphFontset
    步骤2:在CDialogView.h头文件中声明一个CFont类型的变量m_font,用来存储字体对话框设置的字体,
    步骤3:CDialogView.h头文件中声明一个CString类型的变量m_fontName,用来保存字体对话框设置的设置字体的名称,
    代码如下:
//DialogView.h 
..................
public:
	CFont m_font;//用来保护字体对话框中设置的字体
	CString m_FontName;//用来存储字体对话框中字体的名称
.......................



//DialogView.cpp
void CDialogView::OnGraphFontset()
{
	// TODO: 在此添加命令处理程序代码
	CFontDialog m_setfontDlg;
	//如果已经产生了字体,那么创建为新字体,将原来的字体删除
	if(m_font.m_hObject)
		m_font.DeleteObject();
	if(m_setfontDlg.DoModal() == IDOK)
	{
		m_font.CreateFontIndirect(m_setfontDlg.m_cf.lpLogFont);
		m_FontName = m_setfontDlg.m_cf.lpLogFont->lfFaceName;
		Invalidate();//调用Invalidate重绘窗口
	}
}
效果如下:
VS2010&MFC对话框编程(4)——通用对话框_第4张图片

6 查找对话框

    创建新工程Dialog,在菜单资源添加为“查找”的菜单,ID为ID_EDIT_FIND,再添加菜单命令的的“打开文件对话框”的COMMAND命令消息处理函数,为OnEditFind,代码如下:
   
void CCFindReplaceDialogView::OnFind()
  {
     CFindReplaceDialog* pDlg = new CFindReplaceDialog();
 
     pDlg->Create( true, NULL, NULL, FR_DOWN, this );
     /*
        第一个参数为true显示的是查找对话框,为False时显示的是查找和替换对话框
         第二个参数指定在查找对话框中显示的字符串
          第三个参数指定在替换对话框中显示的字符串
         第四个参数为指定标志位,用来定制对话框,其中FR_DOWM表示对话框中的“向下”单选按钮被选中,否则“向上”单选按钮被选中,具体可取值参考MSDN
         第五个参数为指向父窗口的指针,如果为NULL,则为主框架窗口,使用时需要让它指向接收查找和替换消息的窗口
     */
     pDlg->ShowWindow( SW_SHOW );    // 显示对话框
}
    效果如下:
VS2010&MFC对话框编程(4)——通用对话框_第5张图片

7 页面设置对话框

    创建新工程Dialog,在菜单资源添加为“页面设置”的菜单,ID为ID_BUTPAGE,再添加菜单命令的的“打开文件对话框”的COMMAND命令消息处理函数,为OnButpage,代码如下:
void CDialogView::OnButpage()
{
	// TODO: 在此添加命令处理程序代码
	CPageSetupDialog dlg;//利用默认参数构造页面设置对话框
	PAGESETUPDLG psd = dlg.m_psd;
	CString str;
	str.Format(_T("页面大小为:%d * %d"), psd.ptPaperSize.x, psd.ptPaperSize.y);
	MessageBox( str, _T("页面设置"));
}
效果如下:
VS2010&MFC对话框编程(4)——通用对话框_第6张图片

8 打印对话框

     <例子>
    创建新工程Dialog,在菜单资源添加为“打印对话框”的菜单,ID为ID_ONBUTPRINT,再添加菜单命令的的“打开文件对话框”的COMMAND命令消息处理函数,为OnOnbutprint,代码如下:
void CDialogView::OnOnbutprint()
{
	// TODO: 在此添加命令处理程序代码
	DWORD dwflags=PD_ALLPAGES|PD_NOPAGENUMS|PD_USEDEVMODECOPIES|PD_SELECTION|PD_HIDEPRINTTOFILE;
	CPrintDialog dlg(FALSE, dwflags, NULL);
	if(dlg.DoModal() == IDOK)
	{
		CDC dc;
		dc.Attach(dlg.GetPrinterDC());
		//DrawStr(&dc, TRUE);
	}
}
    效果如下:
VS2010&MFC对话框编程(4)——通用对话框_第7张图片

你可能感兴趣的:(MFC,文件打开对话框,文件保存对话框,颜色对话框,字体对话框,查找对话框,页面设置对话框,打印对话框)