hola gente, bueno hice este codigo y trabaja exactamente como yo quiero que haga, el problema es que
la CPU se sobrecarga, llega al 50% cuando posiciono el cursor sobre un control creado y no encuentro
del PORQUE lo hace : P
por favor ayuda! ya revise la documentacion y devuelvo los valores que pide : P
depurara el programa si supiera que hay un error pero el programa no se cuelga ni nada, al parece esta mal estructurado , gracias!
.386
.model flat,stdcall
option casemap:none
include \masm32\include\masm32rt.inc
myWNDPROC proto :HWND,:UINT,:WPARAM,:LPARAM
WndProc proto :HWND,:UINT,:WPARAM,:LPARAM
WinMain proto :DWORD,:DWORD
.data
ClassName db "mypaint",0
AppName db "paint program",0
myclass db "Static",0
sname db "statictohide",0
sname2 db "statictohide2",0
hstatic dd 0
hstatic2 dd 0
mysubclass dd 0
returnclass dd 0
.data?
hInstance HINSTANCE ?
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke WinMain, hInstance,NULL
invoke ExitProcess,eax
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND
mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInstance
pop wc.hInstance
mov wc.hbrBackground,COLOR_BTNFACE+1
mov wc.lpszMenuName,NULL
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc
INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\
hInst,NULL
mov hwnd,eax
invoke ShowWindow, hwnd,SW_SHOWNORMAL
invoke UpdateWindow, hwnd
.WHILE TRUE
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDW
mov eax,msg.wParam
ret
WinMain endp
myWNDPROC proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL LEAVEAREA:TRACKMOUSEEVENT
.if uMsg==WM_MOUSEMOVE
invoke ShowWindow,hWnd,SW_HIDE
mov edx,hWnd
mov LEAVEAREA.cbSize,sizeof(TRACKMOUSEEVENT)
mov LEAVEAREA.dwFlags,TME_HOVER or TME_LEAVE
mov LEAVEAREA.dwHoverTime,1000
mov LEAVEAREA.hwndTrack,edx
invoke TrackMouseEvent,addr LEAVEAREA
.elseif uMsg==WM_MOUSELEAVE
invoke ShowWindow,hWnd,SW_SHOW
.else
invoke CallWindowProc,mysubclass,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
myWNDPROC endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL LEAVEAREA:TRACKMOUSEEVENT
.IF uMsg==WM_DESTROY
invoke SetWindowLong,mysubclass,GWL_WNDPROC,myWNDPROC
invoke PostQuitMessage,NULL
.ELSEIF uMsg==WM_CREATE
invoke CreateWindowEx,NULL,addr myclass,addr sname,WS_VISIBLE or WS_CHILD or SS_NOTIFY, \
0h,0h,50h,50h,hWnd,NULL,hInstance,NULL
mov hstatic,eax ; save hanlde static control
invoke CreateWindowEx,NULL,addr myclass,addr sname2,WS_VISIBLE or WS_CHILD or SS_NOTIFY, \
60h,0h,50h,50h,hWnd,NULL,hInstance,NULL
mov hstatic2,eax
invoke SetWindowLong,hstatic,GWL_WNDPROC,myWNDPROC
invoke SetWindowLong,hstatic2,GWL_WNDPROC,myWNDPROC
mov mysubclass,eax
.ELSE
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.ENDIF
xor eax,eax
ret
WndProc endp
end start