win32汇编环境,在窗口程序中画简单图形

;运行效果

;win32汇编环境,在窗口程序中画简单图形
;展示点、直线、圆、椭圆、正方形、矩形、圆角矩形的画法
;将代码复制进radasm软件里,直接编译可运行.重要部分加备注。
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386 
.model flat,stdcall 
option casemap:none 
include      windows.inc 
include      user32.inc 
includelib   user32.lib           
include      kernel32.inc 
includelib   kernel32.lib
include      gdi32.inc
includelib   gdi32.lib 

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD       
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                               

.DATA                                   
ClassName   db "SimpleWinClass",0        
AppName     db "窗口程序中画简单图形",0        

.DATA?                                  
hInstance HINSTANCE  ?                
CommandLine LPSTR    ?  
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                
;颜色宏
RGB macro red,green,blue 
  xor eax,eax 
  mov ah,blue 
  shl eax,8 
  mov ah,green 
  mov al,red 
endm   
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.CODE                      

start:                      
invoke GetModuleHandle, NULL                                                    
mov hInstance,eax 
invoke GetCommandLine                                                                                       
mov CommandLine,eax 
invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT        
invoke ExitProcess, eax                                          
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD 
    LOCAL wc:WNDCLASSEX                                          
    LOCAL msg:MSG 
    LOCAL hwnd:HWND 

    mov   wc.cbSize,SIZEOF WNDCLASSEX                            
    mov   wc.style, CS_HREDRAW or CS_VREDRAW                     
    mov   wc.lpfnWndProc, OFFSET WndProc                        
    mov   wc.cbClsExtra,NULL 
    mov   wc.cbWndExtra,NULL 
    push  hInstance 
    pop   wc.hInstance 
    mov   wc.hbrBackground,COLOR_WINDOW+1 
    mov   wc.lpszMenuName,NULL 
    mov   wc.lpszClassName,OFFSET ClassName 
    invoke LoadIcon,NULL,IDI_APPLICATION                          
    mov   wc.hIcon,eax 
    mov   wc.hIconSm,eax 
    invoke LoadCursor,NULL,IDC_ARROW                              
    mov   wc.hCursor,eax 
    invoke RegisterClassEx, addr wc                              
    invoke CreateWindowEx,NULL, ADDR ClassName,ADDR AppName,WS_CAPTION or WS_SYSMENU or WS_MINIMIZEBOX ,100,100,270,470, NULL,NULL,hInst, NULL 
    mov   hwnd,eax 
    invoke ShowWindow, hwnd,CmdShow                              
    invoke UpdateWindow, hwnd                                    

    .while TRUE                                                   
                invoke GetMessage, ADDR msg,NULL,0,0 
                .break .if (!eax) 
                invoke TranslateMessage, ADDR msg 
                invoke DispatchMessage, ADDR msg 
   .endw 
    mov     eax,msg.wParam                                         
    ret 
WinMain endp 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM 
        LOCAL    @stPs:PAINTSTRUCT
        LOCAL    @stRect:RECT
        LOCAL    @hDc
        LOCAL    @RGB
        LOCAL    @hPen,@oldhPen
        LOCAL    @hBrush,@oldhBrush 
        
        .if     uMsg == WM_PAINT       ;主要在WM_PAINT消息里面画,因为需要重绘,比如最小化后再恢复原状,就是由它恢复的
                invoke  BeginPaint,hWnd,addr @stPs    ;得到设备,就是屏幕,才能显示出来
                mov     @hDc,eax
                
                invoke  SetPixel,@hDc,30,20,0         ;画5个点
                invoke  SetPixel,@hDc,35,20,0
                invoke  SetPixel,@hDc,40,20,0
                invoke  SetPixel,@hDc,45,20,0
                invoke  SetPixel,@hDc,50,20,0
                
                invoke  MoveToEx,@hDc,30,30,0         ;画直线
                invoke  LineTo,@hDc,220,30
                
                invoke  Ellipse,@hDc,30,60,80,110     ;画圆,参数分别是X1.Y1,X2,Y2,距离一样就是圆,不一样就是椭圆
                
                invoke  RoundRect,@hDc,100,60,150,110,0,0    ;画正方形,X与Y距离一样就是正方形,否则是矩形
                
                invoke  RoundRect,@hDc,170,60,220,110,20,20  ;画圆矩形,20分别是生成圆角的椭圆的宽度和高度
                
                ;下面的画法加颜色
                RGB 255,0,0
                mov @RGB,eax                             ;得到颜色
                
                invoke CreatePen,PS_SOLID,1,@RGB         ;创建新画笔,就是用来画后面形状的
                mov @hPen,eax
                invoke  SelectObject,@hDc,@hPen          ;把画笔塞进去,在它被顶替之前一直用这个
                mov @oldhPen,eax                         ;保留原来的画笔,即前面函数的返回值eax,后面恢复原状时使用
                
                invoke  SetPixel,@hDc,30,150,@RGB        ;画5个点
                invoke  SetPixel,@hDc,35,150,@RGB
                invoke  SetPixel,@hDc,40,150,@RGB
                invoke  SetPixel,@hDc,45,150,@RGB
                invoke  SetPixel,@hDc,50,150,@RGB
                
                invoke  MoveToEx,@hDc,30,160,0        
                invoke  LineTo,@hDc,220,160

                invoke  Ellipse,@hDc,30,190,80,240     
                
                invoke  RoundRect,@hDc,100,190,150,240,0,0    
                
                invoke  RoundRect,@hDc,170,190,220,240,20,20 
                
                ;下面的画法加刷子,就是填充里面的颜色
                RGB 0,178,238
                mov @RGB,eax 
                invoke CreateSolidBrush,@RGB
                mov @hBrush,eax
                invoke  SelectObject,@hDc,@hBrush               ;把画刷塞进去,在它被顶替之前一直用这个
                mov @oldhBrush,eax  

                invoke  Ellipse,@hDc,30,320,80,370     
                
                invoke  RoundRect,@hDc,100,320,150,370,0,0    
                
                invoke  RoundRect,@hDc,170,320,220,370,20,20 
                
        invoke  SelectObject,@hDc,@oldhPen            ;恢复原来的画笔
        invoke  SelectObject,@hDc,@oldhBrush          ;恢复原来的画刷
        invoke  DeleteObject,@hPen                    ;删除自创的画笔
        invoke  DeleteObject,@hBrush                  ;删除自创的画刷
                invoke  EndPaint,hWnd,addr @stPs
        .elseif uMsg==WM_DESTROY                                           
                invoke PostQuitMessage,NULL                               
        .else 
        invoke DefWindowProc,hWnd,uMsg,wParam,lParam             
        ret 
    .endif 
    xor eax,eax 
    ret 
