当前位置: 首页 > article >正文

Win32 汇编在对话框上画线

参阅前文,首先要有一个基本的对话框;

把对话框资源文件里的控件定义都删除,得到的一个rc文件,test.rc;

#include <resource.h>
 
#define	DLG_MAIN		1

DLG_MAIN DIALOG 193, 180, 130, 150
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "对话框子窗口控制示例"
FONT 9, "宋体"
{ 

}

然后从老罗的书里面拷一个画线过程过来,_DrawLine    proc;

之前的ASM对话框程序在  .data?  段定义了一个hInstance,类型为dd;调用_DrawLine过程需要有设备描述表句柄这个参数,再在此段定义一个myhdc,类型也为  dd ;
  .const 段给它空着;

代码段一开始,先是_DrawLine 过程; 
然后是对话框过程;

    对话框过程的处理分支包括WM_CLOSE;WM_COMMAND 分支现在空着;之前初始化对话框的子控件是在WM_INITDIALOG分支,在此也空着;为了画图,增加WM_PAINT消息处理分支,也就是

        .elseif       eax ==    WM_PAINT

这句;

在此分支调用GetDC获取到设备描述表句柄,存入myhdc;然后调用_DrawLine过程画2条线;
那么目前的ASM代码如下;

.386
.model flat, stdcall
option casemap :none
 
include D:\masm32\include\windows.inc
include D:\masm32\include\user32.inc
include D:\masm32\include\kernel32.inc
include D:\masm32\include\gdi32.inc
includelib D:\masm32\lib\user32.lib
includelib D:\masm32\lib\kernel32.lib
includelib D:\masm32\lib\gdi32.lib
 
DLG_MAIN	equ	1
 
		.data? 
hInstance	dd	? 
myhdc      dd            ?
		.const
 
		.code

_DrawLine	proc	_hDC,_dwPen,_dwPenWidth,_dwColor,_dwStartX,_dwEndX,_dwY

		invoke	CreatePen,_dwPen,_dwPenWidth,_dwColor
		invoke	SelectObject,_hDC,eax
		invoke	DeleteObject,eax
		invoke	MoveToEx,_hDC,_dwStartX,_dwY,NULL
		invoke	LineTo,_hDC,_dwEndX,_dwY
		ret

_DrawLine	endp
 
_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

        .elseif   eax ==	WM_PAINT
 			invoke GetDC, hWnd
			mov myhdc, eax
			invoke	_DrawLine,myhdc,PS_SOLID,1,0,10,420,10
			invoke	_DrawLine,myhdc,PS_SOLID,1,0,10,420,100
		.elseif	eax == WM_COMMAND
		.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

构建运行如下;

 


http://www.kler.cn/a/37986.html

相关文章:

  • 【Docker】Docker高级网络(NetWork)
  • k8s 2003面试题(1):k8s有哪些特性?
  • 基于vue3+pinia2仿ChatGPT聊天实例|vite4.x仿chatgpt界面
  • 算法06-搜索算法-广度优先搜索
  • ❤️创意网页:如何用HTML制作菜单栏?制作好看的菜单栏样式网页
  • AA@有理系数多项式@整系数多项式@本原多项式@有理多项式可约问题
  • SpringBoot——在测试阶段验证Web表现层的接口是否正常
  • Java泛型接口
  • leetcode|math|9.172.69.50.
  • B树和B+树的区别
  • h5真机调试之ios和Android和vconsole
  • 创建可交互的图表:AntV X6实现预留空白位置、拖拽吸附与信息修改弹框
  • 如何用https协议支持小程序
  • 2023.7.16-约数的枚举
  • webpack插件安装
  • 【深度学习】:用于 GAN 的生成器架构 - 生成人脸
  • via24种人格力量,积极心理学之创造力的力量
  • 云计算UPS监控,怎么办?
  • Clion开发STM32之W5500系列(四)
  • MySQL 第七天作业 nosql作业