Win32汇编,窗口菜单文字乱码,不知道原因,求解释
.386.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN equ 1000h ;图标
IDM_MAIN equ 2000h ;菜单
IDA_MAIN equ 3000h ;加速键
IDM_NEW equ 2001h
IDM_OPEN equ 2002h
IDM_SAVE equ 2003h
IDM_SAVEAS equ 2004h
IDM_PRINT equ 2005h
IDM_EXIT equ 2006h
IDM_HELP equ 2007h
IDM_ABOUT equ 2008h
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance dd ?
hWinMain dd ?
hMenu dd ?
hSubMenu dd ?
;数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.const
szClassName db 'Menu Example',0
szCaptionMain db 'Assmbly',0
szMenuHelp db '帮助主题(&H)...',0
szMenuAbout db '关于本程序(&A)...',0
szCaption db '窗口',0
szFormat db '你选择的菜单命令:%08x',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
_DisplayMenuItem proc _dwCommandID
local @szBuffer:byte
pushad
invoke wsprintf,addr @szBuffer,addr szFormat,_dwCommandID
invoke MessageBox,hWinMain,addr @szBuffer,offset szCaption,MB_OK
popad
ret
_DisplayMenuItem endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Quit proc
invoke DestroyWindow,hWinMain
invoke PostQuitMessage,NULL
ret
_Quit endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 窗口过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcWinMain proc uses ebx edi esi hWnd,uMsg,wParam,lParam
local @stPos:POINT
local @hSysMenu
mov eax,uMsg
;********************************************************************
.if eax == WM_CREATE
invoke GetSubMenu,hMenu,1
mov hSubMenu,eax
;在系统菜单中添加菜单项
invoke GetSystemMenu,hWnd,FALSE
mov @hSysMenu,eax
invoke AppendMenu,@hSysMenu,MF_SEPARATOR,0,NULL
invoke AppendMenu,@hSysMenu,0,IDM_HELP,offset szMenuHelp
invoke AppendMenu,@hSysMenu,0,IDM_ABOUT,offset szMenuAbout
;处理菜单和加速键消息
.elseif eax == WM_COMMAND
invoke _DisplayMenuItem,wParam
mov eax,wParam
movzx eax,ax
.elseif eax == IDM_EXIT
call _Quit
;********************************************************************
.elseif eax == WM_CLOSE
invoke DestroyWindow,hWinMain
invoke PostQuitMessage,NULL
;********************************************************************
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
;********************************************************************
xor eax,eax
ret
_ProcWinMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain proc
local @stWndClass:WNDCLASSEX
local @stMsg:MSG
local @hAccelerator
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke LoadMenu,hInstance,IDM_MAIN
mov hMenu,eax
invoke LoadAccelerators,hInstance,IDA_MAIN
mov @hAccelerator,eax
;********************************************************************
; 注册窗口类
;********************************************************************
invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
invoke LoadIcon,hInstance,ICO_MAIN
mov @stWndClass.hIcon,eax
mov @stWndClass.hIconSm,eax
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,hMenu,hInstance,NULL
mov hWinMain,eax
invoke ShowWindow,hWinMain,SW_SHOWNORMAL
invoke UpdateWindow,hWinMain
;********************************************************************
; 消息循环
;********************************************************************
.while TRUE
invoke GetMessage,addr @stMsg,NULL,0,0
.break .if eax == 0
invoke TranslateAccelerator,hWinMain,@hAccelerator,addr @stMsg
.if eax == 0
invoke TranslateMessage,addr @stMsg
invoke DispatchMessage,addr @stMsg
.endif
.endw
ret
_WinMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
call _WinMain
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
;这是代码,下面是资源文件
#include <resource.h>
//定义资源
#define ICO_MAIN 0x1000 //图标
#define IDM_MAIN 0x2000 //菜单
#define IDA_MAIN 0x3000 //加速键
//定义子子菜单项
#define IDM_NEW 0x2001
#define IDM_OPEN 0x2002
#define IDM_SAVE 0x2003
#define IDM_SAVEAS 0x2004
#define IDM_PRINT 0x2005
#define IDM_EXIT 0x2006
#define IDM_HELP 0x2007
#define IDM_ABOUT 0x2008
ICO_MAIN ICON "main.ico"
IDM_MAIN menu discardable
BEGIN
popup "文件(&F)"
BEGIN
menuitem "新建(&N)\tCtrl+N", IDM_NEW
menuitem "打开(&O)...\tCtrl+O" IDM_OPEN
menuitem "保存(&S)...\tCtrl+S" IDM_SAVE
menuitem "另存为(&A)..." IDM_SAVEAS
menuitem separator
menuitem "打印(&P)...\tCtrl+P" IDM_PRINT
menuitem separator
menuitem "退出(&X)" IDM_EXIT
END
popup "帮助(&H)", HELP
BEGIN
menuitem "帮助主题(&H)\tF1" IDM_HELP
menuitem separator
menuitem "关于(&A)...", IDM_ABOUT
END
END
IDA_MAIN accelerators
BEGIN
"^N", IDM_NEW
"^O", IDM_OPEN
"^S", IDM_SAVE
"^P", IDM_PRINT
VK_F1, IDM_HELP, VIRTKEY
END
你看看你文件保存时候的编码,也有可能是这里出问题了……………… 1144290241 发表于 2013-11-18 18:07 static/image/common/back.gif
你看看你文件保存时候的编码,也有可能是这里出问题了………………
正常记事本保存啊,朋友,以前也弄过相同的,没有出现过问题的。这个就出问题了,着实不知道原因 Micheal 发表于 2013-11-18 18:10 static/image/common/back.gif
正常记事本保存啊,朋友,以前也弄过相同的,没有出现过问题的。这个就出问题了,着实不知道原因
不知道。我遇到过的问题,就是记事本的默认保存编码被改掉了。结果程序读进去的就是乱码了……………… 1144290241 发表于 2013-11-18 18:20 static/image/common/back.gif
不知道。我遇到过的问题,就是记事本的默认保存编码被改掉了。结果程序读进去的就是乱码了………………
朋友,那你试着复制下,然后按照你得方式编译,运行,看看结果。给我说下,好不好 1144290241 发表于 2013-11-18 18:20 static/image/common/back.gif
不知道。我遇到过的问题,就是记事本的默认保存编码被改掉了。结果程序读进去的就是乱码了………………
朋友你试着把这段代码复制,编译下,看看结果。给我说下,好吗:handshake Micheal 发表于 2013-11-18 18:23 static/image/common/back.gif
朋友你试着把这段代码复制,编译下,看看结果。给我说下,好吗
实际上我也想来着。我好久没看asm的了,现在在考研……………上鱼c只是习惯……………… 1144290241 发表于 2013-11-18 18:34 static/image/common/back.gif
实际上我也想来着。我好久没看asm的了,现在在考研……………上鱼c只是习惯………………
:handshake哦,哦 还是谢谢你哈。有学了点儿。保存的时候编码的选择 Micheal 发表于 2013-11-18 18:40 static/image/common/back.gif
哦,哦 还是谢谢你哈。有学了点儿。保存的时候编码的选择
没事,共同学习 支持楼主,赞一个 夜★霜寒 发表于 2013-11-18 18:47 static/image/common/back.gif
支持楼主,赞一个
{:5_103:}多来点儿人回复啊 重新复制下,然后新建,粘贴~我也碰到过这个问题:sad City_of_the_sky 发表于 2013-11-22 04:36 static/image/common/back.gif
重新复制下,然后新建,粘贴~我也碰到过这个问题
{:2_34:}这也行? {:2_35:}多谢各位亲,,本人已找到是什么地方出问题了、。谢谢帮顶了 Micheal 发表于 2013-11-22 21:58 static/image/common/back.gif
这也行?
不贴答案? 看不当明白!~
页:
[1]