Кнопка под курсором (Передать сообщение WM_DRAWITEM)

Тема в разделе "WASM.WIN32", создана пользователем piritus, 13 апр 2008.

  1. piritus

    piritus Member

    Публикаций:
    0
    Регистрация:
    7 июл 2007
    Сообщения:
    36
    Всем огромное спасибо за помощь!
    BMP не отрисовывались, потому что у меня стиль кнопки был BS_OWNERDRAW.
    с BS_BITMAP работает BM_SETIMAGE
    Код (Text):
    1. invoke SendDlgItemMessage,hWin,1000,BM_SETIMAGE,IMAGE_BITMAP,hBtnOKSel
    можно как-нибудь убрать границу вокруг изображения, т.е. сделать кнопку плоской?
    Но теперь вот в чем проблема:
    у меня свой обработчик WM_DRAWITEM и он нормально обрабатывает нормальное и нажатое состояние кнопки,
    но не работает, если у кнопки стиль не BS_OWNERDRAW

    Если заполнить самому структуру DRAWITEMSTRUCT и вызвать WM_DRAWITEM, есть шанс, что обработчик будет корректно работать?
     
  2. piritus

    piritus Member

    Публикаций:
    0
    Регистрация:
    7 июл 2007
    Сообщения:
    36
    Наконец-то сделал!
    Вы все очень помогли.

    в WM_MOUSELEAVE после проверки, что это действительно именно та кнопка, которая нужна, вставил
    Код (Text):
    1. invoke GetClientRect,hBtn,addr Rct
    2. ASSUME edi:ptr SPRITE
    3.  
    4. invoke GetWindowDC,hBtn
    5. mov drw.hdc,eax ;drw - структура типа DRAWITEMSTRUCT
    6.  
    7. invoke CreateCompatibleDC,eax
    8. Mov hDC, eax
    9. invoke SelectObject,eax, [edi].hBitmap
    10. invoke BitBlt,drw.hdc,0,0,Rct.right,Rct.bottom,hDC,0,0,SRCCOPY
    11. invoke DeleteObject,hDC
     
  3. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    cresta
    На всякий случай: в вашем последнем примере не учтено хулиганское дабл-кликовое прижатие кнопки.
     
  4. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Нечего хулиганить!

    А вообще я ж не делаю полноценный контрол :)
    Просто давненько не брал в руки сей инструмент (masm), вот и решил отвлечься от php, тряхнуть стариной...