PDA

Просмотр полной версии : C++ Как изменить цвета контролов методами WinAPI?



iscan
05.04.2005, 16:28
По умолчанию, если поставить какой-нибудь контрол, например:
CreateWindow("button","",WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX|BS_DEFPUSHBUT TON|WS_BORDER,20,30,100,20,hWnd,(HMENU)ID_BUTTON,I nst,NULL);
то цвет его фона будет серый. Такими же получаются и кнопки.

Никак не могу найти где это поменять методами API.
(На форуме искал)

Kolinus
05.04.2005, 19:19
на самом деле все просто - создаешь свой класс на основе стандартного и указываешь нужную тебе кисть в соотв поле WNDCLASSEX? а именно изменить - по моему через setwindowlong можно - где-то в инете я видел пример - поискай - найдешь

Hawk
06.04.2005, 13:39
Есть такие сообщения, они шлются родительскому окну WM_CTLCOLOR... для многих контролсов свои (для кнопок WM_CTLCOLORBTN). Они и предназначены для изменения стандартных цветов.


HDC hdcButton = (HDC) wParam;
HWND hwndButton = (HWND) lParam;
SetTextColor(hdcButton, RGB(255,0,0)); // Set red color for text of the button
SetBkMode(hdcButton, TRANSPARENT); // Don't use text backgrtound color
return CreateSolidBrush(RGB(0,0,255)); // Return backround blue brush


Лучше конечно не создавать кисть в каждом сообщении т.к. она каждый раз создается заного и получается лик ресурсов, но для примера сойдет

(GiG)*fh
08.05.2005, 21:14
Блин, чё-то не получается ни один из способов... Чё-нить другое не посоветуете?

Hawk
10.05.2005, 09:38
Ну тогда тебе надо рисовать кнопку самому, глянь стиль BS_OWNERDRAW

Romeo
10.05.2005, 16:45
Плохо пробуешь, если не получается. А ты в паренте это пишешь или в самом контроле?

(GiG)*fh
11.05.2005, 15:16
В паренте

Eugie
12.05.2005, 16:43
Для стандартых кнопок обрабатывать WM_CTLCOLORBTN смысла мало: все равно будет использован системный цвет,
цитата:


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.


Т.е. придется рисовать кнопку самому, используя стиль BS_OWNERDRAW, либо примерно то же самое с помощью subclassing.