本文仅用于学习交流,商业用途请支持正版!转载请注明:http://www.cnblogs.com/mxbs/p/6218597.html
1、插入符(Caret)的创建与显示
插入符用于标定输入信息位置的闪烁竖线,MFC中创建插入符可以直接使用CWnd类的CreateSolidCaret()函数来完成,其函数原型为void CreateSolidCaret(int nWidth,int nHeight),两个参数分别表示插入符的宽度和高度。
新建一个工程,添加WM_CREATE消息的响应函数OnCreate(),添加创建插入符函数,运行,结果并没有出现插入符。因为我们所创建的插入符在初始时是隐藏状态,如需显示还要调用ShowCaret()函数进行显示。结果如图示,插入符已经显示出来了。
代码:
2、插入符的格式设置
插入符的格式即其大小主要是由当前文本格式决定,因此需要获取当前文本格式。调用CDC类的GetTextMetrics成员函数可以获得设备描述表中当前字体的度量信息,其参数是一个TEXTMETRIC结构体类型的变量,计算插入符的高度和宽度用的是字体的高度和平均宽度,这两个正是结构体的成员tmMaxCharWidth和tmAveCharWidth。
代码如下:
//创建设备描述表
CClientDC dc(this);
//定义文本信息结构体变量
TEXTMETRIC tm;
//获得设备描述表中的文本信息
dc.GetTextMetrics(&tm);
//根据字体大小创建合适的插入符
CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
//显示已创建的插入符
ShowCaret();
运行,结果如图所示:
备注:字体的平均宽度除以8得到插入符的宽度只是一个经验值。
3、创建图形插入符
要创建图形插入符,可以用CreateCaret函数实现,首先要创建一个位图资源,在View菜单下打开Resource View,在资源视图的资源文件上右击选择Add Resource,选择Bitmap->New,利用Pencil Tool工具在位图面板进行绘制,如图示:
代码如下:
CBitmap bitmap;
bitmap.LoadBitmapW(IDB_BITMAP1);
CreateCaret(&bitmap);
ShowCaret();
运行发现并没有出现预期结果,为什么呢?因为bitmap是一个局部变量,当OnCreate函数执行完成后,此bitmap对象会发生析构。通常,与资源关联的对象在析构时会把与之关联的资源销毁,于是就没有出现位图插入符。解决方法是将局部位图对象修改为CTextView类的成员变量,将其定义放到CTextView的头文件中。
运行,结果如图所示:
说明图形插入符已经实现了。
如果有疑问,可以联系giserdev@163.com,更多内容请参考:http://www.cnblogs.com/mxbs/,技术交流请加QQ群:586571286。