颜色,文件和字体对话框(VC_MFC)
目录
(本章节中例子都是用 VS2005 编译调试的)
颜色对话框 CColorDialog
类成员变量
m_cc成员变量
作用: 记入选择结果,和对话框初始样式.
数据类型: CHOOSECOLOR 结构体. CHOOSECOLOR结构的定义如下(MSDN参考链接):
typedef struct { DWORD lStructSize; //结构长度 HWND hwndOwner; //对话框的拥有窗口 HWND hInstance; COLORREF rgbResult; //表示选择结果的样色值 COLORREF *lpCustColors; DWORD Flags; //设置颜色对话框的功能与外观 LPARAM lCustData; LPCCHOOKPROC lpfnHook; LPCTSTR lpTemplateName; } CHOOSECOLOR, *LPCHOOSECOLOR;
常用成员函数(MSDN链接)
获取颜色
函数原型:
COLORREF GetColor() const;
返回值: 返回一个COLORREF结构,其中包含了对话框中选中的颜色的RGB颜色值
说明: 本函数用于检索用户在对话框中选中的颜色.必须在DoModal之后调用
创建模态对话框
函数原型:
virtual int DoModal();
返回值: IDOK 或者 IDCANCEL.如果返回了IDCANCEL,则可以调用Windows函数CommDlgExtendedError来检测是否发生了错误
说明:
- 本函数用于显示Windows通用颜色对话框并接收用户的选择.
- 如果想通过设置m_cc结构的各个成员来初始化不同的颜色对话框,应在对话框对象构造之后,调用DoModal之前进行.
- 在调用DoModal之后,可以调用其它的成员函数检索设置信息和用户输入的信息
编写颜色对话框
流程图:
代码样例:
实现如下:
//创建颜色对话框对象 CColorDialog dlg; //修改颜色对话框相关属性 dlg.m_cc.Flags|=CC_RGBINIT; //创建模态的颜色对话框 if(IDOK==dlg.DoModal()) { //用选定的颜色输出文本 "颜色" CString str; CClientDC pDC(this); //pDC.SetTextColor(dlg.m_cc.rgbResult); pDC.SetTextColor(dlg.GetColor()); str = "颜色"; pDC.TextOutW(190,50,str); }
创建一个 MFC 基于对话框工程,然后在对话框上拖一个 button 控件,如下图所示,然后为 button 添加单击事件响应函数,在函数添加以上代码,后运行程序
字体对话框 CFontDialog
成员变量
m_cf 成员变量
作用: 用于保存字体对话框结果,和对话框初始样式.
数据类型: 一个指向 CHOOSEFONT 的结构的指针,结构定义如下:(MSDN链接)
typedef struct { DWORD lStructSize; HWND hwndOwner; HDC hDC; LPLOGFONT lpLogFont; //指向逻辑字体LOGFONT指针 INT iPointSize; DWORD Flags; //设置字体对话框的功能与外观 COLORREF rgbColors; LPARAM lCustData; LPCFHOOKPROC lpfnHook; LPCTSTR lpTemplateName; HINSTANCE hInstance; LPTSTR lpszStyle; WORD nFontType; WORD ___MISSING_ALIGNMENT__; INT nSizeMin; INT nSizeMax; } CHOOSEFONT, *LPCHOOSEFONT
其中 LOGFONT 结构定义如下:
typedef struct tagLOGFONT { LONG lfHeight; LONG lfWidth; LONG lfEscapement; LONG lfOrientation; LONG lfWeight; BYTE lfItalic; BYTE lfUnderline; BYTE lfStrikeOut; BYTE lfCharSet; BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality; BYTE lfPitchAndFamily; TCHAR lfFaceName[LF_FACESIZE]; //字体名称 } LOGFONT, *PLOGFONT;
常用成员函数(MSDN 链接)
[判断字体是否是突出][判断字体是否是下划线][判断字体是否是黑体][判断字体是否是斜体][获得选择字体颜色][返回字体大小][返回字体风格名称][返回字样名称][返回字体具体信息][调用模态对话框]
函数原型:
BOOL IsStrikeOut()const;
返回值: 如果被选字体具有突出特征,则返回非零值,否则为0
函数原型:
BOOL IsUnderline()const;
返回值: 如果被选字体具有下划线特征,则返回非零值,否则为0
函数原型
BOOL IsBold()const;
返回值: 如果选定字体具有黑体特征,则返回非零值,否则为0
函数原型:
BOOL IsItalic()const;
返回值: 如果被选字体具有斜体特征,则返回非零值,否则为0
函数原型:
COLORREF GetColor( )const;
返回值: 选定字体的颜色
说明: 调用此成员函数获取选定字体的颜色
函数原型 :
int GetSize( )const;
返回值: 字体大小,以0.1点表示
说明: 调用此成员函数获取选定字体的大小
函数原型:
CString GetStyleName( )const;
返回值: 字体的风格名称
说明: 调用此成员函数获取选定字体的风格名称
函数原型:
CString GetFaceName ( ) const;
返回值: 在CFontDialog对话框中选择字体的字样名称
说明: 调用此成员函数获取选择的字体字样名称
函数原型:
void GetCurrentFont(LPLOGFONT lplf);
参数说明: lplf 指向LOGFONT结构的指针
说明:
- 调用此成员函数,将当前选定字体的特征分配给各个LOGFONT结构的成员.其它CFontDialog成员函数访问当前字体的单个特征.
- 如果在调用DoModal时调用此成员函数,则返回当前选定部分(用户见到的或已被改变的).如果在DoModal之后调用此成员函数(仅当DoModal返回IDOK时),则返回用户实际选择的部分
函数原型:
virtual int DoModal( );
返回值: IDOK 或 IDCANCEL.如果返回 IDCANCEL,则调用 WindowsCommDlgExtendedError 函数判断是否发生了错误.IDOK 或 IDCANCEL 是表明用户选择了 OK 还是 Cancel 按钮的常数
说明:
- 调用此成员函数显示一个Windows通用字体对话框,并允许用户选择一种字体.
- 如果想用设置m_cf结构成员的方法初始化各种字体对话控件,则应在调用DoModal之前,及创建了对话对象之后进行.
- 如果DoModal返回IDOK,可用其它成员函数获得用户输入对话框的设置或信息
编写字体对话框
流程图:
代码样例:
实现如下:
//创建字体对话框对象 CFontDialog dlg; //修改字体对话框相关属性 dlg.m_cf.Flags |= CF_USESTYLE; //创建模态的字体对话框 if(IDOK==dlg.DoModal()) { //用选定的字体输出文本 "字体显示" CString str; CClientDC pDC(this); CFont *pOldFont,font; //用 CFont 创建对话框选中的逻辑字体 font.CreateFontIndirect(dlg.m_cf.lpLogFont); //将字体选入设备描述表 pOldFont=pDC.SelectObject(&font); //将字体选择的颜色设置为字体颜色 pDC.SetTextColor(dlg.m_cf.rgbColors); str = "字体显示,字体名称为:"; str += dlg.m_cf.lpLogFont->lfFaceName; pDC.TextOutW(10,50,str); //还原原先的字体 pDC.SelectObject(pOldFont); }
创建一个 MFC 基于对话框工程,然后在对话框上拖一个 button 控件,如下图所示,然后为 button 添加单击事件响应函数,在函数添加以上代码,后运行程序.
文件对话框 CFileDialog
成员变量
m_ofn 成员变量
作用: 用这个成员变量的记录选择结果,和对话框初始样式.
数据类型: 一个指向 OPENFILENAME 结构体指针
typedef struct tagOFN { DWORD lStructSize; HWND hwndOwner; HINSTANCE hInstance; LPCTSTR lpstrFilter; LPTSTR lpstrCustomFilter; DWORD nMaxCustFilter; DWORD nFilterIndex; LPTSTR lpstrFile; DWORD nMaxFile; LPTSTR lpstrFileTitle; DWORD nMaxFileTitle; LPCTSTR lpstrInitialDir; LPCTSTR lpstrTitle; DWORD Flags; WORD nFileOffset; WORD nFileExtension; LPCTSTR lpstrDefExt; LPARAM lCustData; LPOFNHOOKPROC lpfnHook; LPCTSTR lpTemplateName; #if (_WIN32_WINNT >= 0x0500) void *pvReserved; DWORD dwReserved; DWORD FlagsEx; #endif } OPENFILENAME, *LPOPENFILENAME;
成员函数(MSDN 链接)
[构造函数][获得文件完整路径][获得文件目录路径][获得文件名(含扩展名)][获得文件扩展名][获得文件名][获得第一个文件位置(在多选的情况)][返回文件路径,并设置下个位置(在多选的情况)][对话框模态创建]
函数原型:
explicit CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL, DWORD dwSize = 0 );
参数说明:
- bOpenFileDialog: 为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框
- lpszDefExt: 指定默认的文件扩展名
- lpszFileName: 指定默认的文件名
- dwFlags: 指明一些特定风格
- lpszFilter: 是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。参数格式如:
"Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";
- 文件类型说明和扩展名间用 | 分隔
- 同种类型文件的扩展名间可以用 ; 分割
- 每种文件类型间用 | 分隔
- 末尾用 || 指明.
- pParentWnd: 为父窗口指针.
函数原型:
CString GetPathName()const;
返回值: 得到完整的文件名包括目录名和扩展名如:c:\test\test1.txt
函数原型:
CString GetFolderPath( ) const;
返回值: 获得文件所在目录路径
函数原型:
CString GetFileName( )const;
返回值: 得到完整的文件名包括扩展名如:test1.txt
函数原型:
CString GetExtName()const;
返回值: 得到完整文件扩展名如:txt
函数原型:
CString GetFileTitle ()const;
返回值: 得到完整的文件名不包括目录名和扩展名如:test1
函数原型:
POSITION GetStartPosition()const;
返回值: 对于选择了多个文件的情况得到第一个文件位置
函数原型:
CString GetNextPathName( POSITION& pos )const;
返回值: 对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量
函数原型:
virtual int DoModal( );
返回值: IDOK 或者 IDCANCEL.如果返回了IDCANCEL,则可以调用Windows函数CommDlgExtendedError来检测是否发生了错误
说明:
- 本函数用于显示Windows通用颜色对话框并接收用户的选择.
- 如果想通过设置m_cc结构的各个成员来初始化不同的颜色对话框,应在对话框对象构造之后,调用DoModal之前进行.
- 在调用DoModal之后,可以调用其它的成员函数检索设置信息和用户输入的信息
文件对话框编程
流程图:
代码样例:
实现如下:
//创建字体对话框对象 CFileDialog dlg(true,0,0,OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY,L"Cpp File(*.cpp)|*.cpp|Chart Files (*.txt)|*.txt|All Files (*.*)|*.*||"); //创建模态的字体对话框 if(IDOK==dlg.DoModal()) { //用选定的字体输出文本 "字体显示" CString str; CClientDC pDC(this); str = "文件全路径: "; str += dlg.GetPathName(); pDC.TextOutW(10,50,str); }
创建一个 MFC 基于对话框工程,然后在对话框上拖一个 button 控件,如下图所示,然后为 button 添加单击事件响应函数,在函数添加以上代码,后运行程序.