当前位置: 代码迷 >> 汇编语言 >> 窗口上的控件显示出现有关问题
  详细解决方案

窗口上的控件显示出现有关问题

热度:103   发布时间:2016-05-02 04:36:24.0
窗口上的控件显示出现问题。
我在窗口里加了一个按钮,一个文本框,一个进度条,然后用BitBlt函数设置了窗口背景为一张图片。但是我一拉大窗口后控件就不见了(只有拉大会这样,缩小窗口控件还在)。而且我将鼠标移到控件上,然后在移到窗口的空余的客户区上时控件也会不见。
求解怎么会这样!具体代码如下,很简单的一个窗口我就不写注释了。
_ProcWinMain	proc	uses ebx edi esi,hWnd,uMsg,wParam,lParam
local @stPs:PAINTSTRUCT
local @stRect:RECT
mov eax,uMsg
.if eax==WM_PAINT
invoke BeginPaint,hWnd,addr @stPs
invoke BitBlt,hDc,0,0,1366,768,hDc1,0,0,SRCCOPY
invoke EndPaint,hWnd,addr @stPs
.elseif eax==WM_COMMAND
mov eax,wParam
movzx eax,ax
.if eax==2000h
invoke SendMessage,hProgBar,PBM_DELTAPOS,5,0
.endif
.elseif eax==WM_CLOSE
invoke DestroyWindow,hWinMain
invoke PostQuitMessage,NULL
.elseif eax==WM_CREATE
invoke CreateWindowEx,NULL,offset button,offset ok,WS_VISIBLE or WS_CHILD or BS_DEFPUSHBUTTON,0,0,100,70,hWnd,2000h,hInstance,NULL
invoke CreateWindowEx,NULL,offset edit,NULL,WS_CHILD or WS_VISIBLE or ES_MULTILINE,100,0,100,200,hWnd,1000h,hInstance,NULL
invoke CreateWindowEx,NULL,offset ProgressBar,NULL,WS_CHILD or WS_VISIBLE,0,200,200,20,hWnd,1000h,hInstance,NULL
mov hProgBar,eax
    .else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
_ProcWinMain endp
_WinMain proc
local @stWndClass:WNDCLASSEX
local @stMsg:MSG
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke LoadIcon,hInstance,1000h
mov hIcon,eax
invoke LoadBitmap,hInstance,1000h
mov hBitmap,eax
invoke CreatePatternBrush,hBitmap
mov hBrush,eax
invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
push hInstance
pop @stWndClass.hInstance
mov @stWndClass.cbSize,sizeof WNDCLASSEX
invoke LoadCursor,hInstance,IDC_ARROW
mov @stWndClass.hCursor,eax
mov @stWndClass.lpfnWndProc,offset _ProcWinMain
mov @stWndClass.hbrBackground,COLOR_WINDOW + 1
mov @stWndClass.lpszClassName,offset szClassName
invoke RegisterClassEx,addr @stWndClass
invoke CreateWindowEx,WS_EX_CLIENTEDGE,offset szClassName,offset szCaptionMain,\
WS_OVERLAPPEDWINDOW or WS_VSCROLL or WS_HSCROLL,\
0,0,600,400,NULL,NULL,hInstance,NULL
mov hWinMain,eax
invoke SendMessage,hWinMain,WM_SETICON,ICON_BIG,hIcon
invoke GetDC,hWinMain
mov hDc,eax
invoke CreateCompatibleDC,hDc
mov hDc1,eax
invoke SelectObject,hDc1,hBitmap
invoke ShowWindow,hWinMain,SW_SHOWNORMAL
invoke UpdateWindow,hWinMain
.while  TRUE
invoke GetMessage,addr @stMsg,NULL,0,0
.break .if eax==0
invoke TranslateMessage,addr @stMsg
invoke DispatchMessage,addr @stMsg
.endw
ret
_WinMain endp
start:
call _WinMain
invoke ExitProcess,NULL
end start

------解决方案--------------------
你调式下 对_ProcWinMain??? 下条件记录断点记录下uMsg的值
------解决方案--------------------
你把PAINT消息发送给控件
  相关解决方案