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

📄 tut31.html

📁 WINDOWS程序员使用指南--汇编基础
💻 HTML
📖 第 1 页 / 共 5 页
字号:
  &nbsp; pop wc.hInstance <br>
  &nbsp; mov wc.hbrBackground,COLOR_WINDOW+1 <br>
  &nbsp; mov wc.lpszMenuName,IDM_MAINMENU <br>
  &nbsp; mov wc.lpszClassName,OFFSET ClassName <br>
  &nbsp; invoke LoadIcon,NULL,IDI_APPLICATION <br>
  &nbsp; mov wc.hIcon,eax <br>
  &nbsp; mov wc.hIconSm,eax <br>
  &nbsp; invoke LoadCursor,NULL,IDC_ARROW <br>
  &nbsp; mov wc.hCursor,eax <br>
  &nbsp; invoke RegisterClassEx, addr wc <br>
  &nbsp; invoke CreateWindowEx,NULL,ADDR ClassName,ADDR AppName, WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 
  CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst,NULL <br>
  &nbsp; mov hwnd,eax <br>
  &nbsp; invoke ShowWindow, hwnd,SW_SHOWNORMAL <br>
  &nbsp; invoke UpdateWindow, hwnd <br>
  &nbsp; .while TRUE <br>
  &nbsp;&nbsp;&nbsp; invoke GetMessage, ADDR msg,NULL,0,0 <br>
  &nbsp;&nbsp;&nbsp; .break .if (!eax) <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke TranslateMessage, ADDR msg <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke DispatchMessage, ADDR msg <br>
  &nbsp; .endw <br>
  &nbsp; mov eax,msg.wParam <br>
  &nbsp; ret <br>
  WinMain endp <br>
  <br>
  InsertColumn proc <br>
  &nbsp;&nbsp;LOCAL lvc:LV_COLUMN <br>
  <br>
  &nbsp; mov lvc.imask,LVCF_TEXT+LVCF_WIDTH <br>
  &nbsp; mov lvc.pszText,offset Heading1 <br>
  &nbsp; mov lvc.lx,150 <br>
  &nbsp; invoke SendMessage,hList, LVM_INSERTCOLUMN, 0, addr lvc<br>
  &nbsp; </font><font face="Fixedsys">or lvc.imask,LVCF_FMT<br>
  &nbsp; mov lvc.fmt,LVCFMT_RIGHT <br>
  &nbsp; mov lvc.pszText,offset Heading2 <br>
  &nbsp; mov lvc.lx,100<br>
  &nbsp; </font><font face="Fixedsys">invoke SendMessage,hList, LVM_INSERTCOLUMN, 
  1 ,addr lvc <br>
  &nbsp; ret <br>
  InsertColumn endp <br>
  <br>
  ShowFileInfo proc uses edi row:DWORD, lpFind:DWORD <br>
  &nbsp; LOCAL lvi:LV_ITEM <br>
  &nbsp; LOCAL buffer[20]:BYTE <br>
  &nbsp; mov edi,lpFind <br>
  &nbsp; assume edi:ptr WIN32_FIND_DATA <br>
  &nbsp; mov lvi.imask,LVIF_TEXT+LVIF_PARAM <br>
  &nbsp; push row <br>
  &nbsp; pop lvi.iItem <br>
  &nbsp; mov lvi.iSubItem,0 <br>
  &nbsp; lea eax,[edi].cFileName <br>
  &nbsp; mov lvi.pszText,eax <br>
  &nbsp; push row <br>
  &nbsp; pop lvi.lParam <br>
  &nbsp; invoke SendMessage,hList, LVM_INSERTITEM,0, addr lvi <br>
  &nbsp; mov lvi.imask,LVIF_TEXT <br>
  &nbsp; inc lvi.iSubItem <br>
  &nbsp; invoke wsprintf,addr buffer, addr template,[edi].nFileSizeLow <br>
  &nbsp; lea eax,buffer <br>
  &nbsp; mov lvi.pszText,eax <br>
  &nbsp; invoke SendMessage,hList,LVM_SETITEM, 0,addr lvi <br>
  &nbsp; assume edi:nothing <br>
  &nbsp; ret <br>
  ShowFileInfo endp <br>
  <br>
  FillFileInfo proc uses edi <br>
  &nbsp; LOCAL finddata:WIN32_FIND_DATA <br>
  &nbsp; LOCAL FHandle:DWORD <br>
  <br>
  &nbsp; invoke FindFirstFile,addr FileNamePattern,addr finddata <br>
  &nbsp; .if eax!=INVALID_HANDLE_VALUE <br>
  &nbsp;&nbsp;&nbsp; mov FHandle,eax <br>
  &nbsp;&nbsp;&nbsp; xor edi,edi <br>
  &nbsp;&nbsp;&nbsp; .while eax!=0 <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test finddata.dwFileAttributes,FILE_ATTRIBUTE_DIRECTORY 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .if ZERO?</font><br>
  <font face="Fixedsys">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke 
  ShowFileInfo,edi, addr finddata <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inc edi <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .endif <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke FindNextFile,FHandle,addr finddata <br>
  &nbsp;&nbsp; &nbsp;.endw <br>
  &nbsp;&nbsp;&nbsp; invoke FindClose,FHandle <br>
  &nbsp; .endif <br>
  &nbsp; ret <br>
  FillFileInfo endp <br>
  <br>
  String2Dword proc uses ecx edi edx esi String:DWORD <br>
  &nbsp; LOCAL Result:DWORD <br>
  <br>
  &nbsp;&nbsp;mov Result,0 <br>
  &nbsp;&nbsp;mov edi,String <br>
  &nbsp; invoke lstrlen,String <br>
  &nbsp; .while eax!=0 <br>
  &nbsp;&nbsp;&nbsp; xor edx,edx <br>
  &nbsp;&nbsp;&nbsp; mov dl,byte ptr [edi] <br>
  &nbsp;&nbsp;&nbsp; sub dl,"0" <br>
  &nbsp;&nbsp;&nbsp; mov esi,eax <br>
  &nbsp;&nbsp;&nbsp; dec esi <br>
  &nbsp;&nbsp;&nbsp; push eax <br>
  &nbsp;&nbsp;&nbsp; mov eax,edx <br>
  &nbsp;&nbsp;&nbsp; push ebx <br>
  &nbsp;&nbsp;&nbsp; mov ebx,10 <br>
  &nbsp;&nbsp;&nbsp; .while esi > 0 <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mul ebx <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dec esi <br>
  &nbsp;&nbsp;&nbsp; .endw <br>
  &nbsp;&nbsp;&nbsp; pop ebx <br>
  &nbsp;&nbsp;&nbsp; add Result,eax <br>
  &nbsp;&nbsp;&nbsp; pop eax <br>
  &nbsp;&nbsp;&nbsp; inc edi <br>
  &nbsp;&nbsp;&nbsp; dec eax <br>
  &nbsp; .endw <br>
  &nbsp; mov eax,Result <br>
  &nbsp; ret <br>
  String2Dword endp <br>
  <br>
  CompareFunc proc uses edi lParam1:DWORD, lParam2:DWORD, SortType:DWORD <br>
  &nbsp; LOCAL buffer[256]:BYTE <br>
  &nbsp; LOCAL buffer1[256]:BYTE <br>
  &nbsp; LOCAL lvi:LV_ITEM <br>
  <br>
  &nbsp; mov lvi.imask,LVIF_TEXT <br>
  &nbsp; lea eax,buffer <br>
  &nbsp; mov lvi.pszText,eax <br>
  &nbsp; mov lvi.cchTextMax,256 <br>
  &nbsp; .if SortType==1 <br>
  &nbsp;&nbsp;&nbsp; mov lvi.iSubItem,1 <br>
  &nbsp;&nbsp;&nbsp; invoke SendMessage,hList,LVM_GETITEMTEXT,lParam1,addr lvi 
  <br>
  &nbsp;&nbsp;&nbsp; invoke String2Dword,addr buffer <br>
  &nbsp;&nbsp;&nbsp; mov edi,eax <br>
  &nbsp;&nbsp;&nbsp; invoke SendMessage,hList,LVM_GETITEMTEXT,lParam2,addr lvi 
  <br>
  &nbsp;&nbsp;&nbsp; invoke String2Dword,addr buffer <br>
  &nbsp;&nbsp;&nbsp; sub edi,eax <br>
  &nbsp;&nbsp;&nbsp; mov eax,edi <br>
  &nbsp; .elseif SortType==2 <br>
  &nbsp;&nbsp;&nbsp; mov lvi.iSubItem,1 <br>
  &nbsp;&nbsp;&nbsp; invoke SendMessage,hList,LVM_GETITEMTEXT,lParam1,addr lvi 
  <br>
  &nbsp;&nbsp;&nbsp; invoke String2Dword,addr buffer <br>
  &nbsp;&nbsp;&nbsp; mov edi,eax <br>
  &nbsp;&nbsp;&nbsp; invoke SendMessage,hList,LVM_GETITEMTEXT,lParam2,addr lvi 
  <br>
  &nbsp;&nbsp;&nbsp; invoke String2Dword,addr buffer <br>
  &nbsp;&nbsp;&nbsp; sub eax,edi <br>
  &nbsp; .elseif SortType==3 <br>
  &nbsp;&nbsp;&nbsp; mov lvi.iSubItem,0 <br>
  &nbsp;&nbsp;&nbsp; invoke SendMessage,hList,LVM_GETITEMTEXT,lParam1,addr lvi 
  <br>
  &nbsp;&nbsp;&nbsp; invoke lstrcpy,addr buffer1,addr buffer <br>
  &nbsp;&nbsp;&nbsp; invoke SendMessage,hList,LVM_GETITEMTEXT,lParam2,addr lvi 
  <br>
  &nbsp;&nbsp;&nbsp; invoke lstrcmpi,addr buffer1,addr buffer <br>
  &nbsp; .else <br>
  &nbsp;&nbsp;&nbsp; mov lvi.iSubItem,0 <br>
  &nbsp;&nbsp;&nbsp; invoke SendMessage,hList,LVM_GETITEMTEXT,lParam1,addr lvi 
  <br>
  &nbsp;&nbsp;&nbsp; invoke lstrcpy,addr buffer1,addr buffer <br>
  &nbsp;&nbsp;&nbsp; invoke SendMessage,hList,LVM_GETITEMTEXT,lParam2,addr lvi 
  <br>
  &nbsp;&nbsp;&nbsp; invoke lstrcmpi,addr buffer,addr buffer1 <br>
  &nbsp; .endif <br>
  &nbsp; ret <br>
  CompareFunc endp <br>
  <br>
  UpdatelParam proc uses edi <br>
  &nbsp;&nbsp; LOCAL lvi:LV_ITEM <br>
  <br>
  &nbsp;&nbsp; invoke SendMessage,hList, LVM_GETITEMCOUNT,0,0 <br>
  &nbsp;&nbsp; mov edi,eax <br>
  &nbsp;&nbsp; mov lvi.imask,LVIF_PARAM <br>
  &nbsp;&nbsp; mov lvi.iSubItem,0 <br>
  &nbsp;&nbsp; mov lvi.iItem,0 <br>
  &nbsp;&nbsp; .while edi>0 <br>
  &nbsp;&nbsp;&nbsp;&nbsp; push lvi.iItem <br>
  &nbsp;&nbsp;&nbsp;&nbsp; pop lvi.lParam <br>
  &nbsp;&nbsp;&nbsp;&nbsp; invoke SendMessage,hList, LVM_SETITEM,0,addr lvi <br>
  &nbsp;&nbsp;&nbsp;&nbsp; inc lvi.iItem <br>
  &nbsp;&nbsp;&nbsp;&nbsp; dec edi <br>
  &nbsp;&nbsp; .endw <br>
  &nbsp;&nbsp; ret <br>
  UpdatelParam endp <br>
  <br>
  ShowCurrentFocus proc <br>
  &nbsp;&nbsp; LOCAL lvi:LV_ITEM <br>
  &nbsp;&nbsp; LOCAL buffer[256]:BYTE <br>
  <br>
  &nbsp;&nbsp; invoke SendMessage,hList,LVM_GETNEXTITEM,-1, LVNI_FOCUSED<br>
  &nbsp;&nbsp; mov lvi.iItem,eax <br>
  &nbsp;&nbsp; mov lvi.iSubItem,0 <br>
  &nbsp;&nbsp; mov lvi.imask,LVIF_TEXT <br>
  &nbsp;&nbsp; lea eax,buffer <br>
  &nbsp;&nbsp; mov lvi.pszText,eax <br>
  &nbsp;&nbsp;&nbsp;mov lvi.cchTextMax,256 <br>
  &nbsp;&nbsp; invoke SendMessage,hList,LVM_GETITEM,0,addr lvi <br>
  &nbsp;&nbsp; invoke MessageBox,0, addr buffer,addr AppName,MB_OK <br>
  &nbsp;&nbsp; ret <br>
  ShowCurrentFocus endp <br>
  <br>
  WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM <br>
  &nbsp;&nbsp;.if uMsg==WM_CREATE <br>
  &nbsp;&nbsp;&nbsp; invoke CreateWindowEx, NULL, addr ListViewClassName, NULL, 
  LVS_REPORT+WS_CHILD+WS_VISIBLE, 0,0,0,0,hWnd, NULL, hInstance, NULL <br>
  &nbsp;&nbsp;&nbsp; mov hList, eax <br>
  &nbsp;&nbsp;&nbsp;&nbsp;invoke InsertColumn <br>
  &nbsp;&nbsp;&nbsp; invoke FillFileInfo <br>
  &nbsp;&nbsp;&nbsp; RGB 255,255,255 <br>
  &nbsp;&nbsp;&nbsp; invoke SendMessage,hList,LVM_SETTEXTCOLOR,0,eax <br>
  &nbsp;&nbsp;&nbsp; RGB 0,0,0 <br>
  &nbsp;&nbsp;&nbsp; invoke SendMessage,hList,LVM_SETBKCOLOR,0,eax <br>
  &nbsp;&nbsp;&nbsp; RGB 0,0,0 <br>
  &nbsp;&nbsp;&nbsp; invoke SendMessage,hList,LVM_SETTEXTBKCOLOR,0,eax <br>
  &nbsp;&nbsp;&nbsp; invoke GetMenu,hWnd <br>
  &nbsp;&nbsp;&nbsp; mov hMenu,eax <br>
  &nbsp;&nbsp;&nbsp; invoke CheckMenuRadioItem,hMenu,IDM_ICON,IDM_LIST, IDM_REPORT,MF_CHECKED 
  <br>
  &nbsp; .elseif uMsg==WM_COMMAND <br>
  &nbsp;&nbsp;&nbsp; .if lParam==0 <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke GetWindowLong,hList,GWL_STYLE <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and eax,not LVS_TYPEMASK <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov edx,wParam <br>

⌨️ 快捷键说明

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