WndProc endp 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start                                                      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/502449.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[7种方法] 如何修复iPad无法连接到App Store

“现在已经 3 天了,我无法从 iPad 连接到 App Store。起初,我以为这是服务器问题,但已经过去 3 天了,问题仍然存在。请帮助我!” 如果您的iPad 无法连接到 App Store,可能有多种原因。即使是日期和时间设置…

weblogic安装 12.2.1.4.0 单机

fmw_12.2.1.4.0_wls.jar和jdk-8u341-linux-x64.tar.gz&#xff0c;安装weblogic 安装JDK 8 # 1. 创建Java安装目录 mkdir -p /usr/java cd /usr/java# 2. 解压JDK tar -zxvf jdk-8u341-linux-x64.tar.gz# 3. 配置环境变量 cat >> /etc/profile << EOF export JAV…

vue elementUI Plus实现拖拽流程图,不引入插件,纯手写实现。

vue elementUI Plus实现拖拽流程图&#xff0c;不引入插件&#xff0c;纯手写实现。 1.设计思路&#xff1a;2.设计细节3.详细代码实现 1.设计思路&#xff1a; 左侧button列表是要拖拽的组件。中间是拖拽后的流程图。右侧是拖拽后的数据列表。 我们拖动左侧组件放入中间的流…

SpringBoot+Vue养老院管理系统设计与实现【开题报告+程序+安装部署+售后讲解】

【1】系统介绍 一、研究背景 随着中国人口老龄化的加剧&#xff0c;养老问题已成为社会关注的热点话题。传统的养老服务模式难以满足日益增长的老年人群体的需求&#xff0c;尤其是在信息化和智能化方面存在明显不足。为了提高养老服务效率&#xff0c;改善老年人生活质量&am…

【网络安全 | 漏洞挖掘】通过模拟功能实现提权(Bugcrowd)

未经许可,不得转载。 我将与大家分享我在 Bugcrowd 的某个项目中发现的一个漏洞,该项目中有一个“用户模拟”功能。 什么是用户模拟? 用户模拟允许管理员在不知晓用户凭据的情况下“以用户身份登录”。这种功能常见于管理员需要调试问题、审查用户权限或解决投诉的平台中。…

ValuesRAG:以检索增强情境学习强化文化对齐

随着大型语言模型&#xff08;LLMs&#xff09;的迅猛发展&#xff0c;其在各个领域展现出强大的能力。然而&#xff0c;训练数据中西方中心主义的倾向&#xff0c;使得 LLMs 在文化价值观一致性方面面临严峻挑战&#xff0c;这一问题在跨文化场景中尤为突出&#xff0c;可能导…

【CSS】第二天 画盒子、文字控制属性

【CSS】第二天 1. 画盒子2. 文字控制属性2.1 字体大小2.2 字体粗细2.3 字体样式是否倾斜2.4 行高2.5 行高-垂直居中2.6 字体族2.7 字体复合属性 font 1. 画盒子 目标&#xff1a;使用合适的选择器画盒子。 新属性 <!DOCTYPE html> <html> <head><meta …

东京大学联合Adobe提出基于指令的图像编辑模型InstructMove,可通过观察视频中的动作来实现基于指令的图像编辑。

