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

}

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

;运行效果

相关推荐
牛猫Data2 小时前
Power BI如何连接Azure Databricks数据源?
microsoft·数据分析·azure·数据可视化·powerbi
肖无疾6 小时前
在CE自动汇编里调用lua函数
汇编·lua·ce
星尘安全20 小时前
Azure Airflow 中配置错误可能会使整个集群受到攻击
microsoft·网络安全·flask·azure·云安全
wangyue41 天前
c# 服务中启动exe窗体程序
开发语言·microsoft·c#
yuanbenshidiaos1 天前
QT-------------自定义插件和库
数据库·qt·microsoft
小奥超人1 天前
如何设置禁止编辑PPT内容
windows·经验分享·microsoft·powerpoint·办公技巧
Libby博仙1 天前
.net core修行之路-多线程异步编程概念篇
windows·microsoft·.netcore
GarryLau2 天前
Microsoft Visual Studio中的/MT, /MTd,/MD,/MDd分别是什么意思?
microsoft·visual studio
冬瓜3122 天前
汇编点灯练习
汇编·arm