2013-07-10 6 views
1

텍스트가있는 읽기 전용 편집 컨트롤이 있습니다. 기본 회색 배경을 흰색으로 전환하고 싶지만 운이 제한적이었습니다. 처음으로 이동, 나는 대화의 초기화 중에 다음과 같은 코드를 실행했다 :읽기 전용 색 변경 CEdit 컨트롤 아티팩트 및 텍스트 강조 표시 문제

CEdit *m_ctrlEditOne = (CEdit*) GetDlgItem(IDC_EDIT1); 
CDC *m_ctrlEEditWee = m_ctrlEditOne->GetDC(); 
m_ctrlEEditWee->SetBkColor(RGB(255,0,0)); 
Invalidate(true); 

것은 내가 노력 또 다른 해결책은이었다

아래의 스크린 샷에서
HBRUSH CTestingDlg::OnCtlColor(CDC* pDC, CWnd *pWnd, UINT nCtlColor) 
{ 
if (pWnd->GetStyle() & ES_READONLY) 
//if(pDC->GetRuntimeClass == & ES_READONLY) 
{ 
    switch (nCtlColor) 
    { 
    case CTLCOLOR_STATIC: 
     pDC->SetBkColor(RGB(255,255,255)); 
     return (HBRUSH)GetStockObject(NULL_BRUSH); 
    default: 
     //return NULL; 
     return CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
    } 
} 
//return NULL; 
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
} 

, 당신은 텍스트가 삽입 된 것을 볼 수 있습니다 사실 (이것이 일어날 필요가있는 것)이 끝나고 파란색으로 강조된 것처럼 보입니다. - 강조하지 않은 텍스트로 보이게 만드는 방법을 어디서부터 시작해야할지 모릅니다. 그것을 클릭하면 정상적으로 나타납니다. 각 편집 컨트롤의 왼쪽 하단 모서리에 거기에 나타나서는 안되는 사각형을 볼 수 있습니다. 또한 큰 상자에 나타나는 콤보 상자 드롭 다운 선택과 같은 모양의 일부 아티팩트를 볼 수 있습니다.

enter image description here

나는 유물을 제거하는 방법에 대한 포인터를 감사하고 삽입 된 텍스트 강조 문제를 해결하는 것입니다.

답변

3

아래와 같이합니다. 읽기 전용 편집 컨트롤 IDC_EDIT1의 배경이 흰색으로 바뀝니다. 이것은 내 프로젝트 중 하나에서 바로 복사하여 붙여 넣기합니다.

m_whitebrush는 HBRUSH 유형의 CTestOnCtlClorDlg의 개인 구성원이며 CTestOnCtlClorDlg 생성자에서 NULL로 초기화해야합니다.

HBRUSH CTestOnCtlClorDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{ 
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 

    int id = pWnd->GetDlgCtrlID() ; 

    if (id == IDC_EDIT1) 
    { 
    pDC->SetTextColor(RGB(0, 0, 0)); 
    pDC->SetBkColor(RGB(255,255,255)); 

    if (!m_whitebrush) 
     m_whitebrush = CreateSolidBrush(RGB(255,255,255)) ; 

    hbr = m_whitebrush ; 
    } 

    return hbr; 
} 

void CTestOnCtlClorDlg::OnDestroy() 
{ 
    CDialog::OnDestroy(); 

    if (m_whitebrush !=NULL) 
    { 
    DeleteObject(m_whitebrush) ; 
    m_whitebrush = NULL ; 
    } 
}