MFC : Cedit의 색상 변경
-
03-07-2019 - |
문제
얘들 아, 누군가 런타임에 CEDIT 컨트롤의 배경색을 변경하는 방법을 간단히 줄 수 있습니까? 필드의 길이가 0이고 정상 흰색이 있으면 배경을 빨간색으로 바꿀 수 있기를 원합니다.
해결책
평범한 시더로 할 수 없으며 몇 비트를 무시해야합니다.
나만의 ON_WM_CTLCOLOR_REFLECT 핸들러를 구현 한 다음 핸들러에서 색상 CBRUSH를 반환하십시오.
(대략적으로, 일반적인 자원 관리를 거기에 넣어야합니다.
class CColorEdit : public CEdit
{
....
CBrush m_brBkgnd;
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor)
{
m_brBkgnd.DeleteObject();
m_brBkgnd.CreateSolidBrush(nCtlColor);
}
}
다른 팁
이것은 CEDIT에서 파생하지 않고도 수행 할 수 있습니다.
- 추가하다
ON_WM_CTLCOLOR()
대화에BEGIN_MESSAGE_MAP()
코드 블록. 추가하다
OnCltColor()
대화 상자 수업 :afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
구현하다
OnCtlColor()
그렇게 :HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { if ((CTLCOLOR_EDIT == nCtlColor) && (IDC_MY_EDIT == pWnd->GetDlgCtrlID())) { return m_brMyEditBk; //Create this brush in OnInitDialog() and destroy in destructor } return CDialog::OnCtlColor(pDC, pWnd, nCtlColor); }
제휴하지 않습니다 StackOverflow