vs2010-mfc(对话框:字体对话框)(代码片段)

tang-tangt tang-tangt     2022-12-21     452

关键词:

 

转自:http://www.jizhuomi.com/software/175.html

 

       字体对话框的作用是用来选择字体。我们也经常能够见到。MFC使用CFontDialog类封装了字体对话框的所有操作。字体对话框也是一种模态对话框

 

       CFontDialog类构造函数

       我们先来了解CFontDialog类。它的常用构造函数原型如下:

CFontDialog(
   LPLOGFONT lplfInitial = NULL,
   DWORD dwFlags = CF_EFFECTS | CF_SCREENFONTS,
   CDC* pdcPrinter = NULL,
   CWnd* pParentWnd = NULL 
);

       参数说明:

       lplfInitial:指向LOGFONT结构体数据的指针,可以通过它设置字体的一些特征。

       dwFlags:指定选择字体的一个或多个属性,详情可在MSDN中查阅。

       pdcPrinter:指向一个打印设备上下文的指针。

       pParentWnd:指向字体对话框父窗口的指针。

 

       上面的构造函数中第一个参数为LOGFONT指针,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;

 

 

       获取字体对话框中所选字体

       我们在字体对话框中选择了字体后,如何获取选定的字体呢?我们可以通过CFontDialog类的成员变量m_cf间接获得选定字体的CFont对象。m_cf是CHOOSEFONT类型的变量,CHOOSEFONT结构体定义如下:

typedef struct 

    DWORD lStructSize;

    HWND hwndOwner;

    HDC hDC;

    LPLOGFONT lpLogFont;

    INT iPointSize;

    DWORD Flags;

    COLORREF rgbColors;

    LPARAM lCustData;

    LPCFHOOKPROC lpfnHook;

    LPCTSTR lpTemplateName;

    HINSTANCE hInstance;

    LPTSTR lpszStyle;

    WORD nFontType;

    INT nSizeMin;

    INT nSizeMax;

 CHOOSEFONT, *LPCHOOSEFONT;

 

       CHOOSEFON结构体中有个成员lpLogFont,它是指向LOGFONT结构体变量的指针,就像上面所说,LOGFONT中包含了字体特征,例如,我们可以通过LOGFONT的lfFaceName得知字体名

       我们最终要获得的是所选择字体的CFont对象,有了字体的LOGFONT怎样获得对应的CFont对象呢?使用CFont类的成员函数CreateFontIndirect可以达到此目的。函数原型如下:

       BOOL CreateFontIndirect(const LOGFONT* lpLogFont );

       参数是LOGFONT指针类型,我们可以传入CFontDialog类成员变量m_cf的lpLogFont成员,就可以得到所选字体的CFont对象了。

 

 

       字体对话框应用实例

       鸡啄米给大家做一个字体对话框的实例。先介绍此实例要实现的功能,生成一个对话框,对话框中放置一个“字体选择”按钮和一个编辑框。点击“字体选择”按钮将弹出字体对话框。编辑框用于显示所选字体名,并以选定的字体来显示字体名字符串,例如,如果选择了宋体,则在编辑框中以宋体显示字符串“宋体”。

 

       以下是创建此实例的步骤:

       1.创建一个基于对话框的MFC工程,名字为“Example18”。

       2.在自动生成的主对话框IDD_EXAMPLE18_DIALOG的模板中,删除“TODO: Place dialog controls here.”静态文本框,添加一个按钮,ID设为IDC_FONT_BUTTON,Caption设为“字体选择”,用于显示字体对话框来选择字体,再添加一个编辑框,ID设为IDC_FONT_EDIT,用来以所选字体显示字体名字符串。

       3.在Example18Dlg.h中为CExample18Dlg类添加private成员变量:CFont m_font;,用来保存编辑框中选择的字体。

       4.为按钮IDC_FONT_BUTTON添加点击消息的消息处理函数CExample18Dlg::OnBnClickedFontButton()。

       5.修改消息处理函数CExample18Dlg::OnBnClickedFontButton()如下:

 

