当前位置: 首页 > article >正文

win32汇编环境下,提取对话框程序中,listview列表控件里的内容示例

;win32汇编环境下,提取对话框程序中,listview列表控件里的内容示例
;把代码抄进radasm里面,可以直接编译运行。重要的地方加了备注。研究一下就明白的了。
;以下是ASM文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        .386
        .model flat, stdcall
        option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include        windows.inc
include        user32.inc
includelib    user32.lib
include        kernel32.inc
includelib    kernel32.lib

include        gdi32.inc         ;加入这个
includelib    gdi32.lib         ;加入这个
include         comctl32.inc      ;加入这个
includelib      comctl32.lib      ;加入这个
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN    equ        1000h    ;图标
DLG_MAIN    equ        1
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        .data?

hInstance    dd  ?

h_List          dd  ?

        .const
        
BUTTON01          equ     11

szClassName      db    'MyClass',0

szlistViewClassName                   db        "SysListView32",0 ;加这个

Heading1          db        "序号",0   ;第1列名称
Heading2          db        "姓名",0   ;第2列名称
Heading3          db        "性别",0 

Heading2_1        db        "刘备",0   ;第2列第1行字符串
Heading2_2        db        "绍婵",0   ;第2列第2行字符串 
Heading2_3        db        "关羽",0
Heading2_4        db        "西施",0

Heading3_1        db        "男",0 
Heading3_2        db        "女",0
Heading3_3        db        "男",0 
Heading3_4        db        "女",0 

sz_Colon_Signal    db        ':',0   ;冒号
sz_Enter_Signal    db        0dh,0ah,0      ;回车换行符
szDblickName_List  db        "提取到的内容是",0 

                 .data
                 
sztemplate        db        "%d",0
hProjectOrder01   dd             0         ;每列的排序状态,为0为未排序,为1为升序,为2为降序
hProjectOrder03   dd             0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
RGB macro red,green,blue ;颜色宏,让listview列表控件好看点
  xor eax,eax 
  mov ah,blue 
  shl eax,8 
  mov ah,green 
  mov al,red 
endm 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        .code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ShowListViewInfo proc             ;显示列表视图里的每项信息
    LOCAL lvItem:LV_ITEM
    LOCAL @buffer[10]:byte
    
    ;以下填充第1行的内容
    mov lvItem.imask,LVIF_TEXT    
    mov lvItem.iItem, 0      ;0为第1列,从0开始计算
    mov lvItem.iSubItem, 0   ;0为第1行
    invoke wsprintf,addr @buffer, addr sztemplate,1      ;格式化第1列第1行要显示的字符串
    lea eax, @buffer
    mov lvItem.pszText, eax
    mov lvItem.cchTextMax, sizeof Heading1
    invoke SendMessage, h_List, LVM_INSERTITEM, 0, addr lvItem
        
    mov lvItem.imask,LVIF_TEXT  
    mov lvItem.iSubItem,1
    lea eax,offset Heading2_1
    mov lvItem.pszText,eax 
    invoke SendMessage,h_List, LVM_SETITEM,0, addr lvItem
  
    mov lvItem.imask,LVIF_TEXT  
    mov lvItem.iSubItem,2
    lea eax,offset Heading3_1
    mov lvItem.pszText,eax 
    invoke SendMessage,h_List, LVM_SETITEM,0, addr lvItem
  
    ;以下填充第2行的内容
    mov lvItem.iItem, 1
    mov lvItem.iSubItem, 0  
    invoke wsprintf,addr @buffer, addr sztemplate,2      ;第1列第2行字符串
    lea eax, @buffer
    mov lvItem.pszText, eax
    invoke SendMessage, h_List, LVM_INSERTITEM, 0, addr lvItem
    
    mov lvItem.imask,LVIF_TEXT  
    mov lvItem.iSubItem,1
    lea eax,offset Heading2_2
    mov lvItem.pszText,eax 
    invoke SendMessage,h_List, LVM_SETITEM,0, addr lvItem
  
    mov lvItem.imask,LVIF_TEXT  
    mov lvItem.iSubItem,2
    lea eax,offset Heading3_2
    mov lvItem.pszText,eax 
    invoke SendMessage,h_List, LVM_SETITEM,0, addr lvItem
    
    ;以下填充第3行的内容
    mov lvItem.iItem, 2
    mov lvItem.iSubItem, 0
    invoke wsprintf,addr @buffer, addr sztemplate,3      ;第1列第3行字符串
    lea eax, @buffer
    mov lvItem.pszText, eax
    invoke SendMessage, h_List, LVM_INSERTITEM, 0, addr lvItem
    
    mov lvItem.imask,LVIF_TEXT  
    mov lvItem.iSubItem,1
    lea eax,offset Heading2_3
    mov lvItem.pszText,eax 
    invoke SendMessage,h_List, LVM_SETITEM,0, addr lvItem
  
    mov lvItem.imask,LVIF_TEXT  
    mov lvItem.iSubItem,2
    lea eax,offset Heading3_3
    mov lvItem.pszText,eax 
    invoke SendMessage,h_List, LVM_SETITEM,0, addr lvItem
    
    ;以下填充第4行的内容
    mov lvItem.iItem, 3
    mov lvItem.iSubItem, 0
    invoke wsprintf,addr @buffer, addr sztemplate,4      ;第1列第4行字符串
    lea eax, @buffer
    mov lvItem.pszText, eax
    invoke SendMessage, h_List, LVM_INSERTITEM, 0, addr lvItem
    
    mov lvItem.imask,LVIF_TEXT  
    mov lvItem.iSubItem,1
    lea eax,offset Heading2_4
    mov lvItem.pszText,eax 
    invoke SendMessage,h_List, LVM_SETITEM,0, addr lvItem
  
    mov lvItem.imask,LVIF_TEXT  
    mov lvItem.iSubItem,2
    lea eax,offset Heading3_4
    mov lvItem.pszText,eax 
    invoke SendMessage,h_List, LVM_SETITEM,0, addr lvItem
   
  ret 
