Такая проблемка: создается кнопка
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);
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) почему-то не работает.Кстати кто знает почему?)
adrenalin wrote:
> Так как кнопа имеет BS_OWNERDRAW стиль, то сами ее рисуем. > case WM_DRAWITEM: > BeginPaint(hWnd,PS);
Никаких BeginPaint! Через DRAWITEMSTRUCT тебе передали hDC, на нем и
рисуй.
> Почему при отпускании кнопы винда не отсылает такое же сообщение > на перерисовку.И как поймать это событие?(WM_COMMAND с NotifyCode BN_UNPUSHED, > который указывается в HIWORD(wParam) почему-то не работает.Кстати кто знает почему?)
Через DRAWITEMSTRUCT тебе передали состояние кнопки, прими во внимание.
См. поля itemState и itemAction.
Здравствуйте, Pavel Dvorkin, Вы писали:
>> Почему при отпускании кнопы винда не отсылает такое же сообщение >> на перерисовку.И как поймать это событие?(WM_COMMAND с NotifyCode BN_UNPUSHED, >> который указывается в HIWORD(wParam) почему-то не работает.Кстати кто знает почему?)
PD>Через DRAWITEMSTRUCT тебе передали состояние кнопки, прими во внимание. PD>См. поля itemState и itemAction.
Это понятно, но все-таки это не ответ на вопрос "Почему при отпускании кнопы винда не отсылает такое же сообщение на перерисовку"