您的当前位置:首页正文

设置只读Edit控件背景白色

2024-11-07 来源:个人技术集锦

#if !defined(AFX_EDITEX_H__4B42F103_8BDD_4F39_ABE3_0D96741FAEB3__INCLUDED_)
#define AFX_EDITEX_H__4B42F103_8BDD_4F39_ABE3_0D96741FAEB3__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// EditEx.h : header file
//

/
// CEditEx window

class CEditEx : public CEdit
{
// Construction
public:
 CEditEx();

// Attributes
public:

// Operations
public:

// Overrides
 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CEditEx)
 public:
 virtual BOOL PreTranslateMessage(MSG* pMsg);
 //}}AFX_VIRTUAL

// Implementation
public:
 virtual ~CEditEx();

 // Generated message map functions
protected:
 //{{AFX_MSG(CEditEx)
 afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
 afx_msg BOOL OnEraseBkgnd(CDC* pDC);
 afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
 //}}AFX_MSG

 DECLARE_MESSAGE_MAP()
};

/

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_EDITEX_H__4B42F103_8BDD_4F39_ABE3_0D96741FAEB3__INCLUDED_)


// EditEx.cpp : implementation file
//

#include "stdafx.h"
#include "EditEx.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/
// CEditEx

CEditEx::CEditEx()
{
}

CEditEx::~CEditEx()
{
}


BEGIN_MESSAGE_MAP(CEditEx, CEdit)
 //{{AFX_MSG_MAP(CEditEx)
 ON_WM_CTLCOLOR()
 ON_WM_ERASEBKGND()
 ON_WM_RBUTTONDOWN()
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/
// CEditEx message handlers

BOOL CEditEx::PreTranslateMessage(MSG* pMsg)
{
 // TODO: Add your specialized code here and/or call the base class
 if (pMsg->message == WM_KEYDOWN)
 {
  if (ES_READONLY == (ES_READONLY & GetStyle()))
   return TRUE;
 }
 
 return CEdit::PreTranslateMessage(pMsg);
}

void CEditEx::OnRButtonDown(UINT nFlags, CPoint point)
{
 // TODO: Add your message handler code here and/or call default
 if (ES_READONLY == (ES_READONLY & GetStyle()))
  return;
 
 CEdit::OnRButtonDown(nFlags, point);
}

BOOL CEditEx::OnEraseBkgnd(CDC* pDC)
{
 // TODO: Add your message handler code here and/or call default
 CBrush brush;
 brush.CreateSolidBrush(RGB(255, 255, 255));
 CRect rc;
 GetClientRect(&rc);
 pDC->FillRect(rc, &brush);
 brush.DeleteObject();
 return TRUE;
 //return CEdit::OnEraseBkgnd(pDC);
}

//--this is only a example.
HBRUSH CEditEx::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
 HBRUSH hbr = CEdit::OnCtlColor(pDC, pWnd, nCtlColor);
 
 // TODO: Change any attributes of the DC here
 //--copy this code to parent::OnCtlColor(...)
 /*
 {
  CWnd* pCtrl = this;//--this ctrl(not this)
  if (pWnd->GetSafeHwnd() == pCtrl->GetSafeHwnd())
  {
   pDC->SetBkColor(RGB(255, 255, 255));
  }
 }
 */
 // TODO: Return a different brush if the default is not desired
 return hbr;
}

//--在父窗口上
//--1。为控件绑定一个变量
CEditEx m_ctEditEx;
//--2。还需要这样添加父窗口的OnCtlColor到WM_CTLCOLOR
HBRUSH parent::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
 HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
 
 // TODO: Change any attributes of the DC here
 if (pWnd->GetSafeHwnd() == m_ctEditEx.GetSafeHwnd())
 {
  pDC->SetBkColor(RGB(255, 255, 255));
 }
 
 // TODO: Return a different brush if the default is not desired
 return hbr;
}

Top