win32汇编环境,窗口程序中组合框的应用举例

;运行效果

;win32汇编环境,窗口程序中组合框的应用举例
;比如在窗口程序中生成组合框,增加子项,删除某项,取得指定项内容等
;直接抄进RadAsm可编译运行。重点部分加备注。
;以下是ASM文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386 
.model flat,stdcall 
option casemap:none 
include      windows.inc 
include      user32.inc 
include      gdi32.inc
          
include      kernel32.inc 
includelib   kernel32.lib 
includelib   user32.lib 
includelib   gdi32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD       
                                                
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.DATA                                   
ClassName   db "SimpleWinClass",0        
AppName     db "窗口程序的框架",0        

szButtonClassName   db "button",0              ;按钮类名
szComboBoxClassName db "ComboBox",0            ;组合框类名

szTitle             db "提示",0 

szAddCb01           db "关羽",0
szAddCb02           db "许褚",0
szAddCb03           db "吕布",0
szAddCb04           db "张飞",0
szAddCb05           db "孙策",0

szCheshi_Format01   db "总项数是 %d",0

szButtonTitle01     db "点击从后面增加张飞",0 
szButtonTitle02     db "点击删除第3项",0
szButtonTitle03     db "判断当前选中谁",0 
szButtonTitle04     db "将孙策插入第2项",0 
szButtonTitle05     db "得到组合框的总项数",0

.DATA?                                  
hInstance HINSTANCE  ?                
CommandLine LPSTR    ?  

hComboBox01  HWND        ?     ;组合框控件句柄变量 

hButton01    HWND        ?     ;按钮控件句柄变量  
hButton02    HWND        ?   
hButton03    HWND        ? 
hButton04    HWND        ?
hButton05    HWND        ?                
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.const
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IDC_CBO1     equ 10        ;组合框控件标识符 

ButtonID01   equ 11        ;按钮控件标识符 
ButtonID02   equ 12  
ButtonID03   equ 13  
ButtonID04   equ 14
ButtonID05   equ 15   
.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_OVERLAPPEDWINDOW,100,100,255,330, 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[256]:byte
        
        .if uMsg == WM_CREATE
                invoke CreateWindowEx,NULL,ADDR szComboBoxClassName,NULL, WS_CHILDWINDOW or WS_VISIBLE or WS_TABSTOP or CBS_DROPDOWN  ,20,20,200,100,hWnd,IDC_CBO1,NULL,NULL       ;创建组合框       
                mov hComboBox01,eax
                
                invoke CreateWindowEx,NULL,ADDR szButtonClassName,ADDR szButtonTitle01, WS_TABSTOP OR  WS_VISIBLE OR WS_CHILD OR BS_DEFPUSHBUTTON  ,20,70,200,25,hWnd,ButtonID01,NULL,NULL              
                mov hButton01,eax
                invoke CreateWindowEx,NULL,ADDR szButtonClassName,ADDR szButtonTitle02, WS_TABSTOP OR  WS_VISIBLE OR WS_CHILD OR BS_DEFPUSHBUTTON  ,20,110,200,25,hWnd,ButtonID02,NULL,NULL              
                mov hButton02,eax
                invoke CreateWindowEx,NULL,ADDR szButtonClassName,ADDR szButtonTitle03, WS_TABSTOP OR  WS_VISIBLE OR WS_CHILD OR BS_DEFPUSHBUTTON  ,20,150,200,25,hWnd,ButtonID03,NULL,NULL              
                mov hButton03,eax
                invoke CreateWindowEx,NULL,ADDR szButtonClassName,ADDR szButtonTitle04, WS_TABSTOP OR  WS_VISIBLE OR WS_CHILD OR BS_DEFPUSHBUTTON  ,20,190,200,25,hWnd,ButtonID04,NULL,NULL              
                mov hButton04,eax
                invoke CreateWindowEx,NULL,ADDR szButtonClassName,ADDR szButtonTitle05, WS_TABSTOP OR  WS_VISIBLE OR WS_CHILD OR BS_DEFPUSHBUTTON  ,20,230,200,25,hWnd,ButtonID05,NULL,NULL              
                mov hButton05,eax
                                
                invoke  GetStockObject,DEFAULT_GUI_FONT   
                mov @DEFAULT_GUI_FONT,eax 
                
                 invoke  GetDlgItem,hWnd,IDC_CBO1                                 
                invoke  SendMessage,eax,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE 
                
                invoke  SendMessage,hButton01,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE      ;设置按钮控件的字体
                invoke  SendMessage,hButton02,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE
                invoke  SendMessage,hButton03,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE
                invoke  SendMessage,hButton04,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE
                invoke  SendMessage,hButton05,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE              
                                
                invoke  DeleteObject,@DEFAULT_GUI_FONT                  ;删除本程序新建的字体 
                
                invoke SendDlgItemMessage,hWnd,IDC_CBO1,CB_ADDSTRING,0,addr szAddCb01           ;在初始化时可增加组合框的文字项
                invoke SendDlgItemMessage,hWnd,IDC_CBO1,CB_SETCURSEL,0,0                        ;设置为焦点项
                invoke SendDlgItemMessage,hWnd,IDC_CBO1,CB_ADDSTRING,0,addr szAddCb02
                invoke SendDlgItemMessage,hWnd,IDC_CBO1,CB_ADDSTRING,0,addr szAddCb03
                
        .elseif uMsg == WM_COMMAND                                                
                mov eax,wParam                                 
                .if lParam != 0                                                                                                                                       
                        mov edx,wParam                                                                                                                   
                        shr edx,16                                                                                                                       
                        .if dx == BN_CLICKED                                                                                                  
                                .if ax == ButtonID01                                                                                
                                        invoke SendDlgItemMessage,hWnd,IDC_CBO1,CB_ADDSTRING,0,addr szAddCb04      ;从后面增加新项                                                        
                                .elseif ax == ButtonID02                                                                                
                                        invoke SendDlgItemMessage,hWnd,IDC_CBO1,CB_DELETESTRING,2,0                ;从零开始的索引,为2则删除第3项                                                                  
                                .elseif ax == ButtonID03  
                                        invoke SendDlgItemMessage,hWnd,IDC_CBO1,CB_GETCURSEL,0,0                   ;返回当前焦点项的索引
                                        mov ebx,eax                                                                ;借用一下ebx,因为下句的addr语句前不能使用eax,addr在编译时也要使用寄存器eax                                                                         
                                        invoke SendDlgItemMessage,hWnd,IDC_CBO1,CB_GETLBTEXT,ebx,addr @szBuffer    ;ebx为当前具有焦点的项的索引值,从0开始
                                        invoke MessageBox,NULL,addr @szBuffer,addr szTitle,MB_OK                                                               
                                .elseif ax == ButtonID04                                                                                
                                        invoke SendDlgItemMessage,hWnd,IDC_CBO1,CB_INSERTSTRING,1,addr szAddCb05   ;把孙策插入成为第2项 
                                .elseif ax == ButtonID05                                                                                
                                        invoke SendDlgItemMessage,hWnd,IDC_CBO1,CB_GETCOUNT,0,0                    ;得到组合框的总项数,可以根据总项数,循环一遍与已定的字符串比较,找到需要的某一项  
                                        invoke wsprintf,addr @szBuffer,addr szCheshi_Format01,eax                                                             
                                        invoke MessageBox,hWnd,addr @szBuffer,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                                                      

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker 镜像制作原理 做一个自己的docker镜像

