Требуется менять курсор при наведении на статик. Как обрабатывая WM_SETCURSOR, проверить для какого из дочерних окон (у меня нескольк статиков) произошло событие? Пробовал и сравнивать hWnd который передается в процедуру обработки сообщений и hWnd нужного мне окна(статик) не работает. Есть рабочий пример для диалогового окна .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 а вот мой вариант - не работает .wmsetcursor: mov eax, [myhWnd] cmp [hWnd],eax jne .finish invoke LoadCursor,0,IDC_HAND invoke SetClassLong,[hWnd],GCL_HCURSOR,eax Вообще как я понимаю сообщение обрабатывать вовсе не обязательно а можно вызвать invoke LoadCursor,0,IDC_HAND invoke SetClassLong,[hWnd],GCL_HCURSOR,eax в любой момент. Для родительского окна - работает. Но мне нужно поменять курсор когда он находися над статиком.
2 варианта. Оба работают если менять курсор для главного окна. А мне нужно для окна статик. invoke CreateWindowEx,0,StaticClassName,StaticTextN,WS_CHILD or WS_VISIBLE,\ 30,120,140,16,[hWnd],IDC_STATICWWW,[hInstance],0 push eax invoke LoadCursor,0,IDC_HAND pop ebx invoke SetClassLong,ebx,GCL_HCURSOR,eax или так пробую proc MainWindowProc hWnd,uMsg,wparam,lparam push ebx esi edi mov eax,[uMsg] cmp eax,WM_CREATE je .wmcreate тут создаю статики cmp eax,WM_SETCURSOR je .wmsetcursor .defwndproc: invoke DefWindowProc, [hWnd],[uMsg],[wparam],[lparam] jmp .finish .wmsetcursor: mov eax, [hWnd] cmp [myhWnd],eax ;myhWnd - hWnd нужного статика jne .defwndproc invoke LoadCursor,0,IDC_HAND invoke SetClassLong,[hWnd],GCL_HCURSOR,eax jmp .defwndproc
В wParam должен быть HWND окна, над которым висит курсор.... Вобщем я сделал такую проверку .wmsetcursor: nop mov eax, [hWnd] cmp [wparam],eax je .defwndproc и выяснил что wmsetcursor вызывается только для главного окна hWnd = wparam как же быть со статиками?
assorted 1) "invoke SetClassLong,[hWnd],GCL_HCURSOR,eax" - это не значит "сабклассировать" 2) SS_NOTIFY для статика - само собой: без этого у статика HTTRANSPARENT вместо HTCLIENT, так что из мышиных ловит только WM_NCHITTEST. Однако заметьте, что назначать свой курсор можно любым областям окна, а не только его контролам: просто на WM_SETCURSOR проверять, над какой областью навис курсор, например, путем GetCursorPos + PtInRect / PtInRegion. Так что в принципе достаточно и GetWindowRect для этого статика.