C++代码
void CExample18Dlg::OnBnClickedFontButton()   
   
    // TODO: Add your control notification handler code here   
    CString strFontName;    // 字体名称   
    LOGFONT lf;             // LOGFONT变量   
  
    // 将lf所有字节清零   
    memset(&lf, 0, sizeof(LOGFONT));   
  
    // 将lf中的元素字体名设为“宋体”   
    _tcscpy_s(lf.lfFaceName, LF_FACESIZE, _T("宋体"));   
       
    // 构造字体对话框,初始选择字体名为“宋体”   
    CFontDialog fontDlg(&lf);   
  
    if (IDOK == fontDlg.DoModal())     // 显示字体对话框   
       
        // 如果m_font已经关联了一个字体资源对象,则释放它   
        if (m_font.m_hObject)   
           
            m_font.DeleteObject();   
           
        // 使用选定字体的LOGFONT创建新的字体   
        m_font.CreateFontIndirect(fontDlg.m_cf.lpLogFont);   
        // 获取编辑框IDC_FONT_EDIT的CWnd指针,并设置其字体   
        GetDlgItem(IDC_FONT_EDIT)->SetFont(&m_font);   
  
        // 如果用户选择了字体对话框的OK按钮,则获取被选择字体的名称并显示到编辑框里   
        strFontName = fontDlg.m_cf.lpLogFont->lfFaceName;   
        SetDlgItemText(IDC_FONT_EDIT, strFontName);   
       
  

 

       6.最后,编译运行程序。显示结果对话框,点击“字体选择”按钮,将弹出字体对话框,默认选择为“宋体”,我们改而选择“华文彩云”字体点“确定”,编辑框中会像如下显示:

技术分享图片

技术分享图片

技术分享图片

技术分享图片

 

      

 

 

到此,我们又学会了字体对话框的使用,对于以后在界面开发中控制显示的字体很有帮助。

 






(转载)vs2010/mfc编程入门之十九(对话框:颜色对话框)

 鸡啄米在上一节中为大家讲解了字体对话框的使用方法,熟悉了字体对话框,本节继续讲另一种通用对话框--颜色对话框。      颜色对话框大家肯定也不陌生,我们可以打开它选择需要的颜色,简单说... 查看详情

vs2010-mfc(对话框:属性页对话框及相关类的介绍)(代码片段)

...huomi.com/software/164.html     一 属性页对话框的分类      属性页对话框想必大家并不陌生,XP系统中桌面右键点属性,弹出的就是属性页对话框,它通过标签切换各个页面。另外,我们在... 查看详情

vs2010-mfc(对话框:为控件添加消息处理函数)(代码片段)

 转自:http://www.jizhuomi.com/software/156.html  MFC为对话框和控件等定义了诸多消息,我们对它们操作时会触发消息,这些消息最终由消息处理函数处理。比如我们点击按钮时就会产生BN_CLICKED消息,修改编辑框内容时会产生... 查看详情

(转载)vs2010/mfc编程入门之十三(对话框:属性页对话框及相关类的介绍)

前面讲了模态对话框和非模态对话框,本节开始鸡啄米讲一种特殊的对话框--属性页对话框。另外,本套教程所讲大部分对VC++各个版本均可适用或者稍作修改即可,但考虑到终究还是基于VS2010版本的,所以将《VC++/MFC编程入门》... 查看详情

vs2010/mfc编程(对话框:模态对话框及其弹出过程)

讲讲什么是模态对话框和非模态对话框,以及模态对话框怎样弹出。   一.模态对话框和非模态对话框      Windows对话框分为两类:模态对话框和非模态对话框。      模态对话框是... 查看详情

vs2010-mfc(对话框:创建对话框模板和修改对话框属性)

 转自:http://www.jizhuomi.com/software/149.html 对话框,大家应该很熟悉了,在我们常用的软件中大多都有对话框界面,例如,360安全卫士的主界面其实就是个对话框,只是它做了很多美工方面的工作,将其大大美化了。 创... 查看详情

(转载)vs2010/mfc编程入门之十一(对话框:模态对话框及其弹出过程)

