插入符的创建应该在窗口创建之后进行,可以在WM_CREATE消息的响应函数中创建.(注意,视类窗口覆盖在框架窗口之上)
一、创建普通插入符
int CDrawView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您专用的创建代码 TEXTMETRIC tm; CClientDC dc(this); dc.GetTextMetrics(&tm);//取得当前设备描述表中的字体信息 //将插入符的高度设为当前字体高度,宽度设为当前字体宽度/8,这是一个经验值. CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight); ShowCaret();//CreateSolidCaret创建的插入符初始时是隐藏的,调用ShowCaret来显示它. return 0; }
二、创建图形插入符
int CDrawView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您专用的创建代码 static CBitmap bitmap;//注意把CBitmap对象定义为成员变量或静态变量, //否则当OnCreate函数结束后会导致CBitmap对象被析构,并销毁与该对象关联的资源, //导致插入符无法显示。 bitmap.LoadBitmapW(IDB_BITMAP1); CreateCaret(&bitmap);//创建位图插入符 ShowCaret();//显示插入符 return 0; }
三、
可以在WM_LBUTTONDOWN或WM_LBUTTONUP消息中调用SetCaretPos函数,设置插入符在客户区中的显示位置为鼠标点击的位置
SetCaretPos(m_BeginPaint);
时间: 2024-08-14 01:44:28