一.手动制作镜像 启动容器进入容器定制基于容器生成镜像 1.启动容器 启动容器之前我们首先要有一个镜像,这个镜像可以是从docker拉取,例如:现在pull一个ubuntu镜像到本机。 docker pull ubuntu:22.04 我们接下来可以基于这个容器进行容器…

微信小程序获取openid

2025年1月15日: 1、现在云服务器上安装nodejs,然后写个get接口: const express require(express); const app express();app.get(/getOpenid,(req,res)>{res.send("success"); })app.listen(3000,()>{console.log(server…

ASP.NET Core - 配置系统之配置添加

ASP.NET Core - 配置系统之配置添加 2. 配置添加 2. 配置添加 配置系统可以读取到配置文件中的信息,那必然有某个地方可以将配置文件添加到配置系统中。之前的文章中讲到 ASP.NET Core 入口文件中,builder(WebApplicationBuilder 对象) 中有一个 Config…

C#中通道(Channels)的应用之(生产者-消费者模式)

一.生产者-消费者模式概述 生产者-消费者模式是一种经典的设计模式,它将数据的生成(生产者)和处理(消费者)分离到不同的模块或线程中。这种模式的核心在于一个共享的缓冲区,生产者将数据放入缓冲区&#x…

ArcSegment绘制及计算

ArcSegment绘制及计算 给定起始点、终止点和 bulge 值计算弧线中心点和半径,绘制ArcSegment。 import math def calculate_arc_center_and_radius(x1, y1, x2, y2, bulge):angle4*math.atan(bulge)# 计算弦中点mid_x (x1 x2) / 2mid_y (y1 y2) / 2# 计算弦长的…

【高可用自动化体系】自动化体系

架构设计的愿景就是高可用、高性能、高扩展、高效率。为了实现架构设计四高愿景,需要实现自动化系统目标: 标准化。 流程自助化。 可视化:可观测系统各项指标、包括全链路跟踪。 自动化:ci/cd 自动化部署。 精细化&#xff1a…

FakeLocation 1599 | 内部旧版

前言:FakeLocation又更新了,在某安上面看见一些,大概问题就是地图没了,然后有更难搞了 任务一 我们先去看看地图是怎么个事情 这里用的是百度地图就没有了哈 高德地图是有的 任务二 null 选择成功了,虽然是null 任务三 地图位置 虽然不显示了…

初识算法和数据结构P1:保姆级图文详解

文章目录 前言1、算法例子1.1、查字典(二分查找算法)1.2、整理扑克(插入排序算法)1.3、货币找零(贪心算法) 2、算法与数据结构2.1、算法定义2.2、数据结构定义2.3、数据结构与算法的关系2.4、独立于编程语言…

2025年华数杯国际赛B题论文首发+代码开源 数据分享+代码运行教学

176项指标数据库 任意组合 千种组合方式 14页纯图 无水印可视化 63页无附录正文 3万字 1、为了方便大家阅读,全文使用中文进行描述,最终版本需自行翻译为英文。 2、文中图形、结论文字描述均为ai写作,可自行将自己的结果发给ai&#xff0c…

CSS的小知识

一、子选择器 (>) 让 CSS 样式只作用于子级和孙级元素,而不影响其他元素 有>是只对其子级有效,子选择器只会影响直接的子级元素,而不会影响更深层次的孙级元素 无>时是对子级、孙级、曾孙级等所有后代都有效

【经管数据】ZF数字采购采购明细数据(2015.3-2024.3)

一、数据来源: 原始数据来源为ZF采购网。数据涵盖了自2015年3月至2024年3月的ZF数字采购合同明细,反映了数字化转型在政府采购中的应用情况。 二、参考文献: [1] 申志轩, 祝树金, 文茜, 等. ZF数字采购与企业数字化转型[J]. 数量经济技术经济…

【Linux】Mysql部署步骤

一、JDK安装配置 在home目录下执行命令:mkdir Jdk 1.将JDK 上传至该文件夹,有些终端工具可以直接上传文件,比如:MobaXterm 可以看到安装包已经上传上来了 2.直接安装 命令:rpm -ivh jdk-8u311-linux-x64.rpm 3.安装成…

虚拟同步机(VSG)Matlab/Simulink仿真模型

虚拟同步机控制作为原先博文更新的重点内容,我将在原博客的基础上,再结合近几年的研究热点对其内容进行更新。Ps:VSG相关控制方向的simulink仿真模型基本上都搭建出来了,一些重要的控制算法也完成了实验验证。 现在搭建出来的虚拟…

二分查找算法——点名

一.题目描述 LCR 173. 点名 - 力扣(LeetCode) 二.题目解析 有0~n-1这n个数,但是数组中只有n-1个数,我们要找到消失的那个数。 三.算法原理 1.哈希表 我们先创建一个n个数的哈希表并初始化为0,然后将数组中的数存放…

FIDO2密码钥匙与无密码认证:打造安全便捷的数字世界

在数字化时代,密码曾被视为网络安全的基石,但随着网络攻击手段日益复杂,传统的密码认证方法越来越无法抵御这些挑战。对于用户来说,登录密码不仅繁琐易忘,而且一旦泄露,往往会导致数据泄露,造成…

Jmeter进行http接口并发测试

目录: 1、Jmeter设置(1)设置请求并发数(2)设置请求地址以及参数(3)添加结果数 2、启动看结果 1、Jmeter设置 (1)设置请求并发数 (2)设置请求地址…

osg中实现模型的大小、颜色、透明度的动态变化

以博饼状模型为对象,实现了模型大小、颜色、透明度的动态变化。 需要注意的是一点: // 创建材质对象osg::ref_ptr<osg::Material> material = new osg::Material;material->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4(0.0, 1.0, 0.0, 0.5));// 获取模型的…

VSCode使用纪要

1、常用快捷键 1&#xff09;注释 ctrl? 单行注释&#xff0c; altshifta 块注释&#xff0c; 个人测试&#xff0c;ctrl? 好像也能块注释 2&#xff09;开多个项目 可以先开一个新窗口&#xff0c;再新窗口打开另一个项目&#xff0c;这时就是同时打开多个项目了。 打开…

Jmeter 简单使用、生成测试报告(一)

一、下载Jmter 去官网下载&#xff0c;我下载的是apache-jmeter-5.6.3.zip&#xff0c;解压后就能用。 二、安装java环境 JMeter是基于Java开发的&#xff0c;运行JMeter需要Java环境。 1.下载JDK、安装Jdk 2.配置java环境变量 3.验证安装是否成功&#xff08;java -versio…

Linux 服务器挖矿木马防护实战:快速切断、清理与加固20250114

Linux 服务器挖矿木马防护实战&#xff1a;快速切断、清理与加固 引言 挖矿木马作为一种常见的恶意软件&#xff0c;对服务器资源和安全构成严重威胁。据安全机构统计&#xff0c;2023 年全球约 45%的 Linux 服务器遭受过挖矿木马攻击&#xff0c;平均每台被感染服务器每月造…