win32汇编环境,窗口程序中对多行编辑框的操作

news2025/1/18 7:20:23

;运行效果

;win32汇编环境,窗口程序中对多行编辑框的操作
;比如生成多行编辑框,显示文本、获取文本、设置滚动条、捕获超出文本长度消息等。
;直接抄进RadAsm可编译运行。重点部分加备注。
;下面为asm文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386 
.model flat,stdcall 
option casemap:none 
include      windows.inc 
include      user32.inc 
include      kernel32.inc
include      gdi32.inc

includelib   user32.lib           
includelib   gdi32.lib 
includelib   kernel32.lib 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD       
                                                
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.DATA                                   
ClassName   db "SimpleWinClass",0        
AppName     db "窗口程序的模版",0  
      
szButtonClassName   db "button",0              ;按钮类名
szEditClassName     db "edit",0                ;编辑框类名

szTitle             db "提示",0 
szEditTitle01       db "我只能输入数字的",0 

szCheshi_Format01   db "文本的长度是 %d",0
szCheshi_Format02   db "超过允许输入的文本长度了",0

szButtonTitle01     db "得到第1个编辑框的文字",0 
szButtonTitle02     db "得到第1个编辑框的文字长度",0 
.DATA?                                  
hInstance HINSTANCE  ?                
CommandLine LPSTR    ?  

hID_EDIT01  dd ?        ;编辑框控件句柄

hIDB01      dd ?        ;按钮控件句柄
hIDB02      dd ?  
          
.const
; Equ 等值定义;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ID_EDIT01  equ 11        ;编辑框控件标识符
IDB01      equ 21        ;按钮控件标识符
IDB02      equ 22  
  
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.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,300,320, 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   @DEFAULT_GUI_FONT,@OLD_DEFAULT_GUI_FONT
        LOCAL   @szBuffer[1024]:byte
        LOCAL   @szBuffer01[1024]:byte
        
        .if uMsg == WM_CREATE
                 invoke CreateWindowEx,NULL,ADDR szEditClassName,ADDR szEditTitle01, WS_BORDER or WS_CHILDWINDOW or WS_VISIBLE or \
                 ES_MULTILINE or ES_WANTRETURN or ES_AUTOVSCROLL or WS_VSCROLL or WS_HSCROLL ,20,20,250,150,hWnd,ID_EDIT01,NULL,NULL                                              
                 mov hID_EDIT01,eax   
                 
                 invoke CreateWindowEx,NULL,ADDR szButtonClassName,ADDR szButtonTitle01, WS_TABSTOP OR  WS_VISIBLE OR WS_CHILD OR BS_DEFPUSHBUTTON  ,20,200,250,25,hWnd,IDB01,NULL,NULL        ;创建按钮控件                 
                 mov hIDB01,eax                
                 invoke CreateWindowEx,NULL,ADDR szButtonClassName,ADDR szButtonTitle02, WS_TABSTOP OR  WS_VISIBLE OR WS_CHILD OR BS_DEFPUSHBUTTON  ,20,240,250,25,hWnd,IDB02,NULL,NULL                       
                 mov hIDB02,eax  
                 
                 invoke  GetStockObject,DEFAULT_GUI_FONT                                           ;调用GetStockObject函数,得到系统默认字体                
                 mov @DEFAULT_GUI_FONT,eax                              
                 invoke  SendMessage,hID_EDIT01,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE                  ;发送WM_SETFONT消息,设置编辑框控件的字体                             
              
                 invoke  SendMessage,hIDB01,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE                
                 invoke  SendMessage,hIDB02,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE                              
                 invoke  DeleteObject,@DEFAULT_GUI_FONT                                            ;删除本程序新建的字体
                 
                 invoke  SendMessage,hID_EDIT01,EM_SETLIMITTEXT,1024,NULL                          ;设定编辑框最多只能1024个字符            
        .elseif uMsg == WM_COMMAND                                
                 mov eax,wParam                 
                 .if lParam == 0                                                                          
                 .else                         
                          mov edx,wParam                                                                                 
                          shr edx,16                                                                         
                          .if dx == BN_CLICKED                                              
                                   .if ax == IDB01                                        
                                            invoke GetDlgItemText,hWnd,ID_EDIT01,addr @szBuffer,sizeof @szBuffer   ;得到编辑框内的文本                                                                           
                                            invoke MessageBox,hWnd,addr @szBuffer,addr szTitle,MB_OK or MB_ICONINFORMATION                                 
                                   .elseif ax == IDB02                                        
                                            invoke GetDlgItem,hWnd,ID_EDIT01                                        
                                            invoke GetWindowTextLength,eax                                                                                
                                            invoke wsprintf,addr @szBuffer,addr szCheshi_Format01,eax                                                             
                                            invoke MessageBox,hWnd,addr @szBuffer,addr szTitle,MB_OK or MB_ICONINFORMATION                                  
                                   .endif                         
                          .elseif dx == EN_MAXTEXT                                       ;超过可输入的文本长度时,即超过上面设定的1024字符时,则                                
                                   .if ax == ID_EDIT01                                    
                                            invoke MessageBox,hWnd,addr szCheshi_Format02,addr szTitle,MB_OK or MB_ICONINFORMATION                                
                                   .endif                                 
                          .endif                 
                 .endif   

        .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.coloradmin.cn/o/2278362.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Flink系列】5. DataStream API

