分享
 
 
 

《循序渐进学用Visual C++ 6.0》读书笔记(七)

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

《循序渐进学用Visual C++ 6.0》读书笔记(七)

l 题设:画一个对话框MyDlg , 一个List Box(IDC_LB) ,

一个静态文本(IDC_STEXT),同时为list box创建空件型成员变量

m_ctlListBox和字符串型成员变量m_strListBox.

今日我们要学习字体控制,但是我们必须了解一些必备知识。

l LogFont结构

这个结构的成员变量多得要死,了解就okey了,有需要的时候查msdn.

typedef struct tagLOGFONT {

LONG lfHeight; //高度

LONG lfWidth; //宽度

LONG lfEscapement; //打印角度,900垂直打印,0水平打印。

LONG lfOrientation; //字体打印角度,1800上下倒置,900左右倒置。

LONG lfWeight; //字体粗细,默认是0,还常用400,700

BYTE lfItalic; //斜体字,默认0非斜体,1斜体。

BYTE lfUnderline; //下划线,默认0无。

BYTE lfStrikeOut; //字体被直线穿过,默认0无。

BYTE lfCharSet; //字符集,如宋体字。一般设置为DEFAUL_CHARSET.

BYTE lfOutPrecision; //符合度,看不明白?一般设置为OUT_DEFAUL_

PRECIS。

BYTE lfClipPrecision; //不懂,一般设置为CLIP_DEAFAUL_PRECIS

BYTE lfQuality; //字体图形质量,不管,设为DEFAUL_QUALITY

BYTE lfPitchAndFamily; //字间距,不管,设为DEFAUL_PITCH+FF_DON

TCARE

TCHAR lfFaceName[LF_FACESIZE]; //所有字体式样数组,

供字体回调函数调用。

} LOGFONT;

例如:

LogFont lf ; //声明一个LogFont结构变量

lf.lfCharSet=DEFUAL_CHARSET; //设置为宋体字

lf.lfPitchAndFamily=0 ; //这里0是DEFAUL_QUALITY

lf.lfFaceName[]=NULL; //动态数组的字符式样集合,初始化清空

//////////////////////////////////////////////////////////////////////////////////////////////////

l EnumFontFamFamiliesEX()请求可用字体列表函数。

看到以EX结尾,我们就知道这是一个API函数,看函数原形:

E…..EX(“设备场景” ,LogFont结构指针 ,字体回调函数地址,

LPARAM, 0 )

//画布上次讲过了,画布就是其中一个设备场景,

建立画布如:CClientDC dc(this)

//回调函数上次也讲过了,但呆会再讨论。

//LPARAM是给回调函数使用的,上次也讲过了。

//最后一个永远是0 ,据说是给以后扩展的时候使用的。

例如:

CClientDC dc(thist);

LogFont lf;

….. // lf的初始化如上例。

::EnumFontFamFamiliesEX( (HDC) dc , // 强制转化成HDC类型

&lf , (FONTENUMPROC) EnumFontFamProc //强制转化成字体回调函数

(LPARAM)this , 0 ) //强转当前窗体指针为LPARAM接收回调函数使用情况。

////////////////////////////////////////////////////////////////////////////////////////////////////

l 如何创建字体回调函数?

看一个经典的字体回调函数例子:

int CALLBACK EnumFontFamProc( LPENUMLOGFONT lpelf ,

LPNEWTEXTMETRIC lpntm , DWORD nFontType ,

Long lParam )

{

MyDlg * pWnd = (MyDlg *) lParam ;

pWnd ->m_ctlListBox.AddString (lpelf->elfLogFont.lfFaceName)

return ture ;

}

////////////////////////////////////////////////////////////////////////////////////////////////////

这个回调函数是我们创建的,头3个参数看似很深懊,其实是LogFont结构

的分解版,第一个参数是ENUMLOGFONT的结构指针,这种结构用来设置

字体的粗斜下划线,第二个参数是NEWTEXTMETRIC的结构指针,这种结

构却用来设置字体的高宽大小,第三个参数则用来设置字体显示风格,如

TureType, 而最后一个参数是回调函数必需有的,它似呼有某些隐藏操作,

不用我们管。

第一个语句是为对话框MyDlg设置指针,它等于lParam.

第二个语句是MyDlg下的List Box空件添加项目,项目名称等于那个结构的

式样名字。

第三个语句回调函数必须的。

l CFont类

CFont类可以看作LogFont结构的扩展,他们的成员变量完全一样,不过类

是有成员函数的,如:CreatFont方法与SetFont方法

看例:

CFont m_fFont ; //创建一字体实例;

m_fFont.CreatFont (12, 0,0,…..LogFont的参数一模一样,详见上面….);

l 在MyDlg.h头文件,加入回调函数声明。

int CALLBACK EnumFontProc( LPENUMLOGFONT lpnlf ,

LPNEWTEXTMETRIC lpntm ,DWORD nFontType , long LPARAM);

l 在MyDlg.cpp文件,写下自己的字体回调函数。

这里可以照抄上例。

l 为MyDlg类创建成员函数FillFont();

由于这个函数并不为什么消息而创建的,是我们自己创建用

来集成一系列操作的函数。

在View面版,点MyDlg类,右点添加,输入名字等创建它。

代码清单:

void MyDlg::FillFont();

{

LogFont lf;

lf.SetChar=DEFUALT_CHARSET;

strcpy( lf.lfFaceName , “”);

m_ctlListBox.ResetContext() ;

CClientDC dc(this);

::EnumFontFamilesEX((HDC) dc ,&lf ,

(FontEnumProc) EnumFontProc,(LPARAM) this,0);

}

//strcpy(目标,源)是字符串复制函数。

这里初始化。要注意就是lf.lfFaceName是字符串数组。

//List Box 有个方法ResetContext()是清空下拉列表。

//下面几句上面讲过,请求字体列表。

l 把FillFont()加入MyDlg的装载函数里。

Void MyDlg::InitDialog()

{

…..

FillFont();

….

}

l Edit Box的EN_CHANGE消息与List Box的LBN_SELCHANGE消息。

当Edit Box内容被用户改变就会激发EN_CHANGE消息.

当List Box被用户下拉选择项目时会激发LBN_SELCHANG消息。

这两个消息都容易被理解,书上正是为此两种消息做字体选择的

例子。这里不再详述了。

写住这么先,,初级篇终于看完了明天看中级篇,要睡觉了。。。累了。。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有