您的位置:首页 > 其它

MFC Richedit隐藏光标

2010-02-08 19:03 288 查看
[align=center]MFC Richedit隐藏光标
[/align]
1.重载Richedit LButton事件
void CChatRichEd::OnLButtonDown(UINT nFlags, CPoint point)
{
CRichEditCtrl::OnLButtonDown(nFlags, point);
HideCaret();
}
2.如果还有网页链接,同时在EN_Link最后面
HideCaret();

改变Richedit默认可编辑鼠标状态
重载OnSetCursor,m_isLink用来判断是否是链接,

BOOL CChatRichEd::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

//return CRichEditCtrl::OnSetCursor(pWnd, nHitTest, message);
if (m_isLink)
{
m_isLink=FALSE;
return CRichEditCtrl::OnSetCursor(pWnd, nHitTest, message);
}
else
{
SetCursor( AfxGetApp()->LoadStandardCursor(IDC_ARROW));
return true;
}
}

EN_Link的事件
m_isLink=true.
这样,链接就以手型显示。

网上其他的方法隐藏Caret

1. 在cpp文件的MESSAGE_MAP声明后添加如下全局变量和函数:

WNDPROC oldProc ;

LRESULT CALLBACK ReditWindowProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch (uMsg)
{
case WM_SETFOCUS:
return 0 ;

default: NULL ;
}
return oldProc(hwnd,uMsg,wParam,lParam) ;
}

在OnInitDialog()中调用:

// TODO: Add extra initialization here

oldProc = (WNDPROC)::SetWindowLong
(m_richEdit.m_hWnd,GWL_WNDPROC,(LONG)ReditWindowProc) ;

这样就可以隐藏caret:)

2. 直接注释掉OnSetFocus() 里的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: