вернуть курсор-стрелку

Тема в разделе "WASM.BEGINNERS", создана пользователем gale1238, 10 июн 2010.

  1. gale1238

    gale1238 New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2009
    Сообщения:
    72
    Сначала меняю курсор:
    Код (Text):
    1. invoke LoadCursor,NULL,IDC_HAND
    2. invoke SetSystemCursor,eax,OCR_NORMAL
    Работает.
    Затем возвращаю курсор:
    Код (Text):
    1. invoke LoadCursor,NULL,IDC_ARROW
    2. invoke SetSystemCursor,eax,OCR_NORMAL
    Не работает.
     
  2. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    GetLastError
     
  3. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Может, стоит быть скромнее и использовать SetCursor()? Мышь не личная. Ну и это, в чём идея?
     
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.890
    gale1238
    для стандартных курсоров типа IDC_ARROW можно вообще обходится без LoadCursor
    invoke SetCursor 10011h
    это работает от Win3.11 до WinXP
     
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.890
    gale1238
    Стандартые ID можно узнать заранее, например так
    Код (Text):
    1. ; masm windows gui #
    2. .686P
    3. .mmx
    4. .model flat
    5. include windows.inc
    6. includelib user32.lib
    7. extern _imp__wsprintfA:dword
    8. extern _imp__LoadCursorA@8:dword
    9. extern _imp__MessageBoxA@16:dword
    10. IDC_ARROW                            equ 32512
    11. IDC_IBEAM                            equ 32513
    12. IDC_WAIT                             equ 32514
    13. IDC_CROSS                            equ 32515
    14. IDC_UPARROW                          equ 32516
    15. IDC_SIZE                             equ 32640
    16. IDC_ICON                             equ 32641
    17. IDC_SIZENWSE                         equ 32642
    18. IDC_SIZENESW                         equ 32643
    19. IDC_SIZEWE                           equ 32644
    20. IDC_SIZENS                           equ 32645
    21. IDC_SIZEALL                          equ 32646
    22. IDC_NO                               equ 32648
    23. IDC_HAND                          equ 32649
    24. IDC_APPSTARTING                      equ 32650
    25. IDC_HELP                          equ 32651
    26. buffer  equ 400
    27. .code
    28. start:  xor ebx,ebx
    29.     sub esp,buffer
    30.     mov ebp,esp ; сохраняем указатель на буфер в регистре EBP
    31.     push IDC_ARROW
    32.     push ebx
    33.     call _imp__LoadCursorA@8
    34.     push eax
    35.     push IDC_IBEAM
    36.     push ebx
    37.     call _imp__LoadCursorA@8
    38.     push eax
    39.     push IDC_WAIT
    40.     push ebx
    41.     call _imp__LoadCursorA@8
    42.     push eax
    43.     push IDC_CROSS
    44.     push ebx
    45.     call _imp__LoadCursorA@8
    46.     push eax
    47.     push IDC_UPARROW
    48.     push ebx
    49.     call _imp__LoadCursorA@8
    50.     push eax
    51.     push IDC_SIZE
    52.     push ebx
    53.     call _imp__LoadCursorA@8
    54.     push eax
    55.     push IDC_ICON
    56.     push ebx
    57.     call _imp__LoadCursorA@8
    58.     push eax
    59.     push IDC_SIZENWSE
    60.     push ebx
    61.     call _imp__LoadCursorA@8
    62.     push eax
    63.     push IDC_SIZENESW
    64.     push ebx
    65.     call _imp__LoadCursorA@8
    66.     push eax
    67.     push IDC_SIZEWE
    68.     push ebx
    69.     call _imp__LoadCursorA@8
    70.     push eax
    71.     push IDC_SIZENS
    72.     push ebx
    73.     call _imp__LoadCursorA@8
    74.     push eax
    75.     push IDC_SIZEALL
    76.     push ebx
    77.     call _imp__LoadCursorA@8
    78.     push eax
    79.     push IDC_NO
    80.     push ebx
    81.     call _imp__LoadCursorA@8
    82.     push eax
    83.     push IDC_HAND
    84.     push ebx
    85.     call _imp__LoadCursorA@8
    86.     push eax
    87.     push IDC_APPSTARTING
    88.     push ebx
    89.     call _imp__LoadCursorA@8
    90.     push eax
    91.     push IDC_HELP
    92.     push ebx
    93.     call _imp__LoadCursorA@8
    94.     push eax
    95.     push offset format
    96.         push ebp;offset buffer
    97.     call _imp__wsprintfA
    98.     push ebx
    99.     push offset caption;заголовок 
    100.     push ebp;offset buffer;текст  
    101.     push ebx
    102.     call _imp__MessageBoxA@16
    103.     add esp,4*18+buffer;корректируем стек  
    104.     retn
    105. format  db 'IDC_HELP',9,'%08Xh',0Ah
    106. db 'IDC_APPSTARTING',9,'%08Xh',0Ah
    107. db 'IDC_HAND',9,'%08Xh',0Ah
    108. db 'IDC_NO',9,9,'%08Xh',0Ah
    109. db 'IDC_SIZEALL',9,'%08Xh',0Ah
    110. db 'IDC_SIZENS',9,'%08Xh',0Ah
    111. db 'IDC_SIZEWE',9,'%08Xh',0Ah
    112. db 'IDC_SIZENESW',9,'%08Xh',0Ah
    113. db 'IDC_SIZENWSE',9,'%08Xh',0Ah
    114. db 'IDC_ICON',9,'%08Xh',0Ah
    115. db 'IDC_SIZE',9,9,'%08Xh',0Ah
    116. db 'IDC_UPARROW',9,'%08Xh',0Ah
    117. db 'IDC_CROSS',9,'%08Xh',0Ah
    118. db 'IDC_WAIT',9,'%08Xh',0Ah
    119. db 'IDC_IBEAM',9,'%08Xh',0Ah
    120. db 'IDC_ARROW',9,'%08Xh',0
    121. caption db 'Cursor',0
    122. end start
    более красивая программка позволяюющая узнать хэндлы системных битмэпов, иконок и куpсоpов by The Svin находится здесь
     
  6. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Mikl___
    но не на висте.
     
  7. gale1238

    gale1238 New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2009
    Сообщения:
    72
    Програмку
    Код (Text):
    1. invoke LoadCursor,NULL,IDC_whatever
    2. invoke SetSystemCursor,eax,OCR_NORMAL
    надо запускать дважды. В первый раз меняем курсор, а во второй раз его восстанавливаем. И все дела.