shr edx,16
.if dx==bn_clicked
.if ax==idc_button
invoke setdlgitemtext,hwnd,idc_edit,addr teststring
.elseif ax==idc_exit
invoke sendmessage,hwnd,wm_command,idm_exit,0
.endif
.endif
.endif
.else
invoke defwindowproc,hwnd,umsg,wparam,lparam
ret
.endif
xor eax,eax
ret
wndproc endp
end start
#include "resource.h"
#define idc_edit 3000
#define idc_button 3001
#define idc_exit 3002
#define idm_gettext 32000
#define idm_clear 32001
#define idm_exit 32003
mydialog dialog 10, 10, 205, 60
style 0x0004 | ds_center | ws_caption | ws_minimizebox |
ws_sysmenu | ws_visible | ws_overlapped | ds_modalframe | ds_3dlook
caption "our first dialog box"
class "dlgclass"
begin
edittext idc_edit, 15,17,111,13, es_autohscroll | es_left
defpushbutton "say hello", idc_button, 141,10,52,13
pushbutton "e&xit", idc_exit, 141,26,52,13, ws_group
end
mymenu menu
begin
popup "test controls"
begin
menuitem "get text", idm_gettext
menuitem "clear text", idm_clear
menuitem "", , 0x0800 /*mft_separator*/
menuitem "e&xit", idm_exit
end
end
分析:
我们先来分析第一个例子:该例显示了如何把一个对话框模板注册成一个窗口类,然后创建一个由该窗口类派生的窗口。由于您没有必要自己去创建子窗口控件,所以就简化了许多的工作。
我们先来分析对话框模板。
mydialog dialog 10, 10, 205, 60
先是对话框的名字,然后是关键字“dailog”。接下来的四个数字中,前两个是对话框的坐标,后两个是对话框的宽和高(注意:它们的单位是对话框的单位,而不一定是像素点)。
style 0x0004 | ds_center | ws_caption | ws_minimizebox |
ws_sysmenu | ws_visible | ws_overlapped | ds_modalframe | ds_3dlook
上面定义了对话框的风格。
caption "our first dialog box"
这是显示在对话框标题条上的标题。
class "dlgclass"
这一行非常关键。正是有了关键字class,我们才可以用它来声明把一个对话框当成一个窗口来用。跟在关键字后面的是“窗口类”的名称。
begin
edittext idc_edit, 15,17,111,13, es_autohscroll | es_left