_ShowListViewInfo endp 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_List_InsertColumn proc                                       ;插入列数及名称的函数
  LOCAL lvc:LV_COLUMN 

  mov lvc.imask,LVCF_TEXT+LVCF_WIDTH
  mov lvc.pszText,offset Heading1  ;第1列的标题栏名称
  mov lvc.lx,100     ;宽度
  invoke SendMessage,h_List, LVM_INSERTCOLUMN, 0, addr lvc
  
  or lvc.imask,LVCF_FMT
  mov lvc.fmt,LVCFMT_LEFT
  mov lvc.pszText,offset Heading2  ;第2列的标题栏名称 
  mov lvc.lx,150
  invoke SendMessage,h_List, LVM_INSERTCOLUMN, 1 ,addr lvc 
  
  mov lvc.pszText,offset Heading3
  mov lvc.lx,125
  invoke SendMessage,h_List, LVM_INSERTCOLUMN, 2 ,addr lvc 
   
  ret 
_List_InsertColumn endp 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        .code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain    proc    uses ebx edi esi hWnd,wMsg,wParam,lParam

        LOCAL @DEFAULT_GUI_FONT,@OLD_DEFAULT_GUI_FONT   ;加入这个,用于字体
                LOCAL lvi:LV_ITEM 
                LOCAL szbuffer[30]:BYTE 
                LOCAL szAllShowbuffer[256]:BYTE
        
        mov    eax,wMsg
        .if    eax == WM_CLOSE
            invoke    EndDialog,hWnd,NULL
        .elseif    eax == WM_INITDIALOG
            invoke    LoadIcon,hInstance,ICO_MAIN
            invoke    SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
            
                        invoke  GetStockObject,DEFAULT_GUI_FONT   
                        mov @DEFAULT_GUI_FONT,eax 
                   invoke  CreateWindowEx, NULL, addr szlistViewClassName, NULL, LVS_REPORT or WS_CHILD or WS_VISIBLE, \                           ;名单列表视图
                           0,0,0,0,hWnd, NULL, hInstance, NULL 
                        mov     h_List, eax 
                        mov     eax,LVS_EX_FULLROWSELECT or LVS_EX_GRIDLINES or LVS_EX_SUBITEMIMAGES    ;设置ListView全行选择,网格等样式.
                        invoke  SendMessage,h_List,LVM_SETEXTENDEDLISTVIEWSTYLE,0,eax
                        invoke  ImageList_Create,0,25,ILC_COLORDDB or ILC_MASK,0,0                      ;调整ImageList高,就可调整listView行高,就是把它撑大点
                        invoke  SendMessage,h_List,LVM_SETIMAGELIST,LVSIL_SMALL,eax            
                        invoke  SendMessage,h_List,WM_SETFONT,@DEFAULT_GUI_FONT,TRUE
                        
                        RGB 0,0,0 
                        invoke  SendMessage,h_List,LVM_SETTEXTCOLOR,0,eax    ;设置文本颜色
                        RGB 131,175,155
                        invoke  SendMessage,h_List,LVM_SETBKCOLOR,0,eax      ;设置背景颜色
                        RGB 131,175,155
                        invoke  SendMessage,h_List,LVM_SETTEXTBKCOLOR,0,eax  ;设置文本背景颜色
                        
                        invoke    MoveWindow,h_List,0,0,530,520,TRUE           ;调整列表视图的位置才能显示出来
                        invoke  _List_InsertColumn                            ;调用初始化ListView控件的函数 
                        invoke  _ShowListViewInfo                             ;调用初始化显示列表视图内容的函数
                                                
        .elseif    eax == WM_COMMAND
            mov    eax,wParam
            .if    ax == BUTTON01
                                invoke  RtlZeroMemory,addr szbuffer,sizeof szbuffer
                                invoke  RtlZeroMemory,addr szAllShowbuffer,sizeof szAllShowbuffer                      ;缓冲区清空,防止此片内存有残留内容。
                                
                                mov lvi.iItem,1      ; iItem是哪一行,从0开始计算,1就是第2行
        
                                mov lvi.iSubItem,0   ;iSubItem是哪一项,从0开始计算,0就是第1项,后面以此类推
                                mov lvi.imask,LVIF_TEXT 
                                lea eax,szbuffer 
                                mov lvi.pszText,eax
                                mov lvi.cchTextMax,sizeof szbuffer   ;定义的szbuffer缓冲区的大小
                                invoke SendMessage,h_List,LVM_GETITEM,0,addr lvi           ;发送LVM_GETITEM消息给控件,把提取到的文本发送到lvi结构的pszText字段
                                invoke lstrcat,addr szAllShowbuffer,addr Heading1
                                invoke lstrcat,addr szAllShowbuffer,addr sz_Colon_Signal   ;加冒号
                                invoke lstrcat,addr szAllShowbuffer,addr szbuffer          ;加提取到的数据,就是"2"
                                invoke lstrcat,addr szAllShowbuffer,addr sz_Enter_Signal   ;加回车换行
                                
                                mov lvi.iSubItem,1 
                                mov lvi.imask,LVIF_TEXT 
                                lea eax,szbuffer 
                                mov lvi.pszText,eax 
                                mov lvi.cchTextMax,sizeof szbuffer 
                                invoke SendMessage,h_List,LVM_GETITEM,0,addr lvi 
                                invoke lstrcat,addr szAllShowbuffer,addr Heading2
                                invoke lstrcat,addr szAllShowbuffer,addr sz_Colon_Signal   ;加冒号
                                invoke lstrcat,addr szAllShowbuffer,addr szbuffer          ;加提取到的数据,就是"绍婵"
                                invoke lstrcat,addr szAllShowbuffer,addr sz_Enter_Signal   ;加回车换行
                                
                                mov lvi.iSubItem,2 
                                mov lvi.imask,LVIF_TEXT 
                                lea eax,szbuffer 
                                mov lvi.pszText,eax 
                                mov lvi.cchTextMax,sizeof szbuffer 
                                invoke SendMessage,h_List,LVM_GETITEM,0,addr lvi 
                                invoke lstrcat,addr szAllShowbuffer,addr Heading3
                                invoke lstrcat,addr szAllShowbuffer,addr sz_Colon_Signal   ;加冒号
                                invoke lstrcat,addr szAllShowbuffer,addr szbuffer          ;加提取到的数据
                                invoke lstrcat,addr szAllShowbuffer,addr sz_Enter_Signal   ;加回车换行
                                
                                invoke MessageBox,0, addr szAllShowbuffer,addr szDblickName_List,MB_OK or MB_ICONINFORMATION 
            .endif
        .else
            mov    eax,FALSE
            ret
        .endif
        mov    eax,TRUE
        ret

