win32汇编环境,窗口程序中基础列表框的应用举例

;运行效果

;win32汇编环境,窗口程序中基础列表框的应用举例
;比如在窗口程序中生成列表框,增加子项,删除某项,取得指定项内容等
;直接抄进RadAsm可编译运行。重点部分加备注。
;以下是ASM文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386 
.model flat,stdcall 
option casemap:none 
include      windows.inc 
include      user32.inc          
include      kernel32.inc 
include      gdi32.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              ;按钮类名
szListBoxClassName  db "LISTBOX",0             ;列表框类名       

szTitle             db "提示",0 
szCheckTitle        db "只能选一位",0
szAddLib01          db "刘备",0 
szAddLib02          db "关羽",0 
szAddLib03          db "张飞",0 
szAddLib04          db "孙策",0
szAddLib05          db "吕布",0

szFormat            db    '总项数是 %d',0

szButtonTitle01     db "新增孙策",0 
szButtonTitle02     db "删除选中项",0
szButtonTitle03     db "将吕布插入第2项",0 
szButtonTitle04     db "得到总项数",0 
szButtonTitle05     db "得到选中项的名称",0

.DATA?                                  
hInstance    HINSTANCE   ?                
CommandLine  LPSTR       ?  
hID_GROUP    HWND        ?     ;组框控件句柄                
hListBox01   HWND        ?     ;列表框控件句柄变量 

hButton01    HWND        ?     ;按钮控件句柄变量  
hButton02    HWND        ?   
hButton03    HWND        ? 
hButton04    HWND        ?
hButton05    HWND        ?   

.const
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IDC_LBO1     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,260,370, 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  GetStockObject,DEFAULT_GUI_FONT 
                mov @DEFAULT_GUI_FONT,eax
                
                invoke CreateWindowEx,NULL,ADDR szButtonClassName,ADDR szCheckTitle, WS_TABSTOP OR  WS_VISIBLE OR WS_CHILD OR BS_GROUPBOX,10,5,220,125,hWnd,NULL,NULL,NULL      ;创建组框控件                                 mov hID_GROUP,eax  
                mov hID_GROUP,eax
                invoke CreateWindowEx,NULL,ADDR szListBoxClassName,NULL, WS_BORDER + WS_CHILDWINDOW + WS_VISIBLE + WS_TABSTOP  ,20,20,200,100,hWnd,IDC_LBO1,NULL,NULL           ;创建列表框                       
                mov hListBox01,eax
                
                invoke CreateWindowEx,NULL,ADDR szButtonClassName,ADDR szButtonTitle01, WS_TABSTOP OR  WS_VISIBLE OR WS_CHILD OR BS_DEFPUSHBUTTON  ,20,150,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,190,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,220,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,250,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,280,200,25,hWnd,ButtonID05,NULL,NULL                              
                mov hButton05,eax
                
                invoke  SendMessage,hID_GROUP,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE                               
                invoke  SendMessage,hListBox01,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_LBO1,LB_ADDSTRING,0,addr szAddLib01
                invoke  SendDlgItemMessage,hWnd,IDC_LBO1,LB_SETCURSEL,0,0                                   ;设置为焦点项
                invoke    SendDlgItemMessage,hWnd,IDC_LBO1,LB_ADDSTRING,0,addr szAddLib02
                invoke    SendDlgItemMessage,hWnd,IDC_LBO1,LB_ADDSTRING,0,addr szAddLib03
        .elseif uMsg == WM_COMMAND                                                                
                mov eax,wParam
                mov edx,wParam         
                shr edx,16
                .if ax == ButtonID01
                        .if dx == BN_CLICKED
                                invoke SendDlgItemMessage,hWnd,IDC_LBO1,LB_ADDSTRING,0,addr szAddLib04      ;从后面增加新项
                        .endif
                .elseif ax == ButtonID02 
                        .if dx == BN_CLICKED
                                invoke GetDlgItem,hWnd,IDC_LBO1                                             ;得到列表控件的句柄
                                invoke SendMessage,eax,LB_GETCURSEL,0,0                                     ;得到当前选中项的索引,从0开始
                                invoke SendDlgItemMessage,hWnd,IDC_LBO1,LB_DELETESTRING,eax,0               ;删除指定项,eax是焦点项 
                        .endif
                .elseif ax == ButtonID03 
                        .if dx == BN_CLICKED
                                invoke SendDlgItemMessage,hWnd,IDC_LBO1,LB_INSERTSTRING,1,addr szAddLib05   ;插入某项,索引从0开始,1就是第2项
                        .endif 
                .elseif ax == ButtonID04 
                        .if dx == BN_CLICKED
                                invoke SendDlgItemMessage,hWnd,IDC_LBO1,LB_GETCOUNT,0,0                     ;获取总项数
                                invoke wsprintf,addr @szBuffer,addr szFormat,eax                                                                                                     
                                invoke MessageBox,hWnd,addr @szBuffer,addr szTitle,MB_OK or MB_ICONINFORMATION  

                        .endif     
                .elseif ax == ButtonID05 
                        .if dx == BN_CLICKED
                                invoke GetDlgItem,hWnd,IDC_LBO1                                                                        
                                invoke SendMessage,eax,LB_GETCURSEL,0,0 
                                mov ebx,eax                                 
                                invoke SendDlgItemMessage,hWnd,IDC_LBO1,LB_GETTEXT,ebx,addr @szBuffer       ;addr前不能使用eax,所以用ebx转一下                                                                                                        
                                invoke MessageBox,hWnd,addr @szBuffer,addr szTitle,MB_OK or MB_ICONINFORMATION  
                        .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.rhkb.cn/news/3410.html

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

