我们知道打开TXT文本后有一个光标闪烁,意味着你可以从这里输入文本。现在我们利用MFC创建这个光标(字符光标和位图光标)。
首先在View窗口下创建一个WM_CREATE消息事件
int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
return 0;
}
然后利用CreateSolidCaret(int nWidth ,int nHeight)函数来创建插入符。第一个参数是指定插入符的宽度,第二个参数是指定插入符的高度。当这两个参数为零时,系统默认的插入符的宽度和高度为系统窗口边界的宽度和高度。而系统窗口边界的宽度和高度可以通过GetSystemMetrics函数获得。
要注意的是插入符一旦被创建就立即隐藏了,需要调用ShowCaret函数来显示这个插入符。
int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
/****************wjl************************
<*字处理程序中的插入符*>
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
ShowCaret();
*****************wjl***********************/
return 0;
}
TEXTMETRIC是一个结构体,里面包含了文本的一些属性,比如字体的两个高度 升序 tmAscent 和降序tmDescent,平均高度之类的。
为了使插入符能随着字体的大小改变。我们首先要获得字体的大小,这时需要一个函数GetTextMetrics,参数是一个结构体的指针。这里将TEXTMETRIC结构体的对象tm传递进去。
接下来是创建位图插入符,就是用一个位图来代表光标,一闪一闪的(不理解为啥要这样。。。)
这里的bitmap要放在CTextView中,作为全局变量。
class CTextView : public CView
...
private:
CBitmap bitmap;
首先要创建一个位图,再通过bitmap.LoadBitmap(IDB_BITMAP1);调用位图。
int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
/****************wjl************************
<*位图的插入符*>
*****************wjl***********************/
CClientDC dc(this);
bitmap.LoadBitmap(IDB_BITMAP1);
CreateCaret(&bitmap);
ShowCaret();
return 0;
}
函数CreateCaret可以创建位图的插入符,参数是一个位图指针。