【学习笔记】模态对话框例子
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.386
.model flat, stdcall
option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN equ 1000h ;图标
DLG_MAIN equ 2000h ;对话框资源
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance dd ?
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMainprocuses ebx edi esi hWnd,wMsg,wParam,lParam
mov eax,wMsg
.if eax== WM_CLOSE ;关闭对话框窗口所作操作
invokeEndDialog,hWnd,NULL ;结束对话框窗口
.elseifeax==WM_INITDIALOG ;在对话框窗口还没有显现出来就处理的消息
invokeLoadIcon,hInstance,ICO_MAIN;载入图标返回句柄
invokeSendMessage,hWnd,\
WM_SETICON,ICON_BIG,eax ;发送消息到对话框过程来设置菜单图标
.elseifeax== WM_COMMAND
mov eax,wParam ;wParam存储了菜单命令
movzxeax,ax
.if eax == IDOK ;如果按下了OK按钮
invokeEndDialog,hWnd,NULL ;结束对话框窗口
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMainendp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
invokeGetModuleHandle,NULL
mov hInstance,eax
invokeDialogBoxParam,hInstance,DLG_MAIN,\ ;创建模态对话框
NULL,offset _ProcDlgMain,NULL ;函数从hInstance模块装载DLG_MAIN的资源
;父窗口就是本身,对话框过程是_ProcDlgMain
;dwInitParam是当做WM_INITDIALOG消息的lParam传给对话框过程,用来自定义消息
invokeExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
======================================================================
RC文件
#include <resource.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#defineICO_MAIN0x1000 //图标
#defineDLG_MAIN0x2000 //对话框
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN ICON "Main.ico" //图标文件
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_MAIN DIALOG 50, 50, 113, 64 //对话框资源定义:X坐标,Y坐标,宽度,高度
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE
| WS_CAPTION | WS_SYSMENU //风格定义
CAPTION "对话框模板" //定义显示在窗口标题栏上的文字
FONT 10, "新宋体" //定义对话框包括子窗口控件使用的字体和大小
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
BEGIN
//ICON ICO_MAIN, -1, 10, 11, 18, 21 //方法1
CONTROL ICO_MAIN,-1,"static",SS_ICON,10,11,18,21 //方法2
//CTEXT "简单的对话框例子\n用Win32ASM编写",
// -1, 36, 14, 70, 19 //方法1
CONTROL "简单的对话框例子\n方法2编写",-1,
"Static",SS_CENTER | WS_GROUP,36,14,70,19 //方法2
//DEFPUSHBUTTON "确定(&X)", IDOK, 58, 46, 50, 13 //方法1
CONTROL "退出(&E)",IDOK,"Button",
BS_DEFPUSHBUTTON | WS_TABSTOP,58,46,50,13 //方法2
CONTROL "", -1, "Static", SS_ETCHEDHORZ
| WS_CHILD | WS_VISIBLE, 6, 39, 103, 1//分割线,无法用别的方法
END
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//WS_POPUP:弹出式窗口
//WS_VISIBLE :初始状态可见
//WS_SYSMENU :创建一个在其标题条中具有系统菜单框的窗口,仅适用于带标题条的窗口
//DS_MODALFRAME :指定带模式对话框边界的对话框,此风格和WS_CAPTION、WS_SYSMENU风格一起,创建带标题条和系统菜单的对话框
//WS_CAPTION :创建一个有标题的窗口,包含了WS_BORDER,不能和WS_DLGFRAME一起使用
//WS_BORDER:创建一个有边框的窗口
//WS_DLGFRAME :创建一个带有双层边框但没有标题的窗口
//CONTROL 文本, ID, 类, 风格, X, Y, 宽度, 高度 [,扩展风格]
//invoke CreateWindow, 类名, 文本, 风格, X, Y, 宽度, 高度, 对话框窗口句柄, ID, hInstance, NULL
//控件名称 [文本,] ID,X,Y,宽度,高度[,风格][,扩展风格]
//类介绍:按钮(Button)、静态(Static)、编辑(Edit)、滚动条(ScrollBar)、列表框(ListBox)、组合框(ComboBox)
页:
[1]