WIN32API: кнопка, нарисованная владельцем, создает белый фон вокруг текста при нажатии

0

Я создал кнопку "Владелец-Рисование". Я использую сообщение WM_CTLCOLORBTN, чтобы его нарисовать:

//get the text of the button
         wchar_t buttonText[20]; 
         int textLength = SendMessage((HWND)lParam,WM_GETTEXT,20,(LPARAM)buttonText);

         Font FootlightMTLight(L"Footlight MT Light",20,0,false,false,false,L"Black");
         SelectObject((HDC)wParam,FootlightMTLight.getWindowHandle());

         TextOut((HDC)wParam,30,15,buttonText,textLength);
         SetTextColor((HDC)wParam, RGB(0,0,0));
         SetBkColor((HDC)wParam, RGB(229,255,229));

         PatBlt((HDC)wParam,0,0,1,50,BLACKNESS); //x,y,width,height
         PatBlt((HDC)wParam,269/2-1,0,1,50,BLACKNESS);
         PatBlt((HDC)wParam,0,49,269/2,1,BLACKNESS);
         PatBlt((HDC)wParam,0,0,269/2,1,BLACKNESS);

        static HBRUSH handleToButtonBrush = CreateSolidBrush(RGB(229,255,229));
        return (INT_PTR)handleToButtonBrush;

"Шрифт" - это объект, который я создал (я завернул HFONT-дескриптор и функцию CreateFont с классом и т.д. GetWindowHandle() в основном возвращает HFONT).

кнопка делает красиво, но нажатие на нее делает текст-фон белым. Я искал сеть по какой-то причине и в решении, но я не нашел конкретного. заранее спасибо!

Теги:
user-interface
winapi

1 ответ

2
Лучший ответ

Вам нужно вызывать эти строки до фактического рисования текста

SetTextColor((HDC)wParam, RGB(0,0,0));
SetBkColor((HDC)wParam, RGB(229,255,229));
TextOut((HDC)wParam,30,15,buttonText,textLength);
  • 1
    Или SetBkMode прозрачный SetBkMode чтобы вам не приходилось запоминать цвет фона.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню