孙鑫VC第五课学习笔记

孙鑫VC第五课学习笔记

文本编程

知识点一

使用CreateSolidCaret( int nWidth, int nHeight )在文本编辑器中可以创建插入符,这边提到了如果函数的两个参数都设置为0,系统将默认采用窗口边框的高和宽。那么如果知道窗口边框的高和宽,在MSDN中有这样的说明:The system’s window-border width or height can be retrieved by the GetSystemMetrics Windows function with the SM_CXBORDER and SM_CYBORDER indexes.

 

但是一般情况下,插入符的高和宽应该根据字体的大小而改变,问题是我们如何知道字符描述表中现在字体的大小呢?请用GetTextMetrics(),这个函数要传递一个TEXTMETRIC结构体的指针。我们知道对于不同的英语字母,它们的高度和宽度是不同的。

 

 

在取高度时,我们取升序高度与降序高度的和,即tmHeight=tmAscent+tmDescent。对于宽度,Windows并没有特别定义,我们一般取平均宽度,即tmAveCharWidth

 

知识点二

如何创建带位图的插入符?

使用void CreateCaret( CBitmap* pBitmap )函数,请看这个函数的参数本身就是一个指向CBitmap的指针,所以我们只需要创建一个位图即可。这里,孙老师提醒大家,CBitmap变量定义为类的成员变量,而不是函数体内的局部变量,否则在退出函数时,CBitmap自动被销毁,当然在屏幕上也不会显示位图了。

 

知识点三

我们知道在Windows编程中,当发生窗口重绘时,会触发WM_PAINT消息。在MFC框架类中,即调用OnDraw函数。

 

知识点四

Cstring的一些赋值方法。

1.  Cstring str(“test”);

2.  Cstring str;

Str = “test”;

3.  Cstring str;

Str.LoadString(ID);//ID定义在StringTable中的字符串资源

 

知识点五

一串字符串,如“StringTable中的字符串资源”,每个字符的宽度都是不一样的,而且字符之间还有间隙,那么我们如何知道此字符串在屏幕上的显示宽度和高度呢?使用GetTextExtent(str)即可,返回一个CSize的结构体。

 

如何创建路径层?BeginPath()EndPath()函数对。

路径层的作用?如果想要在整幅图形的某一部分,让它和其他部分有所区别,我们就可以把这一部分的图形放到一个路径层中,然后利用这个路径层和clipping regionSelectClipPath()设置一个它们互操作的模式,来达到一种特殊的效果。

 

知识点六

如何移动插入符?SetCaretPos( POINT point )函数。

如何清空Cstring对象的字符内容?Cstring->Empty()函数。

如何设置文本的颜色?SetTextColor()函数。

 

知识点七

字体创建

CFont font;

Font.CreatePointFont(300,”华文行楷”,NULL);

CFont *pOldFont = dc.SelectObject(&font);//选择进入设备描述表

dc.SelectObject(pOldFont);

 

当然,如果做字处理程序时,我们会选择将ViewCEditView或者CRichEditView类继承。

 

知识点八

实现卡拉OK的字幕平滑显示效果。

 

这边利用了DrawText()和定时器。

原理:因为DrawText()函数只显示指定矩形大小区域内的文字,所以我们可以利用定时器让这个矩形区域的宽大逐步放大,从而达到平滑显示效果。

 

定时器调用:SetTimer(),一般最后一个参数用NULL,这样由WM_TIME消息响应。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值