博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
MFC Richedit隐藏光标

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() 里的方法。

 

posted on 2010-02-08 19:03  Likwo  阅读(2846)  评论(0编辑  收藏  举报