_ProcDlgMain    endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
        invoke    GetModuleHandle,NULL
        mov    hInstance,eax
        invoke    DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
        invoke    ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        end    start
 

;以下是rc资源文件
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include        <resource.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define    ICO_MAIN        0x1000    //图标
#define    DLG_MAIN        1

#define    BUTTON01        11
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN    ICON        "Main.ico"
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_MAIN DIALOG 50, 50, 250, 385
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "win32汇编环境对话框程序提取listview列表控件的内容"
FONT 9, "宋体"
{
CONTROL "提取第2行",BUTTON01,"Button",WS_CHILDWINDOW|WS_VISIBLE|WS_TABSTOP, 100, 360, 50, 15
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;运行效果


http://www.kler.cn/a/459054.html

相关文章:

  • FastAPI 统一接口响应(Json)模板的使用示例
  • 数据可视化-16. 日历图
  • SpringCloud源码分析-LoadBalancer
  • android stdudio环境: gradle一直安装失败
  • 【谷歌开发者月刊】十二月精彩资讯回顾,探索科技新可能
  • Android音频效果处理:基于`android.media.audiofx`包的原理、架构与实现
  • ES IK分词字典热更新
  • 从0开始的Opencv之旅(到尝试构建一个图像编辑器):0,opencv demo
  • Kotlin 协程基础知识总结五 —— 通道、多路复用、并发安全
  • 存储进阶笔记(二):Linux 存储栈:从 Device Mapper、LVM 到文件系统(2024)
  • 抽奖2(信奥)
  • springboot515基于SpringBoot的宠物爱心组织管理系统(论文+源码)_kaic
  • Python爬虫(selenium)从网站获取信息并存入数据库(mysql)
  • SCOPE:面向大语言模型长序列生成的双阶段KV缓存优化框架
  • 【2024年-9月-14日-开源社区openEuler实践记录】PM4OSSP-PROXY
  • 前端页面展示本电脑的摄像头,并使用js获取摄像头列表
  • css 类名
  • Tomcat:开源Web服务器的中流砥柱
  • 一款汽车连接器(HSD(4+2))信号完整性仿真
  • 资源规划管理系统(源码+文档+部署+讲解)
  • JVM实战—JVM内存设置与对象分配流转
  • 重生之我在异世界学编程之数据结构与算法:深入栈篇
  • 机器学习特征选择
  • NLP自然语言处理——使用飞桨实现基于LSTM的情感分析
  • Tonghttpserver6.0.1.3 使用整理(by lqw)
  • AMBA总线协议