Advertisement
roel_v

Edit control on focus redrawing issue

Jul 30th, 2013
513
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.81 KB | None | 0 0
  1. #pragma once
  2.  
  3. class CMyEdit : public CEdit
  4. {
  5. public:
  6.     CMyEdit()
  7.         : m_HasFocus(false)
  8.     {
  9.     }
  10.  
  11.     bool m_HasFocus;
  12.  
  13.     afx_msg void OnSetFocus(CWnd* pOldWnd);
  14.     afx_msg void OnKillFocus(CWnd* pNewWnd);
  15.     DECLARE_MESSAGE_MAP()
  16. };
  17.  
  18. class Cmfc_testDlg : public CDialog
  19. {
  20. public:
  21.     Cmfc_testDlg(CWnd* pParent = NULL); // standard constructor
  22.  
  23.     enum { IDD = IDD_MFC_TEST_DIALOG };
  24.  
  25.     protected:
  26.     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  27.  
  28.  
  29. protected:
  30.     CMyEdit m_Edit;
  31.     CBrush m_RedBrush;
  32.  
  33.     virtual BOOL OnInitDialog();
  34.     afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
  35.     DECLARE_MESSAGE_MAP()
  36. };
  37.  
  38.  
  39. #include "stdafx.h"
  40. #include "mfc_test.h"
  41. #include "mfc_testDlg.h"
  42.  
  43. #ifdef _DEBUG
  44. #define new DEBUG_NEW
  45. #endif
  46.  
  47. Cmfc_testDlg::Cmfc_testDlg(CWnd* pParent /*=NULL*/)
  48.     : CDialog(Cmfc_testDlg::IDD, pParent)
  49. {
  50. }
  51.  
  52. void Cmfc_testDlg::DoDataExchange(CDataExchange* pDX)
  53. {
  54.     DDX_Control(pDX, IDC_EDIT1, m_Edit);
  55.  
  56.     CDialog::DoDataExchange(pDX);
  57. }
  58.  
  59. BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
  60.     ON_WM_SETFOCUS()
  61.     ON_WM_KILLFOCUS()
  62. END_MESSAGE_MAP()
  63.  
  64. BEGIN_MESSAGE_MAP(Cmfc_testDlg, CDialog)
  65.     ON_WM_PAINT()
  66.     ON_WM_QUERYDRAGICON()
  67.     ON_WM_CTLCOLOR()
  68. END_MESSAGE_MAP()
  69.  
  70. BOOL Cmfc_testDlg::OnInitDialog()
  71. {
  72.     CDialog::OnInitDialog();
  73.  
  74.     m_RedBrush.CreateSolidBrush(RGB(255, 0, 0));
  75.  
  76.     return TRUE;
  77. }
  78.  
  79. HBRUSH Cmfc_testDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
  80. {
  81.     if (pWnd->GetSafeHwnd() == m_Edit.GetSafeHwnd() && m_Edit.m_HasFocus) {
  82.         pDC->SetBkColor(RGB(255, 0, 0));
  83.         return m_RedBrush;
  84.     }  
  85.  
  86.     return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
  87. }
  88.  
  89. void CMyEdit::OnSetFocus(CWnd* pOldWnd)
  90. {
  91.     m_HasFocus = true;
  92.  
  93.     CEdit::OnSetFocus(pOldWnd);
  94. }
  95.  
  96. void CMyEdit::OnKillFocus(CWnd* pNewWnd)
  97. {
  98.     m_HasFocus = false;
  99.  
  100.     CEdit::OnKillFocus(pNewWnd);
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement