|
3鱼币
- .386
- .model flat,stdcall
- option casemap:none
- include windows.inc
- include gdi32.inc
- includelib gdi32.lib
- include user32.inc
- includelib user32.lib
- include kernel32.inc
- includelib kernel32.lib
- .data? ;定义变量
- hInstance dd ?
- hWinMain dd ?
- .const;定义常量,
- szClassName db 'wwwwww',0
- szCaptionMain db 'eeeeee',0
- szText db 'wwww00',0
- .code
- _ProcWinMain proc uses ebx edi esi,hWnd,uMsg,wParam,lParam
- ;定义局部变量用关键字local
- local @stPs:PAINTSTRUCT
- local @stRect:PAINTSTRUCT
- local @hDc
- mov eax,umsg
- .if eax==WM_PAINT
- invoke BeginPaint,hWnd,addr @stPs
- mov @hDc,eax
- invoke GetClientRect,hWnd ,addr @stRect
- invoke DrawText,@hDc,addr szText,-1,\
- addr @stRect,\
- DT_SINGLELINE or DT_CENTER or DT_VCENTER
- invoke EndPaint,hWnd,addr @stPs
- .elseif meax==WM_CLOSE
- invoke DestroyWindow,hWinMain ;销毁窗口
- invoke PostQuitMessage,0 ;向消息循环中发出退出消息
- .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 ;将应用程序的句柄放入hInstance变量
- invoke RtlZeroMemory,addr @stWndClass,sizeof WNDCLASSEX
- ;-----下面注册窗口类
- invoke LoadCursor,0,IDC_ARROW ;加载箭头形指针句柄
- mov @stWndClass.hCursor,eax ;鼠标指针赋值
- push hInstance
- pop @stWndClass.hInstance ;窗口句柄赋值
- mov @stWndClass.cbSize,sizeof WNDCLASSEX ;结构大小
- mov @stWndClass.style,CS_HREDRAW or CS_VREDRAW ;设置窗口样式
- 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,\
- 100,100,600,400,\
- NULL,NULL,hInstance,NULL
- mov hWinMain,eax
- invoke ShowWindow,hWinMain,SW_SHOWNORMAL ;显示窗口
- invoke UpdateWindow,hWinMain ;刷新窗口客户区,导致客户区窗口paint
- ;消息循环
- .while TRUR
- 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
复制代码 哪里错了 |
最佳答案
查看完整内容
.386
.model flat,stdcall
option casemap:none
include windows.inc
include gdi32.inc
includelib gdi32.lib
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
; 数据段
.data? ;变量
hInstance dd ?
hWinMain dd ?
.const ;常量
szClassName db 'MyClass',0
szCaptionMain db '窗口',0
szText db '000000000000',0
; 代码段
.code ...
|