这一周事比较多,又是上课,又是学车的,继续学习...
1.创建文本插入符
在程序中想创建插入符,可以利用CWnd类的CreateSolidCaret()函数完成:
void CreateSolidCaret( int nWidth, intnHeight );
其中,nWidth是插入符的宽度,nHeight则是高度;
创建一个MFC的工程,如Project3
在CProject3View类中创建一个响应函数OnCreate中
在函数中添加
//创建插入符
//CreateSolidCaret(20, 100);
//显示插入符
ShowCaret();
其中ShowCaret()函数是用来显示插入符的,因为插入符的初始是隐藏的;
这时我们发现插入符的大小有点不正常,和我们平时在word里面看得不一样,那是因为我们设的宽度和高度不好,不过CDC类中的GetTextMetrics函数可以得到设备描述表中当前字体的度量信息;
BOOL GetTextMetrics( LPTEXTMETRIClpMetrics ) const;
函数的参数是TEXTMETRICD结构体的指针;
typedef struct tagTEXTMETRIC { /* tm */
int tmHeight;
int tmAscent;
int tmDescent;
int tmInternalLeading;
int tmExternalLeading;
int tmAveCharWidth;
int tmMaxCharWidth;
int tmWeight;
BYTE tmItalic;
BYTE tmUnderlined;
BYTE tmStruckOut;
BYTE tmFirstChar;
BYTE tmLastChar;
BYTE tmDefaultChar;
BYTE tmBreakChar;
BYTE tmPitchAndFamily;
BYTE tmCharSet;
int tmOverhang;
int tmDigitizedAspectX;
int tmDigitizedAspectY;
} TEXTMETRIC;
信息众多,不一一解释,字体的高度是tmHeight,平均宽度是tmAveCharWidth,
将前面代码,加入如下代码:
//创建设备描述表
CClientDC dc(this);
//定义文本信息结构体变量
TEXTMETRIC tm;
//定义设备描述表中的文本信息
dc.GetTextMetrics(&tm);
//根据字体大小,创建合适的插入符
CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
//显示插入符
ShowCaret();
其中,ShowCaret()每个插入符里面都需要,用来显示插入符的,CreateSolidCaret()中的高度和宽度是tm.tmAveCharWidth/8和tm.tmHeight,宽度是tm.tmAveCharWidth/8是一个经验值,适合大众使用,当然,大家也可以试试别的;
结果如下:
2.创建图形插入符
【VC++】002使用画刷绘图中有了创建使用位图的说明,可以选择自己新建一个位图;
当然,也可以自己选择导入:
选择【insert】插入->【resource】资源会弹出个窗口,选择Bitmap,选择【import】引入即可实现:
然后贴入下面代码:
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
CreateCaret(&bitmap);
//显示插入符
ShowCaret();
我们会发现没有反应,这是因为bitmap是一个局部变量,当函数执行完之后bitmap就析构了,所以将bitmap改为Project3View的成员变量:
private:
CBitmap bitmap;
再次运行:
这样,图形插入符也就出来了,想要更漂亮,自己可以将位图做得漂亮点....
小工程可见:http://download.csdn.net/detail/xjm199/6778839
继续学习...o(∩_∩)o