5. DataStream API DataStream API是Flink的核心层API。一个Flink程序,其实就是对DataStream的各种转换。具体来说,代码基本上都由以下几部分构成: 5.1 执行环境(Execution Environment) Flink程序可以在各种上下文…

探索未来:Leap Motion JavaScript框架——开启VR与手势控制的无限可能

探索未来:Leap Motion JavaScript框架——开启VR与手势控制的无限可能 leapjs JavaScript client for the Leap Motion Controller 项目地址: https://gitcode.com/gh_mirrors/le/leapjs 项目介绍 欢迎来到Leap Motion JavaScript框架的世界!Lea…

PCM5142集成32位384kHz PCM音频立体声114dB差分输出DAC编解码芯片

目录 PCM5142 简介PCM5142功能框图PCM5142特性 参考原理图 PCM5142 简介 PCM514x 属于单片 CMOS 集成电路系列,由立体声数模转换器 (DAC) 和采用薄型小外形尺寸 (TSSOP) 封装的附加支持电路组成。PCM514x 使用 TI 最新一代高级分段 DAC 架构产品,可实现…

技术领衔 互学互鉴|ZASM召开2024年度技术交流会

1月16日,ZASM组织召开了“2024年度企业员工技术交流活动”。公司总经理,技术部门负责人及项目经理参加本次会议。 会上,公司所属各项目技术负责人围绕“三维模型切割模块的基础操作与模型发布缓存的技术演示”、“J18微型智能空中作业平台的…

UI自动化测试:异常截图和page_source

自动化测试过程中,是否遇到过脚本执行中途出错却不知道原因的情况?测试人员面临的不仅是问题的复现,还有对错误的快速定位和分析。而异常截图与页面源码(Page Source)的结合,正是解决这一难题的利器。 在实…

OSI七层协议——分层网络协议

