|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 兰陵月 于 2018-6-7 09:03 编辑
ASM源文件:
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; ******************【程】***【序】***【信】***【息】******************
- ;------------------------------------------------------------------------
- ; 程序基本信息
- ;------------------------------------------------------------------------
- ; 程序名称:SB.asm
- ; 程序功能:编写程序演示通用对话框的相关实现
- ; 编辑软件:Notepad++ 编码格式:ANSI
- ; 创建日期:2018.06.05
- ; 创 建 者: by 鱼C论坛 兰陵月 QQ:2186745820
- ;------------------------------------------------------------------------
- ; MakeFile 文件
- ;------------------------------------------------------------------------
- ;NAME = SB
- ;OBJS = $(NAME).obj
- ;LINK_FLAG = /subsystem:windows
- ;ML_FLAG = /c /coff
- ;$(NAME).exe: $(OBJS)
- ; Link $(LINK_FLAG) $(OBJS)
- ;.asm.obj:
- ; ml $(ML_FLAG) $<
- ;clean:
- ; del *.obj
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; 【模式定义】
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- .386
- .model flat,stdcall
- option casemap:none
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; 【include 文件定义】
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- include windows.inc
- include user32.inc
- includelib user32.lib
- include kernel32.inc
- includelib kernel32.lib
- include comdlg32.inc
- includelib comdlg32.lib
- ; include gdi32.inc
- ; includelib gdi32.lib
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; 【Equ等值定义】,对应资源代码文件中的define部分
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- DLG_MAIN equ 1000h
- IDM_MAIN equ 1000h
- IDM_OPEN equ 3101h
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; 【数据段】
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ;------------------------------------------------------------------------
- ; 可读可写已初始化变量
- ;------------------------------------------------------------------------
- ; .data
- ;------------------------------------------------------------------------
- ; ×××变量定义区×××
- ;------------------------------------------------------------------------
- ; 可读可写未初始化变量
- ;------------------------------------------------------------------------
- .data?
- ;------------------------------------------------------------------------
- hInstance dd ?
- ;hWinMain dd ?
- ;------------------------------------------------------------------------
- ; 可读不可写初始化常量
- ;------------------------------------------------------------------------
- ; .const
- ;------------------------------------------------------------------------
- ; ×××变量定义区×××
- ;------------------------------------------------------------------------
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; 【代码段】
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- .code
- ;------------------------------------------------------------------------
- ; **子程序:×××(第×××行~第×××行)
- ; **功能:
- ; **参数:
- ; **返回值:
- ; **备注:
- ;------------------------------------------------------------------------
- ; **子程序代码
- ;------------------------------------------------------------------------
- ; **子程序:_WinMain
- ; **功能:注册窗口、建立并显示窗口、分配消息
- ; **参数:无参数
- ; **返回值:无返回值
- ; **备注:
- ;------------------------------------------------------------------------
- _ProcDlgMain proc uses ebx edi esi, hWnd, wMsg, wParam, lParam
- mov eax,wMsg
- .if eax == WM_CLOSE
- invoke EndDialog,hWnd,NULL
- .else
- mov eax,FALSE
- ret
- .endif
- mov eax,TRUE
- ret
-
- _ProcDlgMain endp
- ;------------------------------------------------------------------------
- ; **主程序
- ;------------------------------------------------------------------------
- start:
- invoke GetModuleHandle,NULL
- mov hInstance,eax
- invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
- invoke ExitProcess,NULL
- ;------------------------------------------------------------------------
- ; 程序起始点
- ;------------------------------------------------------------------------
- end start
- ;------------------------------------------------------------------------
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
复制代码
资源文件:
- ///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- #include <resource.h>
- //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- #define DLG_MAIN 0x1000
- #define IDM_MAIN 0x1000
- #define IDM_OPEN 0x3101
- //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- DLG_MAIN DIALOG 200, 150, 300, 200
- //MENU IDM_MAIN
- STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
- CAPTION "通用对话框演示程序"
- FONT 9,"宋体"
- {
-
- }
- //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- IDM_MAIN menu discardable
- BEGIN
- popup "文件(&F)"
- BEGIN
- menuitem "打开文件(&O)...",IDM_OPEN
- END
- END
复制代码
MAKEFILE文件:
- NAME = SB
- OBJS = $(NAME).obj
- RES = $(NAME).res
- LINK_FLAG = /subsystem:windows
- ML_FLAG = /c /coff
- $(NAME).exe: $(OBJS) $(RES)
- Link $(LINK_FLAG) $(OBJS) $(RES)
- .asm.obj:
- ml $(ML_FLAG) [ DISCUZ_CODE_2 ]lt;
- .rc.res:
- rc [ DISCUZ_CODE_2 ]lt;
- clean:
- del *.obj
- del *.res
复制代码 将《资源文件》中第9行注释后,程序能正常显示如下的界面:
程序的本意是要在这个模态对话框的标题栏下显示一个菜单(这是《琢石成器》第8章的一个程序。)
但是现在《资源文件》的第9行如果不注释掉,虽然可以正常编译完成,但是执行SB.EXE后,一闪退出(或者其他现象,反正就是不显示界面),请各位帮忙检查检查,到底是哪里的问题?为何在对话框定义之后加上菜单就不行??
DLG_MAIN DIALOG 200, 150, 300, 200
//MENU IDM_MAIN
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
数字太大了 ^_^
main.asm
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; ******************【程】***【序】***【信】***【息】******************
- ;------------------------------------------------------------------------
- ; 程序基本信息
- ;------------------------------------------------------------------------
- ; 程序名称:SB.asm
- ; 程序功能:编写程序演示通用对话框的相关实现
- ; 编辑软件:Notepad++ 编码格式:ANSI
- ; 创建日期:2018.06.05
- ; 创 建 者: by 鱼C论坛 兰陵月 QQ:2186745820
- ;------------------------------------------------------------------------
- ; MakeFile 文件
- ;------------------------------------------------------------------------
- ;NAME = SB
- ;OBJS = $(NAME).obj
- ;LINK_FLAG = /subsystem:windows
- ;ML_FLAG = /c /coff
- ;$(NAME).exe: $(OBJS)
- ; Link $(LINK_FLAG) $(OBJS)
- ;.asm.obj:
- ; ml $(ML_FLAG) $<
- ;clean:
- ; del *.obj
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; 【模式定义】
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- .386
- .model flat,stdcall
- option casemap:none
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; 【include 文件定义】
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- include windows.inc
- include user32.inc
- includelib user32.lib
- include kernel32.inc
- includelib kernel32.lib
- include comdlg32.inc
- includelib comdlg32.lib
- ; include gdi32.inc
- ; includelib gdi32.lib
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; 【Equ等值定义】,对应资源代码文件中的define部分
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ;DLG_MAIN equ 1000h
- ;IDM_MAIN equ 1000h
- DLG_MAIN equ 100
- IDM_MAIN equ 100
- IDM_OPEN equ 3101h
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; 【数据段】
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ;------------------------------------------------------------------------
- ; 可读可写已初始化变量
- ;------------------------------------------------------------------------
- ; .data
- ;------------------------------------------------------------------------
- ; ×××变量定义区×××
- ;------------------------------------------------------------------------
- ; 可读可写未初始化变量
- ;------------------------------------------------------------------------
- .data?
- ;------------------------------------------------------------------------
- hInstance dd ?
- ;hWinMain dd ?
- ;------------------------------------------------------------------------
- ; 可读不可写初始化常量
- ;------------------------------------------------------------------------
- ; .const
- ;------------------------------------------------------------------------
- ; ×××变量定义区×××
- ;------------------------------------------------------------------------
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; 【代码段】
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- .code
- ;------------------------------------------------------------------------
- ; **子程序:×××(第×××行~第×××行)
- ; **功能:
- ; **参数:
- ; **返回值:
- ; **备注:
- ;------------------------------------------------------------------------
- ; **子程序代码
- ;------------------------------------------------------------------------
- ; **子程序:_WinMain
- ; **功能:注册窗口、建立并显示窗口、分配消息
- ; **参数:无参数
- ; **返回值:无返回值
- ; **备注:
- ;------------------------------------------------------------------------
- _ProcDlgMain proc uses ebx edi esi, hWnd, wMsg, wParam, lParam
- mov eax,wMsg
- .if eax == WM_CLOSE
- invoke EndDialog,hWnd,NULL
- .else
- mov eax,FALSE
- ret
- .endif
- mov eax,TRUE
- ret
-
- _ProcDlgMain endp
- ;------------------------------------------------------------------------
- ; **主程序
- ;------------------------------------------------------------------------
- start:
- invoke GetModuleHandle,NULL
- mov hInstance,eax
- invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
- invoke ExitProcess,NULL
- ;------------------------------------------------------------------------
- ; 程序起始点
- ;------------------------------------------------------------------------
- end start
- ;------------------------------------------------------------------------
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
复制代码
main.rc
- ///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- #include <resource.h>
- //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- //#define DLG_MAIN 0x1000
- //#define IDM_MAIN 0x1000
- #define DLG_MAIN 100
- #define IDM_MAIN 100
- #define IDM_OPEN 0x3101
- //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- DLG_MAIN DIALOG 200, 150, 300, 200
- MENU IDM_MAIN
- STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
- CAPTION "通用对话框演示程序"
- FONT 9,"宋体"
- {
-
- }
- //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- IDM_MAIN menu discardable
- BEGIN
- popup "文件(&F)"
- BEGIN
- menuitem "打开文件(&O)...",IDM_OPEN
- END
- END
复制代码
Makefile
- NAME = main
- OBJS = $(NAME).obj
- RES = $(NAME).res
- LINK_FLAG = /subsystem:windows
- ML_FLAG = /c /coff
- $(NAME).exe: $(OBJS) $(RES)
- Link $(LINK_FLAG) $(OBJS) $(RES)
- .asm.obj:
- ml $(ML_FLAG) $<
- .rc.res:
- rc $<
- clean:
- del *.obj
- del *.res
复制代码
|
|