;运行效果
;RadASM环境,win32汇编入门教程之九
;在这一教程里,我们来学习一下如何在资源文件里创建对话框
;对话框也是资源的一种,也是一种预定义好的窗口,我们写软件一般用对话框,自已创建窗口代码又长,功能差不多,累人。
;RadASM里有一种文件叫资源文件,其扩展名是Rc。
;我们打开RadASM后,在右侧找到后缀是Rc的文件,双击打开它。
;然后把下面的句子复制进去
;#define WS_SYSMENU 524288
;MyDialog DIALOG 10, 10, 110, 200
;STYLE WS_SYSMENU
;CAPTION "我是对话框程序"
;BEGIN
;END
;记得把前面的分号去除掉。
;然后,把下面的句子复制进Asm文件里面
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD ;对话框窗口函数
.data
DlgName db "MyDialog",0
.data?
hInstance HINSTANCE ?
.const
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke DialogBoxParam, hInstance, ADDR DlgName,NULL, addr DlgProc, NULL
invoke ExitProcess,eax
DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.if uMsg == WM_INITDIALOG
.elseif uMsg == WM_CLOSE
invoke EndDialog, hWnd,NULL
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
DlgProc endp
end start
;把这两个内容复制进了Rc文件和Asm文件后,尝试编译一下,看看能不能运行。如果不能编译,那就是有些句子多余的。可以看看RadASM最下面方框里的提示
;看看哪里出错了。再改正一下。
;我们来分析一下下面这段话的意思,学会创建对话框
;#define WS_SYSMENU 524288
;MyDialog DIALOG 10, 10, 110, 200
;STYLE WS_SYSMENU
;CAPTION "我是对话框程序"
;BEGIN
;END
;#define WS_SYSMENU 524288 ,这句话的意思是定义一个值为524288,名为WS_SYSMENU的符号。后面要使用它。
;为什么是524288这个值,这个值是窗口风格之一。它带一个左上角的图标,中间的名称,和右上角一个关闭按钮。
;本来有一个预定义的头文件resource.h,如果有这个文件,再把它包含,即include进来,就不用这样定义了。
;resource文件里包含在大量的预定义值,基本常用的都在里面,直接引用就可以,就不用这样去找到它的值,再自已定义了。
;我们这里没有,只能用这种笨办法来定义。
;MyDialog DIALOG 10, 10, 110, 200 ,这句话你应该看的懂的,MyDialog是对话框的类名,也就是名字。
;DIALOG是关键字,就是说明定义的了一个对话框。
;后面的数字,是起始坐标,长度,宽度
;STYLE WS_SYSMENU 这句的意思是,定义对话框的风格是WS_SYSMENU,就是前面的524288值,你把WS_SYSMENU换成524288,效果是一样的
;当然,要先使用DIALOG定义对话框,再定义它的风格,顺序要对
;CAPTION "我是对话框程序" 这句话的意思是,对话框的标题是"我是对话框程序"
;BEGIN和END是成对出现在,里面定义对话框内的控件用。这里还没有添加控件,所以里面没写什么。
;分析完了Rc文件,现在回过头来看看Asm文件
;看完一下,你会发现,它与原来创建的窗口文件的内容很像,但是少了很多内容。
;主要少的是创建窗口的过程,对话框也是窗口。这就是它的好处,已经经过预定义了。把这个具体创建对话框的过程封装了,我们直接使用就可以了。
;这里在程序开始的时候,使用函数DialogBoxParam,直接引用资源里面定义的对话框。
;DlgName就是资源文件里定义的名字,我们在Asm文件里也定义了一样的,就是前面的DlgName db "MyDialog",0,两者都是MyDialog
;addr DlgProc指窗口函数名叫DlgProc,就是在后面的DlgProc,我们主要是研究在里面添加东西
;这里有一个WM_INITDIALOG,它是初始化对话框的消息。与以前教程学的窗口函数的消息WM_CREATE 功能一样,都是初始化,但是名称不同
;这样做的原因主要是为了区分开来。一种是窗口,一种是对话框。
;那么,在这儿,我们就学会了在资源文件里定义对话框,后面再慢慢的学一下,怎么在里面添加控件。