OSI七层协议,顾名思义,分为七层,实际上七层是不存在的,是人为的进行划分,让人更好的理解 七层协议包括,物理层(我),数据链路层(据),网络层(网),传输层(传输),会话层(会),表示层(表),应用层(用)(记忆口诀->我会用表…

浅谈计算机网络04 | 现代网络需求与技术支撑

现代网络需求与技术支撑 一、网络和因特网流量的类型剖析1.1 弹性流量的自适应特征1.2 非弹性流量的刚性特征1.3 实时流量特性 二、特定领域的网络需求解析2.1 大数据环境下的网络需求分析2.2 云计算环境下的网络需求分析2.3 移动数据环境下的网络需求分析 三、QoS和QoE&#x…

微服务架构下的负载均衡:Spring Cloud如何实现高效流量分配

在Spring Cloud中,实现服务的负载均衡,主要是为了让多个服务实例能够均匀分担请求压力,就像把一堆东西分给几个人拿,确保大家都不太累。 假设你开了一个网店,有很多顾客会同时来买东西(这就是并发请求&…

L3自动驾驶开始落地,AI交通时代离我们有多远?

2025年,自动驾驶领域迎来了一个重要的里程碑——L3级别自动驾驶技术的逐步落地。据《中国汽车报》报道,多家汽车制造商已获得L3级自动驾驶的量产资质,这意味着车辆能够在特定条件下完全接管驾驶任务,而驾驶员可以在车内进行其他活…

动手学大数据-2常见的查询优化器

目录 什么是查询优化器 查询优化器分类 Top-downOptimizer Bottom-upOptimizer RBO-关系代数 RBO-优化原则 RBO-列裁剪 RBO-谓词下推 RBO-传递闭包 RBO-RuntimeFilter 小结 CBO(Cost-basedOptimizer) 概念 CBO-统计信息 CBO-统计信息…

ctfshow复现2024ciscn第一场web

2024ciscn第一场 本章内容均在ctfshow复现 图片若显示失败请参考我的blog👇 ddl08.github.io sanic python污染 源码 from sanic import Sanic from sanic.response import text, html from sanic_session import Session import pydash # pydash5.1.2 ​ ​…

Java快速入门之数组、方法

一、数组 1、数组的概念: 数组指的是一种容器,可以用来存储同种数据类型的多个值,但是数组容器在存储数据的时候,需要结合隐式转换考虑。 例如: 定义了一个int类型的数组,那么boolean、double类型的数据是…

STM32 FreeRTOS任务通知

目录 任务通知的简介 任务通知相关API函数介绍 任务通知的简介 任务通知是 FreeRTOS 中一种用于任务间通信的机制,它允许一个任务向其他任务发送简单的通知或信号,以实现任务间的同步和协作。任务通知通常用于替代二值信号量或事件标志组,提…

Chrome谷歌浏览器如何能恢复到之前的旧版本

升级了谷歌最新版不习惯,如何降级版本 未完待续。。 电脑中的Chrome谷歌浏览器升级到了最新版本,但是有种种的不适应,如何能恢复到之前的旧版本呢?我们来看看操作步骤,而且无需卸载重装。 怎么恢复Chrome 之前版本&a…

前端实习第二个月小结

时间飞快,第一次实习已经过去两个多月,作一些简单的总结和分享。 注:文章整体会比较轻松,提及的经历、经验仅作参考。 一、关于实习/工作内容 1、工作内容 近期做的是管理后台方面的业务,技术栈:前端re…

阿里云 Serverless 助力盟主直播:高并发下的稳定性和成本优化

在直播场景中,阿里云 Serverless 应用引擎 SAE 提供的无缝弹性伸缩与极速部署能力,确保直播间高并发时的流畅体验,降低了我们的运营成本,简化了运维流程。结合阿里云云原生数据库 PolarDB 的 Serverless 能力,实现了数…

flutter的web页面

有几个服务器 有几个后台 直接通过web端进去虽然说很方便,但… 于是把web页面镶嵌到应用里面去, 这样就换了个方式打开web页面了 比如这里有有个列表 这里是写死了,活的列表可以通过io去获取 import package:flutter/material.dart; imp…

【Rust自学】13.1. 闭包 Pt.1:什么是闭包、如何使用闭包

13.1.0. 写在正文之前 Rust语言在设计过程中收到了很多语言的启发,而函数式编程对Rust产生了非常显著的影响。函数式编程通常包括通过将函数作为值传递给参数、从其他函数返回它们、将它们分配给变量以供以后执行等等。 在本章中,我们会讨论 Rust 的一…

安装 fairseq 失败

git clone https://github.com/pytorch/fairseq cd fairseq pip install --editable ./ 出现错误 解决方法: pip install pip24.0 参考:https://github.com/SociallyIneptWeeb/AICoverGen/issues/133 gcc 和 g 需要 9.0以上,怎么安装可以…

解决conda create速度过慢的问题

问题 构建了docker容器 想在容器中创建conda环境,但是conda create的时候速度一直很慢 解决办法 宿主机安装的是anaconda 能正常conda create,容器里安装的是miniforge conda create的时候速度一直很慢,因为容器和宿主机共享网络了,宿主机…