• 颜色,文件和字体对话框(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 添加单击事件响应函数,在函数添加以上代码,后运行程序.

  • 相关阅读:
    NopCommerce4.2 常见错误及异常处理
    使用NopCommerce微信电商系统
    简单理解Socket
    html5 postMessage解决跨域、跨窗口消息传递
    html5 Web Workers
    node.js module初步理解
    node.js调试
    最简单的JavaScript模板引擎
    简单JavaScript模版引擎优化
    容易被忽略CSS特性
  • 原文地址:https://www.cnblogs.com/kzang/p/2780246.html
Copyright © 2020-2023  润新知