BN_PUSHED vs. BN_UNPUSHED
От: adrenalin  
Дата: 16.09.04 19:13
Оценка:
Такая проблемка: создается кнопка
hBtn=CreateWindow("BUTTON","1",
WS_VISIBLE | WS_CHILD | BS_OWNERDRAW,
100,100,50,20,
hWnd,HMENU(IDB_OWNERDRAW),hInst,NULL);
Так как кнопа имеет BS_OWNERDRAW стиль, то сами ее рисуем.
case WM_DRAWITEM:
BeginPaint(hWnd,PS);

res=SendMessage(hWnd,BM_GETSTATE,0,0);
rc=&PS->rcPaint;

FrameRect(PS->hdc,rc,CreateSolidBrush(RGB(255,0,0)));

if (res && BST_FOCUS)
DrawFocusRect(PS->hdc,rc);

if (res && BST_PUSHED)
FrameRect(PS->hdc,rc,CreateSolidBrush(RGB(255,0,0)));

EndPaint(hWnd,PS);
return 1;
Она может иметь фокус(BST_FOCUS), быть нажатой (BST_PUSHED) итд.
При нажатии винда меняет состояние кнопки: т.е. (res && BST_PUSHED)=TRUE
и отсылает главному окну WM_DRAWITEM для перерисовки кнопы.
А теперь вопрос:
Почему при отпускании кнопы винда не отсылает такое же сообщение
на перерисовку.И как поймать это событие?(WM_COMMAND с NotifyCode BN_UNPUSHED,
который указывается в HIWORD(wParam) почему-то не работает.Кстати кто знает почему?)
Re: BN_PUSHED vs. BN_UNPUSHED
От: Pavel Dvorkin Россия  
Дата: 17.09.04 05:01
Оценка:
Привет!

adrenalin wrote:

> Так как кнопа имеет BS_OWNERDRAW стиль, то сами ее рисуем.

> case WM_DRAWITEM:
> BeginPaint(hWnd,PS);

Никаких BeginPaint! Через DRAWITEMSTRUCT тебе передали hDC, на нем и
рисуй.

> Почему при отпускании кнопы винда не отсылает такое же сообщение

> на перерисовку.И как поймать это событие?(WM_COMMAND с NotifyCode BN_UNPUSHED,
> который указывается в HIWORD(wParam) почему-то не работает.Кстати кто знает почему?)

Через DRAWITEMSTRUCT тебе передали состояние кнопки, прими во внимание.
См. поля itemState и itemAction.

--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.8
With best regards
Pavel Dvorkin
Re[2]: BN_PUSHED vs. BN_UNPUSHED
От: adrenalin  
Дата: 17.09.04 18:29
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

>> Почему при отпускании кнопы винда не отсылает такое же сообщение

>> на перерисовку.И как поймать это событие?(WM_COMMAND с NotifyCode BN_UNPUSHED,
>> который указывается в HIWORD(wParam) почему-то не работает.Кстати кто знает почему?)

PD>Через DRAWITEMSTRUCT тебе передали состояние кнопки, прими во внимание.

PD>См. поля itemState и itemAction.

Это понятно, но все-таки это не ответ на вопрос "Почему при отпускании кнопы винда не отсылает такое же сообщение на перерисовку"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.