网站设计优缺点,网站上传照片失败,打开国外网站很慢,360免费wifi上不了网;运行效果 ;双击后 ;上源码#xff0c;仔细研究里面的几条备注就理解原理了
;提取窗口程序内生成的listview列表控件的内容示例程序 ;抄下面源码#xff0c;可以在radasm里面直接编译运行。主要的部分加了备注。 ;… ;运行效果 ;双击后 ;上源码仔细研究里面的几条备注就理解原理了
;提取窗口程序内生成的listview列表控件的内容示例程序 ;抄下面源码可以在radasm里面直接编译运行。主要的部分加了备注。 ; .386 .model flat,stdcall option casemap:none ; ; Include 文件定义 ; include windows.inc include gdi32.inc includelib gdi32.lib include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib
include gdi32.inc ;加入这个 includelib gdi32.lib ;加入这个 include comctl32.inc ;加入这个 includelib comctl32.lib ;加入这个 ; ; 数据段 ; .data?
hInstance dd ? hWinMain dd ?
h_List dd ? .const szClassName db MyClass,0 szCaptionMain db win32汇编环境窗口程序listview列表控件点击排序示例,0
sz_Colon_Signal db :,0 ;冒号 sz_Enter_Signal db 0dh,0ah,0 ;回车换行符 szDblickName_List db 当前双击的是,0
szlistViewClassName db SysListView32,0 ;加这个
Heading1 db 序号,0 ;第1列名称 Heading2 db 姓名,0 ;第1列名称 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 .data sztemplate db %d,0 ;格式化序号用
; ; 代码段 .code ; RGB macro red,green,blue ;颜色宏,让listview列表控件好看点 xor eax,eax mov ah,blue shl eax,8 mov ah,green mov al,red endm ; _ShowCurrentFocus proc ;提取被双击到的某项内容 LOCAL lvi:LV_ITEM LOCAL szbuffer[256]:BYTE LOCAL szAllShowbuffer[256]:BYTE invoke RtlZeroMemory,addr szbuffer,sizeof szbuffer invoke RtlZeroMemory,addr szAllShowbuffer,sizeof szAllShowbuffer ;缓冲区清空,防止此片内存有残留内容。 invoke SendMessage,h_List,LVM_GETNEXTITEM,-1, LVNI_FOCUSED ;LVM_GETNEXTITEM消息搜索有指定属性的行比如指定LVNI_FOCUSED属性而LVNI_FOCUSED就是具有焦点即被选中的行 mov lvi.iItem,eax mov lvi.iSubItem,0 mov lvi.imask,LVIF_TEXT lea eax,szbuffer mov lvi.pszText,eax mov lvi.cchTextMax,256 invoke SendMessage,h_List,LVM_GETITEM,0,addr lvi invoke lstrcat,addr szAllShowbuffer,addr Heading1 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,1 mov lvi.imask,LVIF_TEXT lea eax,szbuffer mov lvi.pszText,eax mov lvi.cchTextMax,256 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,256 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 MessageBox,0, addr szAllShowbuffer,addr szDblickName_List,MB_OK or MB_ICONINFORMATION ret _ShowCurrentFocus endp ; _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_TEXTLVCF_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 ; ; 窗口过程 ; _ProcWinMain proc uses ebx edi esi,hWnd,uMsg,wParam,lParam local stPs:PAINTSTRUCT local stRect:RECT local hDc LOCAL DEFAULT_GUI_FONT,OLD_DEFAULT_GUI_FONT ;加入这个,字体使用 mov eax,uMsg ;******************************************************************** .if eax WM_PAINT invoke BeginPaint,hWnd,addr stPs invoke EndPaint,hWnd,addr stPs .elseif eax WM_CREATE mov eax,hWnd mov hWinMain,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,35,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,375,520,TRUE ;调整列表视图的位置才能显示出来 invoke _List_InsertColumn ;调用初始化ListView控件的函数 invoke _ShowListViewInfo ;调用初始化显示列表视图内容的函数 .elseif eax WM_NOTIFY ;当事件发生或控件需要一些信息时由公共控件发送到其父窗口。 push edi mov edi,lParam ;接收到了 WM_NOTIFY 消息后lParam 包含了指向 NMHDR 型结构体变量的指针。我们通过把列表视图控件的值和 NMHDR 型 assume edi:ptr NMHDR ;结构体变量中的 hwndFrom 成员变量的值比较来判断如果相等的话就可以确定消息是列表视图控件发送的 mov eax,[edi].hwndFrom .if eaxh_List .if [edi].codeNM_DBLCLK ;双击项目显示第一条信息 invoke _ShowCurrentFocus ;调用提取listview控件内容并弹出信息的函数 .endif .endif pop edi ;******************************************************************** .elseif eax WM_CLOSE invoke DestroyWindow,hWinMain invoke PostQuitMessage,NULL ;******************************************************************** .else invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .endif ;******************************************************************** xor eax,eax ret
_ProcWinMain endp ; _WinMain proc local stWndClass:WNDCLASSEX local stMsg:MSG invoke InitCommonControls ;加上这句 invoke GetModuleHandle,NULL mov hInstance,eax invoke RtlZeroMemory,addr stWndClass,sizeof stWndClass ;******************************************************************** ; 注册窗口类 ;******************************************************************** invoke LoadCursor,0,IDC_ARROW mov stWndClass.hCursor,eax push hInstance pop stWndClass.hInstance mov stWndClass.cbSize,sizeof WNDCLASSEX mov stWndClass.style,CS_HREDRAW or CS_VREDRAW mov stWndClass.lpfnWndProc,offset _ProcWinMain mov stWndClass.hbrBackground,COLOR_WINDOW 1 mov stWndClass.lpszClassName,offset szClassName invoke RegisterClassEx,addr stWndClass ;******************************************************************** ; 建立并显示窗口 ;******************************************************************** invoke CreateWindowEx,WS_EX_CLIENTEDGE,offset szClassName,offset szCaptionMain,\ WS_OVERLAPPEDWINDOW,\ 100,100,395,420,\ NULL,NULL,hInstance,NULL mov hWinMain,eax invoke ShowWindow,hWinMain,SW_SHOWNORMAL invoke UpdateWindow,hWinMain ;******************************************************************** ; 消息循环 ;******************************************************************** .while TRUE invoke GetMessage,addr stMsg,NULL,0,0 .break .if eax 0 invoke TranslateMessage,addr stMsg invoke DispatchMessage,addr stMsg .endw ret_WinMain endp ; start: call _WinMain invoke ExitProcess,NULL ; end start