⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listview.asm

📁 windows汇编语言程序设计 吴中平著 一书所附所有源代码。 该书重点讲解了Windows环境下汇编语言程序设计的基本原理及其实现过程
💻 ASM
📖 第 1 页 / 共 2 页
字号:
include .\head.inc
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
FillFileInfo PROTO
ExecuteFile proto
UpdatelParam PROTO
CompareFunc PROTO  :DWORD,:DWORD,:DWORD
ShowFileInfo PROTO :DWORD,:DWORD
ShowPathInfo PROTO :DWORD,:DWORD
.const
IDR_MENU     equ 101
IDR_ICON1    equ 114
IDR_ICON2    equ 115
IDR_ICON3    equ 116
IDR_BITMAP1  equ 117
IDR_BITMAP2  equ 118
IDR_BITMAP3  equ 119
IDR_BITMAP4  equ 120
IDR_BITMAP5  equ 123
IDM_LARGE     equ LVS_ICON
IDM_SMALL     equ LVS_SMALLICON
IDM_LIST        equ LVS_LIST
IDM_DETAIL   equ LVS_REPORT
.data
ClassName              db "ListViewClass",0
ListViewClassName  db "SYSLISTVIEW32",0
TitleName                db "列表视图",0
List1                       db "名称",0
List2                       db "大小",0
List3                       db "类型",0
List4                       db "建立时间",0
FileName                 db "*.*",0
char                        db "%lu",0
folder                      db "文件夹",0
TxtExtend               db ".txt",0
txt                          db "文本文件",0      
DocExtend              db ".doc",0
doc                        db "Word文件",0
ExeExtend              db ".exe",0
exe                        db "可执行文件",0
BmpExtend             db ".bmp",0
bmp                       db "位图文件",0
other                     db "其他文件",0
NoExe                   db "这不是可执行文件,故不能执行!",0
CurrentDirect         db ".",0
ParentDirect           db "..",0
CreateDateTime      db 50 dup (0)
interval                   db "-",0
interval_space         db " ",0
interval_colon          db ":",0
FileNameSortOrder   dd 0
SizeSortOrder          dd 0
.data?
hInstance	     HINSTANCE  ?
hListView       HANDLE       ?
hImageList      HANDLE      ?
nmhdr             NMHDR     <>
Rect               RECT <>
hMenu            HMENU    ?
temp               db 20 dup (?)
Date_Time       SYSTEMTIME <>
.code
start:
   invoke GetModuleHandle, NULL
   mov    hInstance,eax
   invoke WinMain, NULL,NULL,NULL, SW_SHOWDEFAULT
   invoke ExitProcess,eax
   invoke InitCommonControls

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 or CS_DBLCLKS
   mov   wc.lpfnWndProc, OFFSET WndProc
   mov   wc.cbClsExtra,NULL
   mov   wc.cbWndExtra,NULL
   mov   eax, hInstance
   mov   wc.hInstance,eax
   invoke GetStockObject,WHITE_BRUSH 
   mov   wc.hbrBackground,eax
   mov   wc.lpszMenuName,IDR_MENU
   mov   wc.lpszClassName,OFFSET ClassName
   invoke LoadIcon,NULL,IDI_WINLOGO
   mov   wc.hIcon,eax
   mov   wc.hIconSm,0
   invoke LoadCursor,NULL,IDC_ARROW
   mov   wc.hCursor,eax
   invoke RegisterClassEx, addr wc
   invoke CreateWindowEx,WS_EX_CLIENTEDGE+WS_EX_APPWINDOW,addr ClassName,\
       addr TitleName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,400,200,\
       NULL,NULL,hInst,NULL
   mov   hwnd,eax
   invoke GetMenu,hwnd
   mov hMenu,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 lvc:LV_COLUMN
   local hIcon:DWORD
   local hBitmap:DWORD
   .if  uMsg==WM_DESTROY
      invoke PostQuitMessage,NULL
   .elseif  uMsg==WM_CREATE
      invoke CreateWindowEx,NULL,addr  ListViewClassName,NULL,WS_CHILD+WS_VISIBLE\
         +LVS_REPORT,0,0,0,0,hWnd,NULL,hInstance,NULL
      mov hListView,eax
      invoke ImageList_Create,16,16,ILC_COLOR32,8,10
      mov hImageList,eax

      invoke LoadIcon,hInstance,IDR_ICON1
      mov hIcon,eax
      invoke ImageList_AddIcon,hImageList,hIcon 
      invoke LoadIcon,hInstance,IDR_ICON2
      mov hIcon,eax
      invoke ImageList_AddIcon,hImageList,hIcon 
      invoke LoadIcon,hInstance,IDR_ICON3
      mov hIcon,eax
      invoke ImageList_AddIcon,hImageList,hIcon 

      invoke LoadBitmap,hInstance,IDR_BITMAP1
      mov hBitmap,eax
      invoke ImageList_Add,hImageList,hBitmap,NULL
      invoke LoadBitmap,hInstance,IDR_BITMAP2
      mov hBitmap,eax
      invoke ImageList_Add,hImageList,hBitmap,NULL
      invoke LoadBitmap,hInstance,IDR_BITMAP3
      mov hBitmap,eax
      invoke ImageList_Add,hImageList,hBitmap,NULL
      invoke LoadBitmap,hInstance,IDR_BITMAP4
      mov hBitmap,eax
      invoke ImageList_Add,hImageList,hBitmap,NULL
      invoke LoadBitmap,hInstance,IDR_BITMAP5
      mov hBitmap,eax
      invoke ImageList_Add,hImageList,hBitmap,NULL

      invoke SendMessage,hListView,LVM_SETIMAGELIST,LVSIL_SMALL  ,hImageList
           
      mov lvc.imask,LVCF_FMT+LVCF_TEXT+LVCF_WIDTH
      mov lvc.fmt,LVCFMT_CENTER
      mov lvc.lx,120
      mov lvc.pszText,offset List1
      invoke SendMessage,hListView,LVM_INSERTCOLUMN,0,addr lvc             
      mov lvc.imask,LVCF_TEXT+LVCF_IMAGE+LVCF_WIDTH+LVCF_FMT
      mov lvc.pszText,offset List2
      mov lvc.fmt, LVCFMT_BITMAP_ON_RIGHT+LVCFMT_LEFT
      mov lvc.iImage,0
      mov lvc.lx,80
      invoke SendMessage,hListView,LVM_INSERTCOLUMN,1,addr lvc
      mov lvc.imask,LVCF_FMT+LVCF_TEXT+LVCF_WIDTH
      mov lvc.pszText,offset List3
      invoke SendMessage,hListView,LVM_INSERTCOLUMN,2,addr lvc
      mov lvc.pszText,offset List4
      mov lvc.lx,150
      invoke SendMessage,hListView,LVM_INSERTCOLUMN,3,addr lvc
      invoke FillFileInfo  

   .elseif  uMsg==WM_SIZE
      invoke GetClientRect,hWnd,addr Rect
      invoke MoveWindow,hListView,0,0,Rect.right,Rect.bottom,TRUE
   .elseif  uMsg==WM_NOTIFY
      push edi
      mov edi,lParam
      assume edi:ptr NMHDR
      .if  [edi].code==LVN_COLUMNCLICK
         assume edi:ptr NM_LISTVIEW
         .if  [edi].iSubItem==1            
            .if  SizeSortOrder==0||SizeSortOrder==2
               invoke SendMessage,hListView,LVM_SORTITEMS,1,addr CompareFunc
               invoke UpdatelParam
               mov SizeSortOrder,1
               mov lvc.imask,LVCF_TEXT+LVCF_IMAGE
               mov lvc.pszText,offset List2
               mov lvc.iImage,1
               mov lvc.lx,80
               invoke SendMessage,hListView,LVM_SETCOLUMN,1,addr lvc   
            .else
               invoke SendMessage,hListView,LVM_SORTITEMS,2,addr CompareFunc
               invoke UpdatelParam
               mov SizeSortOrder,2
               mov lvc.pszText,offset List2
               mov lvc.fmt, LVCFMT_BITMAP_ON_RIGHT+LVCFMT_LEFT
               mov lvc.iImage,0
               mov lvc.lx,80
               invoke SendMessage,hListView,LVM_SETCOLUMN,1,addr lvc       
            .endif
         .elseif  [edi].iSubItem==0
            .if  FileNameSortOrder==0||FileNameSortOrder==4
               invoke SendMessage,hListView,LVM_SORTITEMS,3,addr CompareFunc
               invoke UpdatelParam
               mov FileNameSortOrder,3
            .else
               invoke SendMessage,hListView,LVM_SORTITEMS,4,addr CompareFunc
               invoke UpdatelParam
               mov FileNameSortOrder,4
            .endif                                  
         .endif
      .elseif  [edi].hdr.code==NM_DBLCLK
         invoke ExecuteFile
      .endif
      pop edi 
   .elseif  uMsg==WM_COMMAND
      .if !lParam
         mov edx,lParam
         .if edx==IDM_LARGE
              invoke SendMessage,hListView,LVM_SETIMAGELIST,LVSIL_NORMAL,hImageList
         .else
              invoke SendMessage,hListView,LVM_SETIMAGELIST,LVSIL_SMALL,hImageList
         .endif
         invoke GetWindowLong,hListView,GWL_STYLE
         and eax,not LVS_TYPEMASK;相关位清0
         mov edx,wParam
         mov edx,wParam     
         push edx
         or eax,edx
         invoke SetWindowLong,hListView,GWL_STYLE,eax
         pop edx
         invoke CheckMenuRadioItem,hMenu,IDM_LARGE,IDM_LIST,edx,MF_CHECKED
      .endif
   .else
      invoke DefWindowProc,hWnd,uMsg,wParam,lParam		
      ret
   .endif
   xor eax,eax
   ret
WndProc endp

FillFileInfo  proc uses edi
   local finddata:WIN32_FIND_DATA
   local hFind:DWORD
   invoke FindFirstFile,addr FileName,addr finddata  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -