RadASM环境,win32汇编入门教程之九

RadASM环境下win32汇编创建对话框教程

;运行效果

;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 功能一样,都是初始化,但是名称不同
;这样做的原因主要是为了区分开来。一种是窗口,一种是对话框。

;那么,在这儿,我们就学会了在资源文件里定义对话框,后面再慢慢的学一下,怎么在里面添加控件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一品人家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值