读书人

怎么改变cedit的插入符?caret

发布时间: 2013-03-01 18:33:02 作者: rapoo

如何改变cedit的插入符?caret?
MFC dialog。
我想把cedit的插入符改成cmd控制台那种,同时光标总在最后,鼠标始终为箭头。
参考了一些做法,还不完善,思路:
1,继承cedit,重写onsetfocus/onkillfocus
在setfocus:
Cxxx::OnSetFocus(pOldWnd);
/* 光标总是在最后 */
int iTotalTextLength = GetWindowTextLength();
HideSelection(TRUE, TRUE);
SetSel(iTotalTextLength, iTotalTextLength);
CreateSolidCaret(SOLID_CARET_W,SOLID_CARET_H);
ShowCaret();

2、在killfocus:
DestroyCaret();
3、现在有个问题,创建显示后还是原始的插入符,如果丢失焦点并重获焦点(程序setfocus)就可以改变这个插入符,但是一旦鼠标点击,还是恢复成原来的形状,因此我又重写了单击事件:

4、void Cxxx::OnLButtonDown(UINT nFlags, CPoint point)
{
CreateSolidCaret(SOLID_CARET_W,SOLID_CARET_H);
ShowCaret();
//Cxxx::OnLButtonDown(nFlags, point); //屏蔽掉
}
这下可以了,但是创建后显示还是原来形状,而且貌似每次单击都createsolidcaret应该不好。
微软上面也说了是在focus和killfocus做手脚:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms648398%28v=vs.85%29.aspx

5、现在不知道什么思路,各位给点意见?
[解决办法]
尝试在初始化时加载一个系统默认的鼠标形状。
[解决办法]
放:

void CMyEdit::PreSubclassWindow()
{
// TODO: Add your specialized code here and/or call the base class
CreateSolidCaret(8,8);//SOLID_CARET_W,SOLID_CARET_H);
ShowCaret();

CEdit::PreSubclassWindow();
}

[解决办法]
LZ,你继承CEdit的新控件的OnMouseMove,也需要在OnMouseMove中处理鼠标样式的。

读书人网 >VC/MFC

热点推荐