东京大学联合Adobe提出的InstructMove是一种基于指令的图像编辑模型&#xff0c;使用多模态 LLM 生成的指令对视频中的帧对进行训练。该模型擅长非刚性编辑&#xff0c;例如调整主体姿势、表情和改变视点&#xff0c;同时保持内容一致性。此外&#xff0c;该方法通过集成蒙版、…

一文讲明白朴素贝叶斯算法及其计算公式(入门普及)

1、贝叶斯算法 贝叶斯定理由英国数学家托马斯贝叶斯 ( Thomas Bayes) 提出的&#xff0c;用来描述两个条件概率之间的关系。通常&#xff0c;事件A在事件B 发生的条件下与事件 B 在事件 A 发生的条件下&#xff0c;它们两者的概率并不相同&#xff0c;但是它们两者之间存在一定…

SpringBoot Maven 项目 pom 中的 plugin 插件用法整理

把 SpringBoot Maven 项目打包成 jar 文件时&#xff0c;我们通常用到 spring-boot-maven-plugin 插件。 前面也介绍过&#xff0c;在 spring-boot-starter-parent POM 和 spring-boot-starter POM 中都有插件的管理&#xff0c;现在我们就撸一把构建元素中插件的用法。 一、…

PDF文件提示-文档无法打印-的解决办法

背景信息 下载了几个签名的PDF文件&#xff0c;想要打印纸质版&#xff0c;结果打印时 Adobe Acrobat Reader 提示【文档无法打印】: 解决办法 网上的方案是使用老版本的PDF阅读器&#xff0c; 因为无法打印只是一个标识而已。 PDF文件不能打印的五种解决方案-zhihu 这些方…

SQL Server 数据库 忘记密码

1、先用windows 身份验证 连接 2、安全性--登录名 3、设置 身份验证 4、重启电脑 5、登录 登陆成功!!! ------------------------------------------------------------------ --1、查询登录账号信息 ------------------------------------------------------------------ -- …

oscp备考 oscp系列——Kioptix Level 1靶场 古老的 Apache Vuln

目录 前言 1. 主机发现 2. 端口扫描 3. 指纹识别 4. 目录扫描 5. 漏洞搜索和利用 前言 oscp备考&#xff0c;oscp系列——Kioptix Level 1靶场 Kioptix Level 1难度为简单靶场&#xff0c;主要考察 nmap的使用已经是否会看输出&#xff0c;以及是否会通过应用查找对应漏…

OpenGL材质系统和贴图纹理

上一篇文章当中笔者为大家介绍了风氏光照模型&#xff0c;相信大家也发现了光照着色器当中有设置有很多控制光照强度的参数&#xff0c;而所谓的材质系统就是我们可以人为的去调节这些参数&#xff0c;让一个物体的反光效果能够更加接近我们现实生活当中的一些物体。 材质系统…

光缆生产车间可视化,让智能制造更透明

图扑光缆生产车间可视化系统通过实时监控和数据分析&#xff0c;优化生产流程&#xff0c;提升产品质量和产能效率&#xff0c;为光缆制造业提供智能化解决方案&#xff0c;推动产业升级。

深入理解 Java 接口的回调机制

前言 回调是一种非常重要的编程技术&#xff0c;它广泛应用于事件驱动的编程、异步任务和框架设计中。在 Java 中&#xff0c;回调机制通常通过 接口 来实现。本篇博客将详细解析 Java 接口的回调原理、实现方式&#xff0c;以及实际开发中的应用场景。 泪崩了&#xff0c;期末…

LangChain 介绍

LangChain 是一个用于构建语言模型驱动的应用程序&#xff08;Language Model Applications&#xff09;的开发框架&#xff0c;旨在帮助开发者将大型语言模型&#xff08;LLMs&#xff09;集成到更复杂的、具备上下文感知能力的应用中。LangChain 支持使用模型如 OpenAI GPT-3…

Nginx代理本地exe服务http为https

Nginx代理本地exe服务http为https 下载NginxNginx命令exe服务http代理为https 下载Nginx 点击下载Nginx 下载好之后是一个压缩包&#xff0c;解压放到没有中文的路径下就可以了 Nginx命令 调出cmd窗口cd到安装路径 输入&#xff1a;nginx -v 查看版本 nginx -h&#xff…

cursor 使用技巧

一、创建项目前期步骤 1.先给AI设定一个对应项目经理角色&#xff0c; 2.然后跟AI沟通项目功能&#xff0c;生成功能设计文件&#xff1a;README.md README.md项目功能 3.再让AI总结写出开发项目规则文件&#xff1a; .cursorrules 是技术栈进行限定&#xff0c;比如使用什…

创建并配置华为云虚拟私有云

目录 私有云 创建虚拟私有云 私有云 私有云是一种云计算模式&#xff0c;它将云服务部署在企业或组织内部的私有基础设施上&#xff0c;仅供该企业或组织内部使用&#xff0c;不对外提供服务.私有云的主要特点包括&#xff1a; 私密性&#xff1a;私有云的资源&#xff08;如…