Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2008, 21:14   #1
romets
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 32
По умолчанию Цвет фона кнопки

Не подскажете, уважаемые сэры, почему не работает данный код, с помощью которого пытаюсь изменить цвет фона кнопки, путем обработки WM_ERASEBKGND (как видите, пробовал варианты).

WM_ERASEBKGND :
begin
//Result:=CallWindowProc(Pointer(T.De fProc),CHhWnd, nMsg, wParam, lParam);
NewBrush := CreateSolidBrush(clBlack);
OldBrush := SelectObject(wParam,NewBrush);
//GetClipBox(wParam,R);
GetClientRect(CHhWnd,R);
//SaveMessage(IntToStr(wParam));
//PatBlt(wParam,R.left, R.top, R.Right-R.Left, R.Bottom-R.Top, PATCOPY);
//Rectangle(wParam, R.left, R.top, R.Right-R.Left, R.Bottom-R.Top);
FillRect(wParam,R,NewBrush);
SelectObject(wParam,OldBrush);
DeleteObject(NewBrush);
Result:=1;
//InvalidateRect(CHhWnd,@R,true);
end;

На всякий случай, кнопка создается со след. свойствами:
WS_CLIPSIBLINGS or ws_Child or ws_Visible or bs_PushButton
romets вне форума Ответить с цитированием
Старый 21.01.2008, 21:31   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Может потому что вы ловите сообщение отчистки, а не отрисовки. WM_PAINT - если я неошибаюсь обрабатывайте...
BOBAH13 вне форума Ответить с цитированием
Старый 22.01.2008, 00:11   #3
romets
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 32
По умолчанию

Да, конечно, можно и через WM_PAINT, но сами понимаете, если бы работал вышеприведенный код, то это бы было бы проще гораздо. А так, через WM_PAINT и текст кнопки "ручками" придется самому тогда выводить и прочее...
romets вне форума Ответить с цитированием
Старый 22.01.2008, 00:28   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Да кнопку руками делать нечего Так что...
BOBAH13 вне форума Ответить с цитированием
Старый 22.01.2008, 00:51   #5
romets
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 32
По умолчанию

Да уже и нарисовал все. Через WM_PAINT
А проблема с WM_ERASEBKGND в том, что она работает только если кнопка BS_OWNERDRAW, т.е. по-любому все надо рисовать самому и так и эдак, во втором случае через WM_DRAWITEM.
romets вне форума Ответить с цитированием
Старый 22.01.2008, 08:22   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Так а ты убери в ней BS_OWNERDRAW
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.01.2008, 21:12   #7
romets
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 32
По умолчанию

Когда формулировал вопрос, Stilet, ведь специально написал, с каким стилем создаю:
Цитата:
На всякий случай, кнопка создается со след. свойствами:
WS_CLIPSIBLINGS or ws_Child or ws_Visible or bs_PushButton
С таким стилем не работает определение фона через WM_ERASEBKGND, а вот если заменить bs_PushButton, на BS_OWNERDRAW, то работает, но при этом приходиться и WM_PAINT обрабатывать. Т.е. в итоге все самому рисовать, что собственно и видно из названия стиля - BS_OWNERDRAW
romets вне форума Ответить с цитированием
Старый 23.01.2008, 11:01   #8
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Вся кнопка рисуется только в WM_PAINT с помощью DrawFrameControl (строчек десять, буквально ). WM_ERASEBKGND у нее ничего не делает.
B_N вне форума Ответить с цитированием
Старый 23.01.2008, 13:14   #9
romets
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 32
По умолчанию

А нет небольшого примерчика работы с этой функцией DrawFrameControl? А то я всегда обычно тупо рисую банальными GDI функциями.
romets вне форума Ответить с цитированием
Старый 23.01.2008, 14:19   #10
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

DrawFrameControl тоже банальная функция Только здесь она Вам не подойдет потому, что рисует системными цветами. Я имел в виду, что "стандартная" кнопка так рисуется. Лучше будет воспользоваться DrawEdge, особенно с флагом BF_ADJUST (правда тоже с минусом - рамка рисуется системными цветами). Не знаю насчет примеров, но это настолько простые функции, что может и просто документации хватит?

http://msdn2.microsoft.com/en-us/library/ms534865.aspx
http://msdn2.microsoft.com/en-us/lib...82(VS.85).aspx

А "крашеную" кнопку проще всего, пожалуй, на основе готовой картинки рисовать, но тем не менее, не в WM_ERASEBKGND, а в WM_PAINT.
B_N вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разный цвет фона в таблице (php) Lonix PHP 2 04.10.2008 21:39
SetBkColor не меняет цвет фона EdNovice Win Api 3 18.02.2008 23:59
Цвет кнопки Snake_ua Общие вопросы Delphi 23 04.02.2008 18:47
Как изменить цвет шрифта кнопки + объявление OnClick Yury Общие вопросы Delphi 7 04.05.2007 04:55
Стили ячеек. Цвет фона, шрифт: размер, начертание .. Virtson Microsoft Office Excel 3 10.03.2007 16:19