Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.21.233.41] |
|
Сообщ.
#1
,
|
|
|
Доброго времени суток!
Почему не получается изменить цвет текста на кнопке? Скрытый текст Я новичек case WM_COMMAND:{ if(wParam == IDB_Button){ wchar_t szFace[] = L"Georgia"; HFONT hFont = CreateFontW( 30, 0, 0, 0, FW_BLACK, FALSE, FALSE, FALSE, RUSSIAN_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, DEFAULT_PITCH || FF_DONTCARE, szFace ); HDC hDCbtn = GetDC((HWND)lParam); SetTextColor(hDCbtn, RGB(0, 100, 255)); SendMessage(hBtn2, WM_CTLCOLORBTN, (WPARAM)hFont, TRUE); SendMessage(hBtn2, WM_SETFONT, (WPARAM)hFont, TRUE); } break; } |
Сообщ.
#2
,
|
|
|
sc2proton, для раскраски контролов используется это:
WM_COLOR..xx Их несколько разных. Сразу надо задавать 3 цветовых параметра - цвет текста, цвет фона текста и цвет фона контрола. Всё это хозяйство точно по докам работало до winXP, дальше разработчики Виндуса начали хреначить. Некоторые возможности изменения цветов контролов исчезли. Для каких контролов какие цвета так можно устойчиво менять я уже не помню. --- Чтобы гарантировано поменять цвет надписи для любого контрола надо менять его поведение, т.е. модифицировать его оконную процедуру. |
Сообщ.
#3
,
|
|
|
Что то не фурычит не с одним из них WM_CTLCOLORBTN, WM_DRAWITEM, WM_CTLCOLORSTATIC
case WM_CTLCOLORBTN:{ HDC hdcButton = (HDC)wParam; HWND hwndButton = (HWND)lParam; SetTextColor(hdcButton, RGB(255,0,0)); SetBkMode(hdcButton, TRANSPARENT); return (LRESULT)CreateSolidBrush(RGB(0,0,255)); } Не работает! |
Сообщ.
#4
,
|
|
|
Цитата sc2proton @ Что то не фурычит не с одним из них WM_CTLCOLORBTN, WM_DRAWITEM, WM_CTLCOLORSTATIC Не повезло. Саб-классинг надо делать. приблизительно так После обработки WM_PAINT оригинальной оконной процедуры тоже обработаем это сообщение - напишем нужным цветом по контролу. я такое делал, это точно работало. |
Сообщ.
#5
,
|
|
|
Цитата sc2proton @ Что то не фурычит не с одним из них WM_CTLCOLORBTN... https://docs.microsoft.com/en-us/windows/wi.../wm-ctlcolorbtn Ясно же написано: Цитата The WM_CTLCOLORBTN message is sent to the parent window of a button before drawing the button. The parent window can change the button's text and background colors. However, only owner-drawn buttons respond to the parent window processing this message. Сделай owner-draw кнопку и будет работать. И там же дальше: Цитата By default, the DefWindowProc function selects the default system colors for the button. Buttons with the BS_PUSHBUTTON, BS_DEFPUSHBUTTON, or BS_PUSHLIKE styles do not use the returned brush. Buttons with these styles are always drawn with the default system colors. Drawing push buttons requires several different brushes-face, highlight, and shadow-but the WM_CTLCOLORBTN message allows only one brush to be returned. To provide a custom appearance for push buttons, use an owner-drawn button. И ссылка как это сделать: https://docs.microsoft.com/en-us/windows/wi...-controls-intro |
Сообщ.
#6
,
|
|
|
В общем я так понял в предопределенной кнопке нельзя красить текст, только свою писать?
|
Сообщ.
#7
,
|
|
|
Цитата sc2proton @ В общем я так понял в предопределенной кнопке нельзя красить текст, только свою писать? Так я же сказал тебе, как это сделать. Если писать свою кнопку (так или иначе) не будет отображаться визуальный стиль Виндуса. --- Можно вообще использовать "обычное" окно подходящего стиля в качестве кнопки. Как это делает "Борланд" (в некоторых свои классах). Однако при собственном рисовании не будут воспроизводиться характерные визуальные стили. |
Сообщ.
#8
,
|
|
|
Я понял что я ничего не понял
Всем спасибо за ответы! |
Сообщ.
#9
,
|
|
|
Сообщ.
#10
,
|
|
|
Спасибо ЫукпШ
|
Сообщ.
#11
,
|
|
|
И правда книга очень приятно и легко читается, еще раз благодарю ЫукпШ.
|