1、文本插入符的创建应该是窗口创建之后,也就是要在窗口创建完成消息WM_CREAT响应函数OnCreat中窗口创建完成后实现。
2、文本插入符是依附于视图类的,所以我们应该在视图类的OnCreat函数中完成。
a、 在文本的起始位置创建
int CMapBigView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
CClientDC dc(this);//获取DC
// /* 以下3行实现一个位图插入符 */
// static CBitmap bitmap;
// bitmap.LoadBitmap(IDB_BITMAP1);
// CreateCaret(&bitmap);
TEXTMETRIC tm; //定义一个文本信息结构体,用于接收文本的字体信息
dc.GetTextMetrics(&tm);//获取当前文本的字体信息,主要需要字体的高度和宽度
CreateSolidCaret(tm.tmAveCharWidth, tm.tmHeight); //创建一个 文件插入符
ShowCaret(); //显示
// TODO: Add your specialized creation code here
return 0;
}
b、通过捕获鼠标消息,可以再次设置文本插入符的位置为鼠标当前坐标
void CMapBigView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
SetCaretPos(point);
CView::OnLButtonDown(nFlags, point);
}