изменение курсора при наведение на кнопку

Тема в разделе "WASM.BEGINNERS", создана пользователем zxcc, 29 апр 2007.

  1. zxcc

    zxcc New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2006
    Сообщения:
    172
    Подскажите пожалуйста как сделать изменение курсора при наведение на кнопку.
     
  2. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    WM_MOUSEMOVE
     
  3. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    я точно не знаю, а SetClassLongPtr c GCLP_HCURSOR не поможет? (для всех кнопок в пределах приложения)
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    SetCursor() =)
     
  5. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    Great
    это же вообще, а не только для баттонов )
     
  6. zxcc

    zxcc New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2006
    Сообщения:
    172
    а подробнее насчёт wm_mousemove можете подсказать?
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Nouzui
    zxcc
    Обрабатывать WM_MOUSEMOVE. Когда курсор попадает над кнопкой, менять курсор через SetCursor. Когда оно ушло от кнопки, возвращать старый.
     
  8. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    Когда приложение свалится, курсор так и останется..
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Еще можно попробовать для окна кнопки поставить курсор WNDCLASSEX->hCursor. Как уже сказали, SetClassLong( GCL_HCURSOR )
     
  10. zxcc

    zxcc New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2006
    Сообщения:
    172
    а где можно исходник посмотреть с WM_MOUSEMOVE
     
  11. zxcc

    zxcc New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2006
    Сообщения:
    172
    Как через WM_MOUSEMOVE определить что курсор находиться над кнопкой?
     
  12. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    zxcc
    Координаты курсора возвращаются в двух словах последнего параметра процедуры обработки WM_MOUSEMOVE.
    И почему бы не глянуть в MSDN?
     
  13. zxcc

    zxcc New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2006
    Сообщения:
    172
    да вот не получается где нибудь пример посмотреть бы
     
  14. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    zxcc
    Никогда в жизни не писал под винду на асме. А на масме вообще ни под что не писал. Мне хватило 10 мин, чтобы ткнуть наугад в двадцатый урок Iczelion'a (ни один из которых я никогда не читал), скачать пример и вставить в процедуру EditWndProc
    Код (Text):
    1. .elseif uMsg==WM_MOUSEMOVE
    2.     invoke MessageBox,hEdit,addr lParam,addr AppName,MB_OK+MB_ICONINFORMATION
    В результате сообщение (с координатами в ASCII) появляется после наведения на текстовое поле. Т.е. координаты в принципе не нужны. Просто вместо выведения мессэдж бокса заменить иконку курсора.
    В чем проблема?
     
  15. zxcc

    zxcc New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2006
    Сообщения:
    172
    Я извиняюсь но мне нужно изменить курсор при наведении на конкретную кнопку в диалоговом окне.Может кто подскажет исходник где посмотреть?
     
  16. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    а чем тебе предыдущий код не устраивает?
     
  17. zxcc

    zxcc New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2006
    Сообщения:
    172
    меняется для всего окна а мне нужно для конкретной кнопки.
     
  18. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Всё уже было сказано - ставь в соответствие классу кнопки хэндл курсора.
     
  19. kero

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

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    zxcc
    >Я извиняюсь но мне нужно изменить курсор при наведении на конкретную кнопку в диалоговом окне.
    >Может кто подскажет исходник где посмотреть?

    Ну, смотрите, вариант без сабклассинга.

    Код (Text):
    1. // .asm //
    2.  
    3. .386
    4. .model flat,stdcall
    5. option casemap:none
    6. include \masm32\include\windows.inc
    7. include \masm32\include\user32.inc
    8. include \masm32\include\kernel32.inc
    9. includelib \masm32\lib\user32.lib
    10. includelib \masm32\lib\kernel32.lib
    11. .data
    12. .data?
    13. .code
    14. DlgProc proc uses ebx hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
    15.   mov ebx,wParam
    16.   .if uMsg==WM_CLOSE
    17.     invoke EndDialog,hWnd,0
    18.   .elseif uMsg==WM_SETCURSOR && ebx!=hWnd
    19.     invoke GetWindowLong,ebx,GWL_ID
    20.     invoke LoadCursor,0,eax
    21.     push eax
    22.     invoke SetClassLong,ebx,GCL_HCURSOR,eax
    23.     pop eax
    24.     invoke SendMessage,ebx,BM_SETIMAGE,1,eax
    25.   .else
    26.     xor eax,eax
    27.     jmp @f
    28.   .endif
    29.   xor eax,eax
    30.   inc eax
    31. @@:
    32.   ret
    33. DlgProc endp
    34. start:
    35.   invoke GetModuleHandle,0
    36.   invoke DialogBoxParam,eax,1,0,addr DlgProc,0
    37.   invoke ExitProcess,eax
    38. end start
    39.  
    40. // .rc //
    41.  
    42. #include "\masm32\include\resource.h"
    43. #define _bt BUTTON, WS_CHILD | WS_VISIBLE | BS_ICON | BS_FLAT
    44. #define x 30,30
    45. 1 DIALOGEX 0,0,200,200
    46. STYLE WS_POPUP | WS_SYSMENU | DS_CENTER
    47. EXSTYLE WS_EX_TOOLWINDOW | WS_EX_TOPMOST
    48. CAPTION "CURSORS 4 BUTTONS"
    49. {
    50.  CONTROL "", 32512, _bt,  20,  20, x
    51.  CONTROL "", 32513, _bt,  60,  20, x
    52.  CONTROL "", 32514, _bt, 100,  20, x
    53.  CONTROL "", 32515, _bt, 140,  20, x
    54.  CONTROL "", 32516, _bt,  20,  60, x
    55.  CONTROL "", 32642, _bt,  60,  60, x
    56.  CONTROL "", 32643, _bt, 100,  60, x
    57.  CONTROL "", 32644, _bt, 140,  60, x
    58.  CONTROL "", 32645, _bt,  20, 100, x
    59.  CONTROL "", 32646, _bt,  60, 100, x
    60.  CONTROL "", 32648, _bt, 100, 100, x
    61.  CONTROL "", 32649, _bt, 140, 100, x
    62.  CONTROL "", 32650, _bt,  20, 140, x
    63.  CONTROL "", 32651, _bt,  60, 140, x
    64.  CONTROL "", 32663, _bt, 100, 140, x
    65.  CONTROL "", 32631, _bt, 140, 140, x
    66. }
    В примере использованы предопределенные системные курсоры.
    Что нужно докодить в случае произвольных курсоров - догадайтесь сами.