Мое приложение имеет стартовый диалог с изображением, которое заполняет весь диалог. Дополнительно имеется элемент управления CStatic, который отображает некоторую переменную информацию для пользователя. Я сделал контроль CStatic прозрачным со следующим кодом:
HBRUSH CStartbildDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if(pWnd->GetDlgCtrlID() == IDC_STATIC_INFO)
{
pDC->SetBkMode(TRANSPARENT);
return reinterpret_cast<HBRUSH>(::GetStockObject(NULL_BRUSH));
}
else
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
Когда я изменяю текст статического элемента управления с помощью GetDlgItem(IDC_STATIC_INFO)->SetWindowText
, новый текст перекрывает старый текст (старый текст не удаляется). Я попытался перекрасить фон перед вызовом SetWindowText
изображения с помощью GetDlgItem(IDC_STATIC_BILD)->Invalidate()
, но затем информационный текст не отображается (ни старый, ни новый).
Знаете ли вы, как я могу сделать статический элемент управления прозрачным, чтобы я также мог переопределить его новым текстом?
Спасибо за вашу помощь!
Решение:
Метод 2 (адаптированный) из codeproject-link от Саньи работал для меня.
GetDlgItem(IDC_STATIC_INFO)->SetWindowText(tmp);
CRect rect;
GetDlgItem(IDC_STATIC_INFO)->GetWindowRect(&rect);
ScreenToClient(&rect);
InvalidateRect(&rect);
UpdateWindow();