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关闭对话框;
智能推荐
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基础语法 本笔记是对这本书的基础语法部分进行了学习: 因为本身有其他语言的编程基础,所以笔记仅仅对我自不熟悉的部分进行了记录 函数...
猜你喜欢
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:(...
