я точно не знаю, а SetClassLongPtr c GCLP_HCURSOR не поможет? (для всех кнопок в пределах приложения)
Nouzui zxcc Обрабатывать WM_MOUSEMOVE. Когда курсор попадает над кнопкой, менять курсор через SetCursor. Когда оно ушло от кнопки, возвращать старый.
Еще можно попробовать для окна кнопки поставить курсор WNDCLASSEX->hCursor. Как уже сказали, SetClassLong( GCL_HCURSOR )
zxcc Координаты курсора возвращаются в двух словах последнего параметра процедуры обработки WM_MOUSEMOVE. И почему бы не глянуть в MSDN?
zxcc Никогда в жизни не писал под винду на асме. А на масме вообще ни под что не писал. Мне хватило 10 мин, чтобы ткнуть наугад в двадцатый урок Iczelion'a (ни один из которых я никогда не читал), скачать пример и вставить в процедуру EditWndProc Код (Text): .elseif uMsg==WM_MOUSEMOVE invoke MessageBox,hEdit,addr lParam,addr AppName,MB_OK+MB_ICONINFORMATION В результате сообщение (с координатами в ASCII) появляется после наведения на текстовое поле. Т.е. координаты в принципе не нужны. Просто вместо выведения мессэдж бокса заменить иконку курсора. В чем проблема?
Я извиняюсь но мне нужно изменить курсор при наведении на конкретную кнопку в диалоговом окне.Может кто подскажет исходник где посмотреть?
zxcc >Я извиняюсь но мне нужно изменить курсор при наведении на конкретную кнопку в диалоговом окне. >Может кто подскажет исходник где посмотреть? Ну, смотрите, вариант без сабклассинга. Код (Text): // .asm // .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib .data .data? .code DlgProc proc uses ebx hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM mov ebx,wParam .if uMsg==WM_CLOSE invoke EndDialog,hWnd,0 .elseif uMsg==WM_SETCURSOR && ebx!=hWnd invoke GetWindowLong,ebx,GWL_ID invoke LoadCursor,0,eax push eax invoke SetClassLong,ebx,GCL_HCURSOR,eax pop eax invoke SendMessage,ebx,BM_SETIMAGE,1,eax .else xor eax,eax jmp @f .endif xor eax,eax inc eax @@: ret DlgProc endp start: invoke GetModuleHandle,0 invoke DialogBoxParam,eax,1,0,addr DlgProc,0 invoke ExitProcess,eax end start // .rc // #include "\masm32\include\resource.h" #define _bt BUTTON, WS_CHILD | WS_VISIBLE | BS_ICON | BS_FLAT #define x 30,30 1 DIALOGEX 0,0,200,200 STYLE WS_POPUP | WS_SYSMENU | DS_CENTER EXSTYLE WS_EX_TOOLWINDOW | WS_EX_TOPMOST CAPTION "CURSORS 4 BUTTONS" { CONTROL "", 32512, _bt, 20, 20, x CONTROL "", 32513, _bt, 60, 20, x CONTROL "", 32514, _bt, 100, 20, x CONTROL "", 32515, _bt, 140, 20, x CONTROL "", 32516, _bt, 20, 60, x CONTROL "", 32642, _bt, 60, 60, x CONTROL "", 32643, _bt, 100, 60, x CONTROL "", 32644, _bt, 140, 60, x CONTROL "", 32645, _bt, 20, 100, x CONTROL "", 32646, _bt, 60, 100, x CONTROL "", 32648, _bt, 100, 100, x CONTROL "", 32649, _bt, 140, 100, x CONTROL "", 32650, _bt, 20, 140, x CONTROL "", 32651, _bt, 60, 140, x CONTROL "", 32663, _bt, 100, 140, x CONTROL "", 32631, _bt, 140, 140, x } В примере использованы предопределенные системные курсоры. Что нужно докодить в случае произвольных курсоров - догадайтесь сами.