zoukankan      html  css  js  c++  java
  • 编辑框等控件边框美化(继承CEdit,然后覆盖OnMouseLeave, OnSetFocus, OnPaint函数即可。原来的CEdit虽然代码不可见,但它也是有句柄的,照样随便画)

    源码说明:美化能获取焦点控件的边框颜色,获取焦点后颜色不同(类似彗星小助手、QQ等软件),支持自定义颜色,支持单独设置各个控件颜色.
    实现方法:子类化,在WM_NCPAINT、WM_PAINT等消息自己画出边框
    开发环境:VS2005 MFC / 易语言
    源码下载:http://download.csdn.net/detail/cometnet/5663673

    [cpp] view plain copy
     
      1. // SkinEdit.cpp : 实现文件  
      2. //  
      3.   
      4. #include "stdafx.h"  
      5. #include "SkinEdit.h"  
      6.   
      7.   
      8. // CSkinEdit  
      9.   
      10. IMPLEMENT_DYNAMIC(CSkinEdit, CEdit)  
      11.   
      12. CSkinEdit::CSkinEdit()  
      13. {  
      14.     m_bTracking=m_bHover=m_bFocus=FALSE;  
      15.     m_ClientBrush=::CreateSolidBrush(GetSysColor(COLOR_BTNFACE));  
      16.     m_hOrderBrush=::CreateSolidBrush(GetSysColor(COLOR_WINDOWFRAME));  
      17.     m_HotOrderBrush1=::CreateSolidBrush(0xFDC860);  
      18.     m_HotOrderBrush2=::CreateSolidBrush(0xE7AC49);  
      19. }  
      20.   
      21. CSkinEdit::~CSkinEdit()  
      22. {  
      23.     DeleteObject(m_ClientBrush);  
      24.     DeleteObject(m_hOrderBrush);  
      25.     DeleteObject(m_HotOrderBrush1);  
      26.     DeleteObject(m_HotOrderBrush2);  
      27. }  
      28.   
      29.   
      30. BEGIN_MESSAGE_MAP(CSkinEdit, CEdit)  
      31.     ON_WM_NCPAINT()  
      32.     ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)  
      33.     ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)  
      34.     ON_WM_MOUSEMOVE()  
      35.     ON_WM_SETFOCUS()  
      36.     ON_WM_KILLFOCUS()  
      37. END_MESSAGE_MAP()  
      38.   
      39.   
      40.   
      41. // CSkinEdit 消息处理程序  
      42. void CSkinEdit::OnMouseMove(UINT nFlags, CPoint point)  
      43. {  
      44.     if (!m_bTracking)  
      45.     {  
      46.         TRACKMOUSEEVENT tme;  
      47.         tme.cbSize = sizeof(tme);  
      48.         tme.hwndTrack = m_hWnd;  
      49.         tme.dwFlags = TME_LEAVE | TME_HOVER;  
      50.         tme.dwHoverTime = 50;  
      51.         m_bTracking = (bool)_TrackMouseEvent(&tme);  
      52.     }  
      53.   
      54.     CEdit::OnMouseMove(nFlags, point);  
      55. }  
      56. LRESULT CSkinEdit::OnMouseLeave(WPARAM wParam, LPARAM lParam)  
      57. {  
      58.     m_bTracking = FALSE;  
      59.     m_bHover=FALSE;  
      60.     DrawBorder();  
      61.     return 0;  
      62. }  
      63.   
      64. LRESULT CSkinEdit::OnMouseHover(WPARAM wParam, LPARAM lParam)  
      65. {  
      66.     m_bHover=TRUE;  
      67.     DrawBorder();  
      68.     return 0;  
      69. }  
      70. void CSkinEdit::OnSetFocus(CWnd* pOldWnd)  
      71. {  
      72.     CEdit::OnSetFocus(pOldWnd);  
      73.     m_bFocus=TRUE;  
      74.     DrawBorder();  
      75. }  
      76.   
      77. void CSkinEdit::OnKillFocus(CWnd* pNewWnd)  
      78. {  
      79.     CEdit::OnKillFocus(pNewWnd);  
      80.     m_bFocus=FALSE;  
      81.     DrawBorder();  
      82. }  
      83. void CSkinEdit::OnNcPaint()  
      84. {  
      85.     CEdit::OnNcPaint();  
      86.     DrawBorder();  
      87. }  
      88. void CSkinEdit::OnPaint()  
      89. {  
      90.     CEdit::OnPaint();  
      91.     DrawBorder();  
      92. }  
      93.   
      94. void CSkinEdit::DrawBorder()  
      95. {  
      96.     HDC hDC=::GetWindowDC(m_hWnd);  
      97.     CRect rc;  
      98.     ::GetWindowRect(m_hWnd,&rc);  
      99.     rc=CRect(0,0,rc.right-rc.left,rc.bottom-rc.top);  
      100.     if(m_bHover){  
      101.         ::FrameRect(hDC,&rc,m_HotOrderBrush1);  
      102.         rc.InflateRect(-1,-1);  
      103.         ::FrameRect(hDC,&rc,m_HotOrderBrush2);  
      104.     }else if(m_bFocus){  
      105.         ::FrameRect(hDC,&rc,m_ClientBrush);  
      106.         rc.InflateRect(-1,-1);  
      107.         ::FrameRect(hDC,&rc,m_HotOrderBrush2);  
      108.     }else{  
      109.         ::FrameRect(hDC,&rc,m_ClientBrush);  
      110.         rc.InflateRect(-1,-1);  
      111.         ::FrameRect(hDC,&rc,m_hOrderBrush);  
      112.     }  
      113.     ::ReleaseDC(m_hWnd,hDC);  
      114. }  

    http://blog.csdn.net/CometNet/article/details/9194751

  • 相关阅读:
    58.最后一个单词的长度
    四种不同的SNP calling算法call低碱基覆盖度测序数据时,SNVs数量的比较(Comparing a few SNP calling algorithms using low-coverage sequencing data)
    斯坦福大学公开课机器学习:advice for applying machine learning | model selection and training/validation/test sets(模型选择以及训练集、交叉验证集和测试集的概念)
    Methods for follow-up research of exome analysis:外显子后续分析研究思路总结
    斯坦福大学公开课机器学习: advice for applying machine learning
    斯坦福大学公开课机器学习:advice for applying machine learning
    斯坦福大学公开课机器学习: neural networks learning
    看了一场不正经的艺术展(以色列:飞鸟与曼陀罗)
    无心准备组会,唯画画能缓解焦虑
    蛋白质结构模型和功能预测:Swiss-model工具的使用
  • 原文地址:https://www.cnblogs.com/findumars/p/8456143.html
Copyright © 2011-2022 走看看