Как сделать CStatic control (MFC) прозрачным? - PullRequest
5 голосов
/ 06 апреля 2011

Мое приложение имеет стартовый диалог с изображением, которое заполняет весь диалог. Дополнительно имеется элемент управления 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();

Ответы [ 2 ]

3 голосов
/ 06 апреля 2011

Привет, вы можете найти прозрачный статический образец здесь

0 голосов
/ 06 апреля 2011

Этот ответ связан с Windows API, а не с платформой MFC, но концепции переводятся просто:

Правильный способ сделать прозрачные кнопки в WINAPI

Ваша проблемазаключается в том, что достижение прозрачных элементов управления с использованием собственных элементов управления Win32 конфликтует с достижением элементов управления без мерцания при перерисовке.

...