MFC学习笔记之八————颜色对话框与字体对话框

MFC学习笔记之八————颜色对话框与字体对话框

当程序中需要用到画图的时候,就要选择画笔的颜色,在MFC中提供了一个CColorDialog的类,通过此类可以很方便的创建这样一个颜色对话框。其构造函数如下:

1
CColorDialog(  COLORREF  clrInit = 0,  DWORD  dwFlags = 0, CWnd* pParentWnd = NULL );

  该构造函数含有三个参数,其中

clrInit :指定默认的颜色选择,默认是黑色。

dwFlags:指定一组标记,用来定制颜色对话框的功能和它的外观。

pParentWnd:指向颜色对话框父窗口,后者拥有者窗口的指针。

我们可以使用dialog的doModal()函数创建颜色对话框。在CColorDialog类型中含有一个CHOOSECOLOR的结构体类型的成员变量:m_cc,在CHOOSECOLOR结构体中含有一个rgbResult的成员变量,此变量即保存了用户所选择的颜色的,看看CHOOSECOLOR结构体:

1
2
3
4
5
6
7
8
9
10
11
typedef  struct  {
   DWORD         lStructSize;
   HWND          hwndOwner;
   HWND          hInstance;
   COLORREF      rgbResult;
   COLORREF    * lpCustColors;
   DWORD         Flags;
   LPARAM        lCustData;
   LPCCHOOKPROC lpfnHook;
   LPCTSTR       lpTemplateName;
} CHOOSECOLOR, *LPCHOOSECOLOR;

  我们可以使用以下:

1
2
CColorDialog dlg;
dlg.doModal(); //创建颜色对话框

如果想要设置颜色对话框的初始选择的颜色,则需要设置该对话框的CC_RGBINIT标记,此标记在CColorDialog中的CHOOSECOLOR类型的成员变量m_cc中可更改。

注意:挡在创建CColorDialog对象dlg的时候,他的数据成员m_cc中的Flags成员已经具有了一些初始的默认标记。当我们将CC_RGBINIT标记直接赋给m_cc.Flags时,会产生错误!所以应该使用以下方式:

1
dlg.m_cc.Flags |= CC_RGBINIT; //使用位或操作符

与MFC中提供了CColorDialog相同,MFC中也提供了CFontDialog类,利用该类可以创建选择字体的对话框。此类的构造函数如下:

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

该函数含有四个参数:

lplfInitial :指向LOGFONT结构体的指针,允许用户设置一些字体的特征。

dwFlags :主要设置一个或者多个与选择字体相关的标记。

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

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

由CFontDialog的构造函数知道,参数都含有默认值,所以可以在构造字体对话框时候不指定任何参数。同样可以试用以下:

1
2
CFontDialog dlg;
dlg.doModal(); //创建字体对话框

CFontDialog类中,含有一个CHOOSEFONT结构体类型的数据成员:m_cf;CHOOSEFONT结构体的定义如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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;
   WORD          ___MISSING_ALIGNMENT__;
   INT           nSizeMin;
   INT           nSizeMax;
} CHOOSEFONT, *LPCHOOSEFONT;

在结构体中,其成员lpLogFont是指向逻辑字体的(LOGFONT类型)的指针。LOGFONT结构体如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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;

  其中lfFaceName中存放的就是字体的名字,至于字体对象的创建,首先可以利用CFont类创造一个字体对象,然后利用CFont类的CreateFontIndirect成员函数根据指定特征的逻辑字体(LOGFONT类型)来初始化这个字体对象,该函数声明如下:

1
BOOL  CreateFontIndirect( const  LOGFONT* lpLogFont );

  此函数的功能就是利用参数lpLogFont指向的LOGFONT结构体中的特征来初始化CFont对象

记录下自己的所学,虽然浅薄!!!如果我是一只蜗牛,那就只能慢慢向上爬!奋斗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值