鱼C论坛

 找回密码
 立即注册
查看: 1524|回复: 3

win32汇编程序问题,怎么不显示窗口啊谁帮我看下,感激啊,代码如下

[复制链接]
发表于 2013-3-13 11:33:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
include gdi32.inc
includelib user32.lib
includelib gdi32.lib
includelib kernel32.lib
ICO_MAIN equ  1000h ;图标
IDM_MAIN equ  2000h ;菜单
IDA_MAIN equ  2000h ;加速键
IDM_OPEN equ  4101h
IDM_OPTION equ  4102h
IDM_EXIT equ  4103h
IDM_SETFONT equ  4201h
IDM_SETCOLOR equ  4202h
IDM_INACT equ  4203h
IDM_GRAY equ  4204h
IDM_BIG  equ  4205h
IDM_SMALL equ  4206h
IDM_LIST equ  4207h
IDM_DETAIL equ  4208h
IDM_TOOLBAR equ  4209h
IDM_TOOLBARTEXT equ  4210h
IDM_INPUTBAR equ  4211h
IDM_STATUSBAR equ  4212h
IDM_HELP equ  4301h
IDM_ABOUT equ  4302h
.data?
hmenu   dd ?
hInstance  dd ?
hWindMain  dd ?
haccelerator  dd ?
hSubmenu  dd ?
.const
szclassname  db 'my class',0
szcaptionname db '练习程序',0
szformat  db "你选择了程序:%08x",0
.code
_DESPLAYMENUITEM proc _dwcommandid
local szbuffer[256]:BYTE
pushad
invoke wsprintf,addr szbuffer,addr szformat,_dwcommandid
invoke MessageBox,hWindMain,addr szbuffer,offset szcaptionname,MB_OK
popad
ret
_DESPLAYMENUITEM endp
_QUIT PROC
pushad
invoke DestroyWindow,hWindMain
invoke PostQuitMessage,NULL
popad
ret
_QUIT endp
WIN_MAINPROC proc uses ebx esi edi ebp,hWnd,uMsg,wParam,lParam
local @stPos:POINT
local @hSysMenu
mov eax,uMsg
.if eax==WM_CREATE
invoke GetSubMenu,hmenu,1
mov hSubmenu,eax
.elseif eax== WM_COMMAND
mov eax,wParam
invoke _DESPLAYMENUITEM,ax
.if ax==IDM_EXIT
INVOKE _QUIT
.elseif eax>=IDM_TOOLBAR && eax<IDM_STATUSBAR
mov ebx,eax
  invoke GetMenuState,hmenu,ebx,MF_BYCOMMAND
  .if eax==MF_CHECKED
  mov eax,MF_UNCHECKED
.else
mov eax,MF_CHECKED
.endif
invoke GetMenuState,hmenu,ebx,eax
.elseif eax>=IDM_BIG && eax<=IDM_DETAIL
invoke CheckMenuRadioItem,hmenu,IDM_BIG,IDM_DETAIL,eax,MF_BYCOMMAND
.endif
.elseif eax== WM_SYSCOMMAND
mov eax,wParam
.if ax==IDM_HELP||ax==IDM_ABOUT
invoke _DESPLAYMENUITEM,wParam
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
.elseif eax==WM_RBUTTONDOWN
invoke GetCursorPos,addr @stPos
invoke TrackPopupMenu,hSubmenu,TPM_LEFTALIGN,@stPos.x,@stPos.y,NULL,hWnd,NULL
.elseif eax==WM_CLOSE
call _QUIT
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
WIN_MAINPROC endp


_WINMAIN proc
local @hwndclass:WNDCLASSEX
local @hMsg:MSG
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke RtlZeroMemory,addr @hwndclass,sizeof @hwndclass
invoke LoadMenu,hInstance,IDM_MAIN
mov hmenu,eax
invoke LoadAccelerators,hInstance,IDM_MAIN
mov haccelerator,eax
push hInstance
pop @hwndclass.hInstance
mov @hwndclass.cbSize,sizeof WNDCLASSEX
mov @hwndclass.style,CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS
mov @hwndclass.hbrBackground,COLOR_WINDOW +1
mov @hwndclass.lpszClassName,offset szclassname
mov @hwndclass.lpfnWndProc,offset WIN_MAINPROC
invoke CreateWindowEx,WS_EX_PALETTEWINDOW,addr szclassname,addr szcaptionname,WS_OVERLAPPED,100,200,300,500,NULL,hmenu,\
hInstance,NULL
mov hWindMain,eax
invoke ShowWindow,hWindMain,SW_SHOWNORMAL
invoke UpdateWindow,hWindMain
.while TRUE
invoke GetMessage,addr @hMsg,NULL,0,0
.break .if eax==0
invoke TranslateAccelerator,hWindMain,haccelerator,addr @hMsg
.if eax==0
invoke TranslateMessage,addr @hMsg
invoke DispatchMessage,addr @hMsg
.endif
.endw
ret
_WINMAIN endp

start:
call _WINMAIN
invoke ExitProcess,NULL
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-14 21:09:47 | 显示全部楼层
按老罗那本书的例子,自己对照...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-12 22:20:50 | 显示全部楼层
没看完,感觉那个IF 好像不配对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-12 22:22:11 | 显示全部楼层
if ax==IDM_EXIT
这行,好像应该改为
.elseif  eax==IDM_TEXT
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 20:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表