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

  • 相关阅读:
    面向对象的继承关系体现在数据结构上时,如何表示
    codeforces 584C Marina and Vasya
    codeforces 602A Two Bases
    LA 4329 PingPong
    codeforces 584B Kolya and Tanya
    codeforces 584A Olesya and Rodion
    codeforces 583B Robot's Task
    codeforces 583A Asphalting Roads
    codeforces 581C Developing Skills
    codeforces 581A Vasya the Hipster
  • 原文地址:https://www.cnblogs.com/kzang/p/2780246.html
Copyright © 2011-2022 走看看