相关文章

Lora理解QLoRA

Parameter-Efficient Fine-Tuning (PEFT) :节约开销的做法,fine-tune少量参数,而不是整个模型; Low-Rank Adaptation (LoRA) :是PEFT的一种;冻结原参数矩阵,只更新2个小参数矩阵。 原文经过对比…

YOLOv5训练长方形图像详解

文章目录 YOLOv5训练长方形图像详解一、引言二、数据集准备1、创建文件夹结构2、标注图像3、生成标注文件 三、配置文件1、创建数据集配置文件2、选择模型配置文件 四、训练模型1、修改训练参数2、开始训练 五、使用示例1、测试模型2、评估模型 六、总结 YOLOv5训练长方形图像详…

基于微信小程序的电子点菜系统设计与实现(KLW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

Titans 架构中的记忆整合:Memory as a Context;Gated Memory;Memory as a Layer

Titans 架构中的记忆整合 Titans 架构中的记忆整合 Memory as a Context(MAC)变体:在处理长序列数据时,将序列分段,对于当前段 S ( t ) S^{(t)}

洛谷P3916 图的遍历

题目描述 给出 N 个点,M 条边的有向图,对于每个点 v,求 A(v) 表示从点 v 出发,能到达的编号最大的点。 输入格式 第 1 行 2 个整数 N,M,表示点数和边数。 接下来 M 行,每行 2 个整数 Ui,Vi​,表示边 (U…

【python】实现图像中的阴影去除 | 方案和代码

去除图像中的阴影是一项复杂的图像处理任务,尤其是当阴影区域与图像的其他部分混合时。阴影的存在会影响图像的颜色平衡和亮度,导致图像分析和理解的困难。 目录 一 安装依赖 二 函数 ① rgb2hsv ② hsv2rgb 三 实现图像中的阴影去除的方法 四 实…

记录一次 centos 启动失败

文章目录 现场1分析1现场2分析2搜索实际解决过程 现场1 一次断电,导致 之前能正常启动的centos 7.7 起不来了有部分log , 关键信息如下 [1.332724] XFS(sda3): Internal error xfs ... at line xxx of fs/xfs/xfs_trans.c [1.332724] XFS(sda3): Corruption of in-memory data…

文件操作:系统IO

文件操作 目录 基本概念Linux文件特点操作方式1-系统IO操作方式2-标准IO两种操作模式的对比 基本概念 什么是文件 简单的说,文件就是存储在硬件磁盘上的数据集合 文件通过什么来标识? 系统中在处理的文件(读、写操作)的时候…

ComfyUI-PromptOptimizer:文生图提示优化节点

ComfyUI-PromptOptimizer 是 ComfyUI 的一个自定义节点,旨在优化文本转图像模型的提示。它将用户输入的提示转换为更详细、更多样化、更生动的描述,使其更适合生成高质量的图像。无需本地模型。 1、功能 提示优化:优化用户输入的提示以生成…

windows 搭建flutter环境,开发windows程序

环境安装配置: 下载flutter sdk https://docs.flutter.dev/get-started/install/windows 下载到本地后,随便找个地方解压,然后配置下系统环境变量 编译windows程序本地需要安装vs2019或更新的开发环境 主要就这2步安装后就可以了&#xff0…

从玩具到工业控制--51单片机的跨界传奇【3】

在科技的浩瀚宇宙中,51 单片机就像一颗独特的星辰,散发着神秘而迷人的光芒。对于无数电子爱好者而言,点亮 51 单片机上的第一颗 LED 灯,不仅仅是一次简单的操作,更像是开启了一扇通往新世界的大门。这小小的 LED 灯&am…

构建一个简单的深度学习模型

构建一个简单的深度学习模型通常包括以下几个步骤:定义模型架构、编译模型、训练模型和评估模型。下面是一个使用Keras(TensorFlow的高级API)构建和训练一个简单的全连接神经网络(也称为多层感知器,MLP)的示…

linux下的NFS和FTP部署

目录 NFS应用场景架构通信原理部署权限认证Kerberos5其他认证方式 命令serverclient查看测试系统重启后自动挂载 NFS 共享 高可用实现 FTP对比一些ftp服务器1. **vsftpd (Very Secure FTP Daemon)**2. **ProFTPD (Professional FTP Daemon)**3. **Pure-FTPd**4. **WU-FTPD (Was…

Python操作Excel——openpyxl使用笔记(3)

3 单元格基本操作 3.1 访问单元格和读写其内容 在前面的例子中,已经简单演示过了向单元格中写入和读取数据。这里进一步提供访问单元格的一些方法。和前面一样,使用工作表的索引方式,可以快速定位一个单元格: import openpyxl w…

【漏洞预警】FortiOS 和 FortiProxy 身份认证绕过漏洞(CVE-2024-55591)

文章目录 一、产品简介二、漏洞描述三、影响版本四、漏洞检测方法五、解决方案 一、产品简介 FortiOS是Fortinet公司核心的网络安全操作系统,广泛应用于FortiGate下一代防火墙,为用户提供防火墙、VPN、入侵防御、应用控制等多种安全功能。 FortiProxy则…

一、1-2 5G-A通感融合基站产品及开通

1、通感融合定义和场景(阅读) 1.1通感融合定义 1.2通感融合应用场景 2、通感融合架构和原理(较难,理解即可) 2.1 感知方式 2.2 通感融合架构 SF(Sensing Function):核心网感知控制…

头盔识别技术

本项目参考b站视频https://www.bilibili.com/video/BV1EhkiY2Epg/?spm_id_from333.999.0.0&vd_source6c722ac1eba24d4cbadc587e4d1892a7 1.下载miniconda 使用 Miniconda 来管理 Python 环境(如 yolov8),就可以通过 conda create -n y…

某讯一面,感觉问Redis的难度不是很大

前不久,有位朋友去某讯面试,他说被问到了很多关于 Redis 的问题,比如为什么用 Redis 作为 MySQL 的缓存?Redis 中大量 key 集中过期怎么办?如何保证缓存和数据库数据的一致性?我将它们整理出来,…

PCL 新增自定义点类型【2025最新版】

目录 一、自定义点类型1、前言2、定义方法3、代码示例二、合并现有类型三、点云按时间渲染1、CloudCompare渲染2、PCL渲染博客长期更新,本文最近更新时间为:2025年1月18日。 一、自定义点类型 1、前言 PCL库自身定义了很多点云类型,但是在使用的时候时如果要使用自己定义的…

R语言绘图

多组火山图 数据准备&#xff1a; 将CSV文件同一在一个路径下&#xff0c;用代码合并 确保文件列名正确 library(fs) library(dplyr) library(tidyr) library(stringr) library(ggplot2) library(ggfun) library(ggrepel)# 获取文件列表 file_paths <- dir_ls(path &quo…