문제

얘들 아, 누군가 런타임에 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에서 파생하지 않고도 수행 할 수 있습니다.

  1. 추가하다 ON_WM_CTLCOLOR() 대화에 BEGIN_MESSAGE_MAP() 코드 블록.
  2. 추가하다 OnCltColor() 대화 상자 수업 :

    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    
  3. 구현하다 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);
    }
    
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top