分享

漂亮Edit控件的重载

 浮 生 2011-01-13
宇文成风VC技巧总结之Edit的重载
也许有人和我一样对VC6自带的EDIT控件很不满意,当然使用系统自带风格的就好很多了,那个也很简单,不过还是不自由,打造自己的EDIT控件是一件很舒服得事;
重载EDIT控件不像重载BUTTON,它没有DRAWITEM这个东西,所以必须在ONNCPAINT或者是ONPAINT里面重画,可能你已经这样做了,可能你遇到了重画后EDIT内容被覆盖的问题,又或者是滚动条消失的问题,总之呢,我的重绘不是很彻底,并没有重绘滚动条,我只重绘了边框,鼠标在EDIT内一个外型,鼠标在外又是一个外形,怎么说呢,觉得腾讯的EDIT不错,一个字,抄。
我只谈论具体思路,代码其实不是很重要,注意以下几点即可完成;
在WM_MOUSEMOVE中把鼠标标记为进入了EDIT,之后设置一个定时器,定时检测鼠标是否在EDIT内部;
void   CComEdit::OnMouseMove(UINT   nFlags,   CPoint   point)  
{
  if (!m_bIsInEditRect)
  {
   m_bIsInEditRect = TRUE;
   OnNcPaint();  
   SetTimer(1,   50,   NULL);
  }
 
 
 CEdit::OnMouseMove(nFlags,   point);
}
//定时器操作
void   CComEdit::OnTimer(UINT   nIDEvent)  
{
 POINT   pt;
 GetCursorPos(&pt);
 CRect   rcItem;
 GetWindowRect(&rcItem);
 if(!rcItem.PtInRect(pt))  
 {
  m_bIsInEditRect = FALSE;
  RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_FRAME); //重绘客户区和边框;
  KillTimer(1); 
  return;
  //RedrawWindow(NULL, NULL,RDW_INVALIDATE );
 }
 
 
 CEdit::OnTimer(nIDEvent);
}
//记录鼠标左键是否按下
void CComEdit::OnLButtonDown(UINT nFlags, CPoint point)
{

 if (!m_readonly)
 {
  m_mousedown = TRUE;
  SetCapture();
 }
 
 CEdit::OnLButtonDown(nFlags, point);
}
void CComEdit::OnLButtonUp(UINT nFlags, CPoint point)
{
 
  if(m_mousedown)
   ReleaseCapture();
  m_mousedown = FALSE;
  RedrawWindow(NULL, NULL, RDW_INVALIDATE); //当鼠标在EDIT中按下,在EDIT外部弹起的时候重绘客户区,保证内容不被抹掉
 
 
 CEdit::OnLButtonUp(nFlags, point);
}
void CComEdit::OnNcPaint()
{
 // TODO: Add your message handler code here
 
//请在这里第一次拷贝EDIT的背景,可以在重画的时候还原边缘,如果你不需要圆角,那这里就不用
//这里的代码你们自己搞定,我的提示是windows程序设计第5版的
Chapter 14
Bitmaps and Bitblts
这章有一个给图片打掩码的例子,可以在这里用,就提示到这里;
 CEdit::OnNcPaint(); //VC交代不让在ONNCPAINT里面调用,不过不调用滚动条就永远离开我们了,所以大家放心调
RedrawWindow(NULL, NULL, RDW_INVALIDATE);//这里是为了防止窗口部分被遮挡时重画客户区内容消失;
//下面就是你的工作了,想画什么边框都行,不过别忘了整个透明刷子,别画到客户区的内容了;
//这里你可以分开画不同的外形,鼠标在内部或者不在
}
EDIT的重载就讲完了,这是我的个人体验,下面上图。
 
 
 鼠标在在内部就是方角,在外部就是圆角,看起来还不错;
 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/daydayuplo/archive/2010/12/31/6110766.aspx

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多