读书笔记——Windows环境下32位汇编语言程序设计(5)模态对话框

资源可以用VC之类的生成,然后拷贝出来。

例如:每一个MFC工程都有一个resource.h,没有做任何修改时,这个resource.h文件是原来自带的。当对资源进行过修改添加之类的时,新添加的资源的ID都会被加入的这个工程的resource.h中。在Win32汇编的RC文件中,开头包含的那个resource.h没有做过任何修改,所以要把新添加的资源的ID用#define宏添加进来。

#include <resource.h>

#define IDD_DLG 130
#define IDC_BTN_TEST 1001
#define IDI_ICO_HEHE 1002

IDI_ICO_HEHE ICON	"hehe.ico"

IDD_DLG DIALOGEX 0, 0, 316, 90
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "尝试对话框"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "确定",IDOK,205,69,50,14
    PUSHBUTTON      "取消",IDCANCEL,259,69,50,14
    PUSHBUTTON      "测试",IDC_BTN_TEST,113,18,50,14
END
对于ASM文件,这个自然是要动动手写了。

对于DialogBoxParam的回调函数,一定要写好判断逻辑。这个不比VC里好调试。

另外应用程序实例用的是dd,不过还好写错了编译会有提示。

不要忘了定义一下在RC文件里的控件ID,不过还好没写编译时也会有提示。

.386
.model flat,stdcall
option casemap:none

include windows.inc
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib

IDD_DLG equ 130
IDC_BTN_TEST equ 1001
IDI_ICO_HEHE equ 1002

.data
gszCaption	db	'Caption',0
gszText		db	'Text',0
.data?
ghInstance	dd	?

.code
DlgFunc proc uses ebx edi esi hWnd,wMsg,wParam,lParam
	
	mov eax,wMsg
	.if eax==WM_CLOSE
		invoke EndDialog,hWnd,NULL
	.elseif eax==WM_INITDIALOG
		invoke LoadIcon,ghInstance,IDI_ICO_HEHE
		invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
	.elseif eax==WM_COMMAND
		mov eax,wParam
		.if ax==IDOK
			invoke EndDialog,hWnd,NULL
		.elseif ax==IDC_BTN_TEST
			invoke MessageBox,hWnd,addr gszText,addr gszCaption,MB_OK
		.endif
	.else
			mov eax,FALSE
			ret
	.endif
	
	mov eax,TRUE
	ret
DlgFunc endp

start:
	invoke GetModuleHandle,NULL
	mov ghInstance,eax
	invoke DialogBoxParam,ghInstance,IDD_DLG,NULL,addr DlgFunc,NULL
	invoke ExitProcess,NULL
end start


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值