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

server/2025/1/22 8:20:43/

;运行效果

;双击到根目录后

;win32汇编环境,窗口程序中复杂列表框的应用举例
;在窗口程序中生成复杂列表框,增加子项,删除某项,取得指定项内容,在列表框内展示某文件夹内的文件列表,选定某文件夹后双击打开,返回上层目录再打开等
;直接抄进RadAsm可编译运行。重点部分加备注。
;以下是ASM文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386 
.model flat,stdcall 
option casemap:none 
include      windows.inc 
include      user32.inc          
include      kernel32.inc 
include      gdi32.inc
include      shlwapi.inc

includelib   kernel32.lib 
includelib   user32.lib 
includelib   gdi32.lib
includelib   shlwapi.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD       
                                                
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.DATA                                   
ClassName   db "SimpleWinClass",0        
AppName     db "窗口程序的模版",0 

szButtonClassName   db "button",0              ;按钮类名
szListBoxClassName  db "LISTBOX",0             ;列表框类名       

szCaption           db "提示",0 
szCheckTitle        db "当前文件夹的文件列表",0
szAddLib01          db "刘备",0 
szAddLib02          db "关羽",0 
szAddLib03          db "张飞",0 
szAddLib04          db "孙策",0
szAddLib05          db "吕布",0

szFormat            db    '总项数是 %d',0
szFormat01          db    '盘符是是 %s',0

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

szPath        db    '*.*',0
szPreFolders    db    '[..]',0
szCheshi        db    'd:\*.*',0
szMessage    db    '选择结果:%s',0
szTitle        db    '您的选择',0
szSelect    db    '您选择了以下的项目:'
szReturn    db    0dh,0ah,0

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

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

szBuffer     db  256 dup (?)    ;全局字符数组,用来保存路径用
.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 
        
    invoke  GetCurrentDirectory,sizeof szBuffer,addr szBuffer                                    ;将当前文件夹路径先保存下来                               

        .while TRUE                                                   
                invoke GetMessage, ADDR msg,NULL,0,0 
                .break .if (!eax) 
                invoke TranslateMessage, ADDR msg 
                invoke Dispatc


http://www.ppmy.cn/server/160403.html

相关文章

天机学堂7--Redisson自定义注解AOP以及SPEL表达式实现分布式锁

文章目录 集群下的锁失效问题Redis中的setnx命令实现分布式锁setnx基本原理死锁问题利用Redis实现的简单分布式锁流程setnx的分布式锁的问题锁误删问题超时释放问题其它问题 Redisson基于注解的分布式锁工厂模式 选择锁类型策略模式提供 重试策略 失败策略组合基于SPEL的动态锁…

智谱四大免费模型GLM-4-FLASH系列

1、智谱四大免费模型 模型类型 智谱AI目前发布了四大免费模型,分别是文本模型GLM-4-Flash,图片识别模型GLM-4V-Flash,图片生成模型CogView-3-Flash,视频生成模型CogVideoX-Flash。 产品线全面性 智谱AI是目前国内模型厂商中产品…

TensorFlow深度学习实战——情感分析模型

TensorFlow深度学习实战——情感分析模型 0. 前言1. IMDB 数据集2. 构建情感分析模型3. 预测输出相关链接 0. 前言 情感分析 (Sentiment Analysis) 是一种自然语言处理 (Natural Language Processing, NLP) 技术,旨在分析和识别文本中的情感倾向,情感分…

2024年,我的技术探索与成长之路

2024年,我的技术探索与成长之路 2024年已经过去,作为一名技术爱好者和写作者,我回顾了过去一年在博客上记录的点滴,感慨良多。这一年,我不仅见证了技术的飞速发展,也在不断学习和实践中找到了自己的成长方向…

uc/os-II 原理及应用(八) 系统裁减以及移植到51单片机-下

现在说明几个重要的点, OSStartHighRdy 的作用就是把任务栈复制到系统栈上面,再利用RET的时候会从系统栈上到一个地址放到PC寄存器上来实现任务运行。OSCtxSw是任务切换,把系统栈全部备份到当前任务栈映射上,然后改OSTCBCur,调用…

模拟飞行入坑(五) P3D 多通道视角配置 viewgroup

背景: P3D进行多个屏幕显示的时候,如果使用英伟达自带的屏幕融合成一个屏,或者使用P3D单独拉伸窗口,会使得P3D的画面被整体拉伸,又或者,当使用Multichannel进行多个设备联动时,视角同步组合需要配置&#…

数据结构(初阶)(一)----算法复杂度

算法复杂度 算法复杂度数据结构算法算法效率复杂度的概念 数据结构 数据结构(Data Structure)是计算机存储、组织数据的⽅式,指相互之间存在⼀种或多种特定关系的数据元素的集合。没有⼀种单⼀的数据结构对所有⽤途都有⽤,所以我们要学各式各样的数据结…

macOS安装Gradle环境

文章目录 说明安装JDK安装Gradle 说明 gradle8.5最高支持jdk21,如果使用jdk22建议使用gradle8.8以上版本 安装JDK mac系统安装最新(截止2024.9.13)Oracle JDK操作记录 安装Gradle 下载Gradle,解压将其存放到资源java/env目录…