孙鑫 第十课之二 字体选择对话框编程(笔记+转载)
2012-12-05 17:18
417 查看
1 CFontDialog类
数据成员 m_cf
CHOOSEFONT m_cf; 是一个CHOOSEFONT结构体类型的变量
typedef struct {
DWORD lStructSize; //结构长度
HWND hwndOwner; //所属窗口
HDC hDC; //当Flags标志指定CF_PRINTERFONTS标志时,它是打印机的DC句柄
LPLOGFONT lpLogFont; //指向一个LOGFONT结构
INT iPointSize; //选择的字体的大小,单位是1/10磅
DWORD Flags; //标志
COLORREF rgbColors; //选择的字体的颜色
LPARAM lCustData; //
LPCFHOOKPROC lpfnHook; //
LPCTSTR lpTemplateName; //
HINSTANCE hInstance; //
LPTSTR lpszStyle; //
WORD nFontType; //
INT nSizeMin; //当指定标志有CF_LIMITSIZE时,这个值是字体的最小点数
INT nSizeMax; //当指定标志有CF_LIMITSIZE时,这个值是字体的最大小点数
} CHOOSEFONT, *LPCHOOSEFONT;
结构体中成员lpLogFont是一个指向LOGFONT结构体的指针
Flags有几个可用的值:如果指定了标志CF_INITTOLOGFONTSTRUCT,打开该对话框时用lpLogFont指定值初始化对话框所显示的值。
rgbColor---如果Flags标志中指定CF_EFFECTS,对话框将根据这个数值初始化“颜色”下拉式列表框。另外,函数在返回时在这里返回用户选择的字体颜色。
nFontType---返回用户选择的字体属于哪一类,可能返回值是:BOLD_FONTTYPE,ITALIC_FONTTYPE,PRINTER_FONTTYPE,REGULAR_FONTTYPE和SCREEN_FONTTYPE。
Flags---该字段的初始值决定对话框的不同行为,函数返回时也会在这里返回一些用户的选择,它可以是下列值的组合:
CF_BOTH //对话框同时列出打印机字体和屏幕字体
CF_TTONLY //对话框只显示TrueType字体
CF_EFFECTS //对话框只显示“效果”复选框
CF_FIXEDPITCHONLY //对话框的字体列表中只显示等宽字体
CF_LIMITSIZE //对话框显示的字体尺寸限于nSizeMin和nSizeMax字段指定的数值之间
CF_NOSTYLESEL //对话框不显示“字形”组合列表框
CF_NOSIZESEL //对话框不显示“大小”组合列表框
CF_SCREENFONTS //字体列表中只显示屏幕字体
调用ChooseFont函数时,函数会停留直到对话框关闭为止,当用户单击了对话框中的“确定”按钮时,函数返回TRUE;用户单击“取消”按钮时,函数返回FALSE。
在调用ChooseFont函数之前,lpLogFont字段被指向一个LOGFONT结构,对话框关闭时,函数在LOGFONT结构的lfFaceName字段中返回字体的名称,字体的效果和字形也在LOGFONT结构中返回。
用户选择的颜色在rgbColor字段中返回,字体大小在iPointSize字段中返回,由于单位是1/10磅,所以返回的数值等于对话框中选择的字体大小乘以10。
函数实例代码片段如下:
HWND hwnd; // owner window
HDC hdc; // display device context of owner window
CHOOSEFONT cf; // common dialog box structure
static LOGFONT lf; // logical font structure
static DWORD rgbCurrent; // current text color
HFONT hfont, hfontPrev;
DWORD rgbPrev;
// Initialize CHOOSEFONT
ZeroMemory(&cf, sizeof(cf));
cf.lStructSize = sizeof (cf);
cf.hwndOwner = hwnd;
cf.lpLogFont = &lf;
cf.rgbColors = rgbCurrent;
cf.Flags = CF_SCREENFONTS | CF_EFFECTS;
if (ChooseFont(&cf)==TRUE)
{
hfont = CreateFontIndirect(cf.lpLogFont);
hfontPrev = SelectObject(hdc, hfont);
rgbCurrent= cf.rgbColors;
rgbPrev = SetTextColor(hdc, rgbCurrent);
. .....
}
2 自己遇到的例子
void CMy53View::OnFont()
{
CFontDialog dlg;
dlg.m_cf.Flags |= CF_INITTOLOGFONTSTRUCT | CF_EFFECTS | CF_LIMITSIZE;
dlg.m_cf.rgbColors = color; //color 为上一次所选择的颜色
dlg.m_cf.nSizeMin = 1; //指定了标志CF_LIMITSIZE,所以这是字号最小点
dlg.m_cf.nSizeMax = 72; //字号最大点数
if(IDOK == dlg.DoModal())
{
if (font.m_hObject) //如果字体已经创建,那么先把字体对象和字体资源分离
{
font.DeleteObject();
}
font.CreateFontIndirect(dlg.m_cf.lpLogFont); //用该指针变量来创建字体
color = dlg.m_cf.rgbColors; //选择字体
strFontName = dlg.m_cf.lpLogFont->lfFaceName; //字体名
Invalidate(); //使窗口不可用,此时View类的OnDraw()函数调用重绘窗口,在OnDraw()函数里 写使用这个 字体和颜色输出文字的代码
}
}
void CMy53View::OnDraw(CDC* pDC)
{
CMy53Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CFont *pOldFont = pDC->SelectObject(&font);
pDC->SetTextColor(color);
pDC->TextOut(0, 0, strFontName);
pDC->SelectObject(pOldFont);
}
原文:http://blog.csdn.net/ACE1985/archive/2010/07/28/5770482.aspx
?
数据成员 m_cf
CHOOSEFONT m_cf; 是一个CHOOSEFONT结构体类型的变量
typedef struct {
DWORD lStructSize; //结构长度
HWND hwndOwner; //所属窗口
HDC hDC; //当Flags标志指定CF_PRINTERFONTS标志时,它是打印机的DC句柄
LPLOGFONT lpLogFont; //指向一个LOGFONT结构
INT iPointSize; //选择的字体的大小,单位是1/10磅
DWORD Flags; //标志
COLORREF rgbColors; //选择的字体的颜色
LPARAM lCustData; //
LPCFHOOKPROC lpfnHook; //
LPCTSTR lpTemplateName; //
HINSTANCE hInstance; //
LPTSTR lpszStyle; //
WORD nFontType; //
INT nSizeMin; //当指定标志有CF_LIMITSIZE时,这个值是字体的最小点数
INT nSizeMax; //当指定标志有CF_LIMITSIZE时,这个值是字体的最大小点数
} CHOOSEFONT, *LPCHOOSEFONT;
结构体中成员lpLogFont是一个指向LOGFONT结构体的指针
Flags有几个可用的值:如果指定了标志CF_INITTOLOGFONTSTRUCT,打开该对话框时用lpLogFont指定值初始化对话框所显示的值。
rgbColor---如果Flags标志中指定CF_EFFECTS,对话框将根据这个数值初始化“颜色”下拉式列表框。另外,函数在返回时在这里返回用户选择的字体颜色。
nFontType---返回用户选择的字体属于哪一类,可能返回值是:BOLD_FONTTYPE,ITALIC_FONTTYPE,PRINTER_FONTTYPE,REGULAR_FONTTYPE和SCREEN_FONTTYPE。
Flags---该字段的初始值决定对话框的不同行为,函数返回时也会在这里返回一些用户的选择,它可以是下列值的组合:
CF_BOTH //对话框同时列出打印机字体和屏幕字体
CF_TTONLY //对话框只显示TrueType字体
CF_EFFECTS //对话框只显示“效果”复选框
CF_FIXEDPITCHONLY //对话框的字体列表中只显示等宽字体
CF_LIMITSIZE //对话框显示的字体尺寸限于nSizeMin和nSizeMax字段指定的数值之间
CF_NOSTYLESEL //对话框不显示“字形”组合列表框
CF_NOSIZESEL //对话框不显示“大小”组合列表框
CF_SCREENFONTS //字体列表中只显示屏幕字体
调用ChooseFont函数时,函数会停留直到对话框关闭为止,当用户单击了对话框中的“确定”按钮时,函数返回TRUE;用户单击“取消”按钮时,函数返回FALSE。
在调用ChooseFont函数之前,lpLogFont字段被指向一个LOGFONT结构,对话框关闭时,函数在LOGFONT结构的lfFaceName字段中返回字体的名称,字体的效果和字形也在LOGFONT结构中返回。
用户选择的颜色在rgbColor字段中返回,字体大小在iPointSize字段中返回,由于单位是1/10磅,所以返回的数值等于对话框中选择的字体大小乘以10。
函数实例代码片段如下:
HWND hwnd; // owner window
HDC hdc; // display device context of owner window
CHOOSEFONT cf; // common dialog box structure
static LOGFONT lf; // logical font structure
static DWORD rgbCurrent; // current text color
HFONT hfont, hfontPrev;
DWORD rgbPrev;
// Initialize CHOOSEFONT
ZeroMemory(&cf, sizeof(cf));
cf.lStructSize = sizeof (cf);
cf.hwndOwner = hwnd;
cf.lpLogFont = &lf;
cf.rgbColors = rgbCurrent;
cf.Flags = CF_SCREENFONTS | CF_EFFECTS;
if (ChooseFont(&cf)==TRUE)
{
hfont = CreateFontIndirect(cf.lpLogFont);
hfontPrev = SelectObject(hdc, hfont);
rgbCurrent= cf.rgbColors;
rgbPrev = SetTextColor(hdc, rgbCurrent);
. .....
}
2 自己遇到的例子
void CMy53View::OnFont()
{
CFontDialog dlg;
dlg.m_cf.Flags |= CF_INITTOLOGFONTSTRUCT | CF_EFFECTS | CF_LIMITSIZE;
dlg.m_cf.rgbColors = color; //color 为上一次所选择的颜色
dlg.m_cf.nSizeMin = 1; //指定了标志CF_LIMITSIZE,所以这是字号最小点
dlg.m_cf.nSizeMax = 72; //字号最大点数
if(IDOK == dlg.DoModal())
{
if (font.m_hObject) //如果字体已经创建,那么先把字体对象和字体资源分离
{
font.DeleteObject();
}
font.CreateFontIndirect(dlg.m_cf.lpLogFont); //用该指针变量来创建字体
color = dlg.m_cf.rgbColors; //选择字体
strFontName = dlg.m_cf.lpLogFont->lfFaceName; //字体名
Invalidate(); //使窗口不可用,此时View类的OnDraw()函数调用重绘窗口,在OnDraw()函数里 写使用这个 字体和颜色输出文字的代码
}
}
void CMy53View::OnDraw(CDC* pDC)
{
CMy53Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CFont *pOldFont = pDC->SelectObject(&font);
pDC->SetTextColor(color);
pDC->TextOut(0, 0, strFontName);
pDC->SelectObject(pOldFont);
}
原文:http://blog.csdn.net/ACE1985/archive/2010/07/28/5770482.aspx
?
相关文章推荐
- \t\t孙鑫 第十课之二 字体选择对话框编程(笔记+转载)
- 孙鑫 第十课之一 颜色选择对话框编程(笔记+转载)
- \t\t孙鑫 第十课之一 颜色选择对话框编程(笔记+转载)
- 孙鑫VC学习笔记:第十讲画图 创建颜色/字体对话框
- (转载)VS2010/MFC编程入门之十八(对话框:字体对话框)
- 孙鑫vc++ 第八课 笔记 对话框编程2
- 孙鑫MFC笔记(7)--对话框编程
- 孙鑫VC++讲座笔记(7) 对话框编程
- 孙鑫vc++ 第八课 笔记 对话框编程2
- .Net学习笔记----2015-07-02(选择文件对话框、保存对话框、字体和颜色对话框)
- Android 编程笔记 只显示年月的时间选择器对话框
- 孙鑫VC++讲座笔记(7) 对话框编程 (BY Mickor.Guo)
- \t\t孙鑫 第七课 对话框编程笔记
- 孙鑫VC++视频学习笔记之7: 对话框编程(2)
- OpenGL 编程指南笔记——第8章 OpenGL 绘制像素、位图、字体和图像
- 孙鑫视频教程第十课——图形的绘制、颜色对话框、字体对话框、改变控件的字体及颜色、在对话框中显示位图
- (转载)Vim(gvim)编程字体推荐
- 编程字体选择
- MFC(对话框,孙鑫C++第七讲笔记整理)
- Java字体选择对话框