加法计算器对话框程序大家照着做一遍后,相信对基于对话框的程序有些了解了,有个好的开始对于以后的学习大有裨益。趁热打铁,鸡啄米这一节讲讲什么是模态对话框和非模态对话框,以及模态对话框怎样弹出。  &nb... 查看详情

(转载)vs2010/mfc编程入门之十五(对话框:一般属性页对话框的创建及显示)

属性页对话框包括向导对话框和一般属性页对话框两类,上一节鸡啄米讲了如何创建并显示向导对话框,本节将继续介绍一般属性页对话框的创建和显示。      实际上,一般属性页对话框的创建和显示过程... 查看详情

vs2010-mfc(常用控件:静态文本框)

 转自:http://www.jizhuomi.com/software/179.html 关于对话框的使用和各种通用对话框的介绍就到此为止,从本节开始将讲解各种常用控件的用法。常用控件主要包括:静态文本框、编辑框、单选按钮、复选框、分组框、列表框、... 查看详情

vs2010/mfc编程入门之二十(常用控件:静态文本框)

...sp;感谢鸡啄米对本文的贡献。 上一节鸡啄米讲了颜色对话框之后,关于对话框的使用和各种通用对话框的介绍就到此为止了。从本节开始鸡啄米将讲解各种常用控件的用法。常用控件主要包括:静态文本框、编辑框、单选按... 查看详情

vs2010/mfc编程入门之五十一(图形图像:gdi对象之画刷cbrush)

...实例的方式来说明画刷的用法。此实例要实现的功能是,对话框上有一个按钮控件和一个图片控件,点击按钮弹出颜色对话框,然后在颜色对话框中选择颜色并点击“确定”后,图片控件中将显示选择的颜色。&nbs 查看详情

(转载)vs2010/mfc编程入门之五十一(图形图像:gdi对象之画刷cbrush)

...实例的方式来说明画刷的用法。此实例要实现的功能是,对话框上有一个按钮控件和一个图片控件,点击按钮弹出颜色对话框,然后在颜色对话框中选择颜色并点击“确定”后,图片控件中将显示选择的颜色。&nbs 查看详情

vs2010radiobutton起始默认选中

VS2010MFC对话框中控件radiobutton起始默认选中如何设置?还有checkBox如何起始默认选中?方式一,控件属性里面有可以找到,更改属性值为true,方式二:代码设置,双击窗体进入窗体Load事件里面,radioButton.chechked=true参考技术A在Form... 查看详情

如何根据用户输入创建动态变化的对话框 Visual Studio 2010 (mfc)

】如何根据用户输入创建动态变化的对话框VisualStudio2010(mfc)【英文标题】:Howtocreatedynamicallychangingdialogboxvisualstudio2010(mfc)basedonuserinput【发布时间】:2013-12-0722:00:05【问题描述】:我浏览了整个互联网,但似乎仍然无法找到这个... 查看详情

vs2008中怎样修改mfc界面字体大小

参考技术A右键对话框,在对话框属性 字体(Font)中,设置所有控件中字体大小。。追问不是以对话框写的,就是这个不是通过控件写的字,而是通过语句编写插入主界面的,这样的情况怎么解决?追答嗯,比如是要改变编... 查看详情

java对话与风格。字体:https://stackoverflow.com/questions/18799216/how-to-make-a-edittext-box-in-a-dialog(代码片

查看详情

MFC GetLastError 返回 5(拒绝访问)

...发布时间】:2014-05-2707:41:54【问题描述】:我正在构建MFC对话框应用程序。我使用VisualStudio2010、MFC2008/2010。在我的cpp文件中,我有一些代码来获取进程的信息。进程用户名为SYSTEM。HANDLEhProcess=OpenProcess(PROCES 查看详情

VS 2010 中不同大小的对话框

】VS2010中不同大小的对话框【英文标题】:DifferentsizeofdialogsinVS2010【发布时间】:2012-11-0508:26:50【问题描述】:我的MFC应用程序中有两个对话框,我希望其大小相同,并在设计视图中调整它们的大小,但状态栏中显示的对话框大... 查看详情