天天看点

孙鑫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结构体的指针。我们知道对于不同的英语字母,它们的高度和宽度是不同的。

孙鑫VC第五课学习笔记

在取高度时,我们取升序高度与降序高度的和,即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 region用SelectClipPath()设置一个它们互操作的模式,来达到一种特殊的效果。

知识点六

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

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

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

知识点七

字体创建

CFont font;

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

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

dc.SelectObject(pOldFont);

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

知识点八

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

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

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

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