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

纵横车 2014-05-01 04:36:13
我在窗口里加了一个按钮,一个文本框,一个进度条,然后用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
...全文
128 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
WJN92 2014-05-01
  • 打赏
  • 举报
回复
你把PAINT消息发送给控件
纵横车 2014-05-01
  • 打赏
  • 举报
回复
引用 3 楼 fhqdx0012 的回复:
OD反汇编调试
听说过,不会用。有没有简单点的办法?
fhqdx0012 2014-05-01
  • 打赏
  • 举报
回复
OD反汇编调试
纵横车 2014-05-01
  • 打赏
  • 举报
回复
引用 1 楼 fhqdx0012 的回复:
你调式下 对_ProcWinMain    下条件记录断点记录下uMsg的值
怎么调试,不懂呀。
fhqdx0012 2014-05-01
  • 打赏
  • 举报
回复
你调式下 对_ProcWinMain    下条件记录断点记录下uMsg的值

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