颜色,文件和字体对话框(VC_MFC)

目录 

颜色对话框
字体对话框
文件对话框

(本章节中例子都是用 VS2005 编译调试的)


颜色对话框 CColorDialog

[成员变量][成员函数][编写颜色对话框]

类成员变量

m_cc成员变量

作用:  记入选择结果,和对话框初始样式.

数据类型:   CHOOSECOLOR 结构体. CHOOSECOLOR结构的定义如下(MSDN参考链接):

View Code
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之后,可以调用其它的成员函数检索设置信息和用户输入的信息

 

编写颜色对话框

流程图:

代码样例:

实现如下:

View Code
//创建颜色对话框对象
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链接)

View Code
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 结构定义如下:

View Code
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,可用其它成员函数获得用户输入对话框的设置或信息

 

编写字体对话框

流程图:

代码样例:

实现如下:

View Code
//创建字体对话框对象
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 结构体指针

View Code
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之后,可以调用其它的成员函数检索设置信息和用户输入的信息

 

文件对话框编程

流程图:

代码样例:

实现如下:

View Code
//创建字体对话框对象
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 添加单击事件响应函数,在函数添加以上代码,后运行程序.

posted @ 2012-11-21 10:24  kzangv  阅读(5341)  评论(0编辑  收藏  举报
top