Win32 ASM 简单对话框编程Demo

标签: 汇编语言  Masm32  invoke  eax  WM_INITDIALOG  DS_MODALFRAME

asm文件;

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; by bobo
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		.386
		.model flat, stdcall
		option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include		windows.inc
include		user32.inc
includelib	user32.lib
include		kernel32.inc
includelib	kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN	equ		1000h	;图标
DLG_MAIN	equ		1
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		.data?
hInstance	dd		?
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain	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,hInstance,ICO_MAIN
			invoke	SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
		.elseif	eax == WM_COMMAND
			mov	eax,wParam
			.if	ax == IDOK
				invoke	EndDialog,hWnd,NULL
			.endif
		.else
			mov	eax,FALSE
			ret
		.endif
		mov	eax,TRUE
		ret

_ProcDlgMain	endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
		invoke	GetModuleHandle,NULL
		mov	hInstance,eax
		invoke	DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
		invoke	ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		end	start

资源文件;

#include		<resource.h>

#define	ICO_MAIN		0x1000	//图标
#define	DLG_MAIN		1

ICO_MAIN	ICON		"Main.ico"

DLG_MAIN DIALOG 350, 250, 120, 64
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "对话框demo模板"
FONT 9, "宋体"
{
 ICON ICO_MAIN, -1, 10, 11, 18, 21
 CTEXT "简单的对话框例子\n by bobo", -1, 36, 14, 70, 19
 DEFPUSHBUTTON "退出", IDOK, 58, 46, 50, 14
 CONTROL "", -1, "Static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 6, 39, 103, 1
}

资源文件里,

#include        <resource.h>

一句,不能删除;否则将出现RC2014错误;

此处resource.h是Masm32的系统文件;位于:

控制台构建的文本如下;

Microsoft Windows [版本 10.0.17763.557]
(c) 2018 Microsoft Corporation。保留所有权利。

G:\win32ASM\小例子\Dialog1>set include=g:\masm32\include

G:\win32ASM\小例子\Dialog1>set lib=g:\masm32\lib

G:\win32ASM\小例子\Dialog1>set path=g:\masm32\bin;%path%

G:\win32ASM\小例子\Dialog1>ml /c /coff Dialog.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: Dialog.asm

***********
ASCII build
***********


G:\win32ASM\小例子\Dialog1>rc Dialog.rc
Dialog.rc (7): error RC2104 : undefined keyword or key name: DS_MODALFRAME


G:\win32ASM\小例子\Dialog1>rc Dialog.rc

G:\win32ASM\小例子\Dialog1>Link /subsystem:windows Dialog.obj Dialog.RES
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

G:\win32ASM\小例子\Dialog1>

 

先调用Windows API的GetModuleHandle获取程序实例句柄;调用结果在eax;然后mov到hInstance里面;

调用DialogBoxParam创建对话框;

在对话框窗口过程处理三个消息;WM_CLOSE,WM_INITDIALOG,WM_COMMAND;

在WM_INITDIALOG消息设置图标;

点击对话框关闭按钮或者IDOK按钮,调用EndDialog关闭对话框;

版权声明:本文为bcbobo21cn原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bcbobo21cn/article/details/104188812

智能推荐

win32 串口 编程 (一)

串口监控工具推荐使用AccessPort或PortMon,这两款软件都是免费的。 http://www.sudt.com/ SUDT AccessPort 1.37 (Freeware) (免费的 win7 下面可以使用,但是拷贝数据的时候,不能拷贝十六进制) 下面的图片使用的软件是 Device Monitoring Studio 发送:41 54 0D 0A 接收到的是 AT OK T 使用的...

Win32汇编基本编程框架

Win32汇编编程框架如下; .386 .model flat,stdcall option casemap:none <一些include语句> .stack [堆栈段的大小] .data <一些初始化过的变量定义> .data? <一些没有初始化过的变量定义> .const <一些常量定义> .code      &...

python基础(《Python编程从入门到实践》笔记)K

python基础语法 本笔记是对这本书的基础语法部分进行了学习: 因为本身有其他语言的编程基础,所以笔记仅仅对我自不熟悉的部分进行了记录 函数...

VUE脚手架html2canvas生成图片

长按识别二维码 下载插件 页面引入...

小程序login登录前后端实现

小程序login登录前后端实现 获取临时code 请求的接口 使用koa2 fly.js 登录验证 发送code...

猜你喜欢

QT(C++)面试总结

参考博客 QT信号槽机制的优缺点 (1)问题: 为什么Qt使用信号与槽机制而不是传统的回调函数机制进行对象间的通信呢? 回调函数的本质是“你想让别人的代码执行你的代码,而别人的代码你又不能动”这种需求下产生的。 回调函数是函数指针的一种用法,如果多个类都关注某个类的状态变化,此时需要维护一个列表,以存放多个回调函数的地址。对于每一个被关注的类,都需要做类似的工作,因此这种做...

【数据结构】栈与队列的面试题(一)

栈的简单认识和基本操作:点击打开链接 队列的简单认识和基本操作:点击打开链接 一.实现一个栈,要求实现Push(出栈),Pop(出栈),Min(返回最小值)的时间复杂度为O(1)。      (1.)方法一:创建两个栈来实现(Stack1,Stack2)                 &...

Pytorch设置random.seed()随机种子

转载自:https://blog.csdn.net/qq_16234613/article/details/81356876,本文只做个人记录学习使用,版权归原作者所有。 测试: 可以看到random.seed()对于import的文件同样有用。而且当你设置一个随机种子时,接下来的随机算法生成数可按照当前的随机种子按照一定规律生成。也就是一个随机种子就能重现随机生成的序列。 当随机种子设置在b文件...

从Python源代码里面证明你的猜想

看过《Python爬虫开发 从入门到实战》的同学,应该对multiprocessing这个模块比较熟悉,在书上我使用这个模块通过几行代码实现了一个简单的多线程爬虫: 运行效果如下图所示:   (没有看过我的书的人可能会质疑,multiprocessing不是多进程模块吗?为什么你说是多线程?看过书的读者不会有这个疑惑,因为我在书上解释过原因) 现在,你有一个函数,没有任何参数,但是仍然想...

UI基本控件(五):UIPikerView

UIPickerView 是使用旋转轮或类似老虎机来显示一组或多组值的视图。 时钟 应用中设置时间就是通过 UIPickerView 来实现的。      1.numberOfComponents:返回UIPickerView当前的列数 2. - (NSInteger)numberOfRowsInComponent:(...