关键词:
转自: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()如下:
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应用程序中有两个对话框,我希望其大小相同,并在设计视图中调整它们的大小,但状态栏中显示的对话框大... 查看详情