У меня есть элемент управления Edit, который имеет только чтение, в котором есть текст. Я хотел бы переключить серый цвет по умолчанию на белый, но имел ограниченную удачу. В своем первом ходу, я выполнял следующий код во время инициализации диалога:Изменить Цвет только для чтения CEdit control Артефакты и проблема выделения текста
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);
}
На скриншоте ниже, вы можете увидеть, что текст вставляется после факта (это то, что должно произойти) и появляется синим цветом - я понятия не имею, с чего начать, как заставить его просто выглядеть как обычный, не выделенный текст. При нажатии на него оно появляется нормально. В левом нижнем углу каждого элемента управления редактированием можно увидеть квадрат, который не должен появляться там. Кроме того, вы можете увидеть некоторые артефакты того, что выглядит как выпадающий список со списком, появляющийся в больших коробках.
Я был бы признателен за любые указатели о том, как избавиться от артефактов и решить проблему выделения для вставленного текста.