首先说明,我的计划太大,我希望重新封装所有的标准控件和全部API,这样一个人力量是不够的,所以在这里我想说我真心希望有MASM的FANS联系我(QQ:318493),大家一起发力完成这个伟大的类库,打垮恶心的mfc,对mfc我真的很看不惯
;================================codes by guokeno1================================;
.386
.model flat,stdcall
option casemap:none
include d:/masm32/oop/jeffoop/oop.inc
include d:/masm32/include/windows.inc
include d:/masm32/include/kernel32.inc
includelib d:/masm32/lib/kernel32.lib
include d:/masm32/include/user32.inc
includelib d:/masm32/lib/user32.lib
include d:/MASM32/include/comctl32.inc
includelib d:/masm32/lib/comctl32.lib
include D:/MASM32/include/shell32.inc
INCLUDELIB D:/MASM32/lib/shell32.lib
include D:/masm32/oop/jeffoop/simplewindow/simplewindow.inc
include d:/masm32/oop/jeffoop/include/icon.inc
CLASS ALISTVIEW
METHOD ALISTVIEW_init,HPARENT
METHOD ALISTVIEW_release
@HWND MEMBER ?
@HPARENT MEMBER ?
@HIMAGELIST MEMBER ?
@LEFT MEMBER ?
@TOP MEMBER ?
@WIDTH MEMBER ?
@HEIGHT MEMBER ?
@VIEWMODE MEMBER ?
@BACKCOLOR MEMBER ?
@FONTCOLOR MEMBER ?
@SICONLIST MEMBER ?
@LICONLIST MEMBER ?
METHOD BUILDLISTVIEW,MODE
METHOD SETVIEW,MODE
METHOD INSERTCOLUMN,LPCOLUMNNAME,ISUBCOLUMN,CWIDTH,CALIGNMENT
METHOD INSERTITEM,LPITEMNAME,IITEM,ISUBITEM,HIMAGE
METHOD UPDATALPARAM
METHOD REMOVEITEM,LPITEMNAME
METHOD MODIFYITEM,LPITEMNAME,IITEM,ISUBITEM,HIMAGE
METHOD SEARCHITEM,LPITEMNAME,@START
METHOD SETFOCUS,IITEM
METHOD SORT,ISUBITEM,SORTPROC
VIRTUAL V_SORTPROC
ALISTVIEW ENDC
.data
hProcess dd ?
lpWindow dd ?
lpListView dd ?
.code
include D:/masm32/oop/jeffoop/simplewindow/simplewindow.asm
include d:/masm32/oop/jeffoop/asm/icon.asm
;================================codes for AWINDOW================================;
ALISTVIEW_SORTPROC PROC USES EBX EDI ESI LPARAM1:DWORD,LPARAM2:DWORD,_LPARAM:DWORD;NOT COMPLETEED
LOCAL NAME1[256]:BYTE
LOCAL NAME2[256]:BYTE
LOCAL LVI:LV_ITEM
invoke RtlZeroMemory,ADDR NAME1,256
invoke RtlZeroMemory,ADDR NAME2,256
MOV EBX,lpListView
GETCLASS ALISTVIEW
mov LVI.imask,LVIF_TEXT
LEA EAX,NAME1
MOV LVI.pszText,EAX
MOV LVI.cchTextMax,255
mov eax,LPARAM1
MOV LVI.iItem,eax
MOV EAX,_LPARAM
MOV LVI.iSubItem,eax
invoke SendMessage,[EBX].@HWND,LVM_GETITEM,0,addr LVI
LEA EAX,NAME2
MOV LVI.pszText,EAX
MOV EAX,LPARAM2
MOV LVI.iItem,EAX
invoke SendMessage,[EBX].@HWND,LVM_GETITEM,0,addr LVI
invoke lstrcmp,addr NAME1,addr NAME2
RELEASECLASS
RET
ALISTVIEW_SORTPROC ENDP
AWINDOW_WNDPROCA PROC hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
local _HICON:DWORD
.IF uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
.ELSEIF uMsg==WM_CREATE
NEW AIMAGE
GETCLASS AIMAGE
EXERT ICONFROMFILE,STRINGA("TEST.ICO")
MOV _HICON,EAX
DEL AIMAGE,EBX
RELEASECLASS
NEW ALISTVIEW,hWnd
MOV lpListView,ebx
GETCLASS ALISTVIEW
MOV [EBX].@LEFT,100
MOV [EBX].@TOP,100
MOV [EBX].@WIDTH,200
MOV [EBX].@HEIGHT,200
EXERT BUILDLISTVIEW,LVS_REPORT
EXERT SETVIEW,LVS_ICON
EXERT INSERTCOLUMN,STRINGA("TALENT"),0,80,LVCFMT_CENTER
EXERT INSERTCOLUMN,STRINGA("FOOL"),1,80,LVCFMT_CENTER
EXERT INSERTITEM,STRINGA("JEFF"),0,-1,_HICON
EXERT INSERTITEM,STRINGA("GUOKE"),0,1,0
EXERT INSERTITEM,STRINGA("BUDISM"),1,-1,_HICON
EXERT INSERTITEM,STRINGA("RAYWILL"),1,1,0
EXERT SETFOCUS,0
EXERT SETFOCUS,1
EXERT SORT,0,OFFSET ALISTVIEW_SORTPROC
PUSH EBX
NEW AIMAGE
GETCLASS AIMAGE
EXERT ICONFROMFILE,STRINGA("APP.ICO")
RELEASECLASS
MOV EDI,EBX
$EDI AIMAGE
POP EBX
GETCLASS ALISTVIEW
EXERT SEARCHITEM,STRINGA("BUDISM"),0
EXERT MODIFYITEM,STRINGA("STUDY MACHINE"),EAX,0,[EDI].@HANDLE
DEL AIMAGE,EDI
@EDI
RELEASECLASS
.ELSE
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.ENDIF
xor eax,eax
ret
AWINDOW_WNDPROCA ENDP
;================================codes for ALISTVIEW================================;
ALISTVIEW_BUILDLISTVIEW PROC USES EBX EDI ESI MODE:DWORD
LOCAL sfi:SHFILEINFO
GETCLASS ALISTVIEW
MOV EDX,MODE
OR EDX,WS_CHILD OR WS_VISIBLE OR LVS_SHAREIMAGELISTS
INVOKE CreateWindowEx, WS_EX_CLIENTEDGE,STRINGA("SysListView32"),NULL,/
EDX,[EBX].@LEFT,[EBX].@TOP,[EBX].@WIDTH,[EBX].@HEIGHT,[EBX].@HPARENT,NULL,hProcess,NULL
MOV [EBX].@HWND,EAX
MOV EAX,MODE
MOV [EBX].@VIEWMODE,EAX
mov eax,LVS_EX_FULLROWSELECT or LVS_EX_HEADERDRAGDROP or LVS_EX_SUBITEMIMAGES or LVS_EX_GRIDLINES
INVOKE SendMessage,[ebx].@HWND, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, eax
INVOKE SHGetFileInfo,STRINGA("C:/"), 0, addr sfi, sizeof SHFILEINFO,SHGFI_SYSICONINDEX or SHGFI_ICON
mov [EBX].@LICONLIST, eax
INVOKE SHGetFileInfo,STRINGA("C:/"), 0, addr sfi, sizeof SHFILEINFO,SHGFI_SYSICONINDEX or SHGFI_SMALLICON
mov [EBX].@SICONLIST, eax
INVOKE SendMessage,[ebx].@HWND, LVM_SETIMAGELIST, LVSIL_NORMAL,[EBX].@LICONLIST
INVOKE SendMessage,[ebx].@HWND,LVM_SETIMAGELIST,LVSIL_SMALL,[EBX].@SICONLIST
RELEASECLASS
RET
ALISTVIEW_BUILDLISTVIEW ENDP
ALISTVIEW_SETVIEW PROC USES EBX EDI ESI MODE:DWORD
GETCLASS ALISTVIEW
invoke GetWindowLong,[EBX].@HWND,GWL_STYLE
and eax,not LVS_TYPEMASK
mov ecx,MODE
.IF ECX!=LVS_ICON && ECX!=LVS_SMALLICON && ECX!=LVS_LIST && ECX!=LVS_REPORT
MOV EAX,0
RET
.ENDIF
OR EAX,MODE
INVOKE SetWindowLong,[ebx].@HWND,GWL_STYLE,eax
PUSH MODE
POP [EBX].@VIEWMODE
RELEASECLASS
RET
ALISTVIEW_SETVIEW ENDP
ALISTVIEW_INSERTITEM PROC USES EBX EDI ESI LPITEMNAME:DWORD,IITEM:DWORD,ISUBITEM:DWORD,HIMAGE:DWORD
LOCAL lvi:LV_ITEM
GETCLASS ALISTVIEW
MOV EAX,IITEM
MOV lvi.lParam,EAX
MOV lvi.iItem,eax
mov eax,ISUBITEM
mov lvi.iSubItem,eax
mov eax,LPITEMNAME
MOV lvi.pszText,eax
MOV EDX,LVIF_TEXT or LVIF_PARAM
.IF HIMAGE!=0
OR EDX,LVIF_IMAGE
MOV EAX,HIMAGE
MOV lvi.iImage,EAX
.ELSE
MOV lvi.iImage,-1
.ENDIF
mov lvi.imask,edx
.IF ISUBITEM==-1
MOV lvi.iSubItem,0
INVOKE SendMessage,[ebx].@HWND,LVM_INSERTITEM,0,addr lvi
.ELSE
mov lvi.imask, LVIF_TEXT
INVOKE SendMessage,[ebx].@HWND,LVM_SETITEM,0,addr lvi
.ENDIF
EXERT UPDATALPARAM
RELEASECLASS
RET
ALISTVIEW_INSERTITEM ENDP
ALISTVIEW_UPDATALPARAM PROC USES EBX EDI ESI
LOCAL LVI:LV_ITEM
GETCLASS ALISTVIEW
invoke SendMessage,[EBX].@HWND,LVM_GETITEMCOUNT,0,0
.if eax==0
ret
.endif
dec eax
xor ecx,ecx
.repeat
MOV LVI.imask,LVIF_PARAM
MOV LVI.lParam,ecx
mov LVI.iItem,ecx
mov LVI.iSubItem,0
PUSH EAX
PUSH ECX
invoke SendMessage,[EBX].@HWND,LVM_SETITEM,0,ADDR LVI
POP ECX
POP EAX
INC ECX
.UNTIL ecx>eax
RELEASECLASS
RET
ALISTVIEW_UPDATALPARAM ENDP
ALISTVIEW_INSERTCOLUMN PROC USES EBX EDI ESI LPCOLUMNNAME:DWORD,ISUBCOLUMN:DWORD,CWIDTH:DWORD,CALIGNMENT:DWORD
LOCAL lvc:LV_COLUMN
GETCLASS ALISTVIEW
mov EAX,LVCF_TEXT or LVCF_WIDTH or LVCF_FMT or LVCF_SUBITEM
MOV lvc.imask,eax
MOV EAX,LPCOLUMNNAME
mov lvc.pszText,EAX
MOV EAX,CWIDTH
mov lvc.lx,EAX
MOV EAX,CALIGNMENT
MOV lvc.fmt,EAX
mov eax,ISUBCOLUMN
mov lvc.iSubItem,eax
INVOKE SendMessage, [EBX].@HWND, LVM_INSERTCOLUMN,ISUBCOLUMN, addr lvc
RELEASECLASS
RET
ALISTVIEW_INSERTCOLUMN ENDP
ALISTVIEW_release proc uses ebx edi esi
mov eax,1
ret
ALISTVIEW_release endp
ALISTVIEW_SEARCHITEM PROC USES EBX EDI ESI LPITEMNAME:DWORD,@START:DWORD
LOCAL LVF:LVFINDINFO
GETCLASS ALISTVIEW
MOV LVF.flags,LVFI_STRING
MOV EAX,LPITEMNAME
MOV LVF.psz,EAX
LEA EAX,LVF
invoke SendMessage,[EBX].@HWND,LVM_FINDITEM,@START,EAX
RELEASECLASS
RET
ALISTVIEW_SEARCHITEM ENDP
ALISTVIEW_REMOVEITEM PROC USES EBX EDI ESI LPITEMNAME:DWORD
GETCLASS ALISTVIEW
EXERT SEARCHITEM,LPITEMNAME,0
.IF EAX!=-1
INVOKE SendMessage,[EBX].@HWND,LVM_DELETEITEM,EAX,0
EXERT UPDATALPARAM
.ENDIF
RELEASECLASS
RET
ALISTVIEW_REMOVEITEM ENDP
ALISTVIEW_MODIFYITEM PROC USES EBX EDI ESI LPITEMNAME:DWORD,IITEM:DWORD,ISUBITEM:DWORD,HIMAGE:DWORD
LOCAL LVI:LV_ITEM
INVOKE RtlZeroMemory,ADDR LVI,SIZEOF LVI
GETCLASS ALISTVIEW
.IF LPITEMNAME!=0
PUSH LPITEMNAME
POP LVI.pszText
OR LVI.imask,LVIF_TEXT
.ENDIF
.IF HIMAGE!=-1 && ISUBITEM==0
OR LVI.imask,LVIF_IMAGE
PUSH HIMAGE
POP LVI.iImage
.ENDIF
.IF ISUBITEM!=-1
PUSH ISUBITEM
POP LVI.iSubItem
.ENDIF
invoke SendMessage,[ebx].@HWND,LVM_SETITEM,0,ADDR LVI
RELEASECLASS
RET
ALISTVIEW_MODIFYITEM ENDP
ALISTVIEW_SETFOCUS PROC USES EBX EDI ESI IITEM:DWORD
LOCAL LVI:LVITEM
INVOKE RtlZeroMemory,ADDR LVI,SIZEOF LVI
GETCLASS ALISTVIEW
MOV LVI.imask,LVIF_STATE
MOV LVI.state,LVIS_SELECTED
MOV LVI.stateMask,LVIS_SELECTED
MOV EAX,IITEM
MOV LVI.iItem,EAX
MOV LVI.iSubItem,0
invoke SendMessage,[ebx].@HWND,LVM_SETITEMSTATE,IITEM,addr LVI
invoke SetFocus,[ebx].@HWND
RELEASECLASS
RET
ALISTVIEW_SETFOCUS ENDP
ALISTVIEW_SORT PROC USES EDI ESI EBX ISUBITEM:DWORD,SORTPROC:DWORD
GETCLASS ALISTVIEW
OVERRIDE V_SORTPROC,SORTPROC
invoke SendMessage,[ebx].@HWND,LVM_SORTITEMS,ISUBITEM,[EBX].V_SORTPROC
EXERT UPDATALPARAM
RELEASECLASS
RET
ALISTVIEW_SORT ENDP
ALISTVIEW_init PROC uses ebx edi esi HPARENT:DWORD
GETCLASS ALISTVIEW
INVOKE RtlZeroMemory,ebx,sizeof ALISTVIEW
MOV EAX,HPARENT
MOV [EBX].@HPARENT,EAX
MOV EAX,ALISTVIEW_BUILDLISTVIEW
MOV [EBX].BUILDLISTVIEW,EAX
MOV EAX,ALISTVIEW_SETVIEW
MOV [EBX].SETVIEW,EAX
MOV EAX,ALISTVIEW_INSERTCOLUMN
MOV [EBX].INSERTCOLUMN,EAX
MOV EAX,ALISTVIEW_INSERTITEM
MOV [EBX].INSERTITEM,EAX
MOV EAX,ALISTVIEW_MODIFYITEM
MOV [EBX].MODIFYITEM,EAX
MOV EAX,ALISTVIEW_UPDATALPARAM
MOV [EBX].UPDATALPARAM,EAX
MOV EAX,ALISTVIEW_SEARCHITEM
MOV [EBX].SEARCHITEM,EAX
MOV EAX,ALISTVIEW_SORT
MOV [EBX].SORT,EAX
mov eax,ALISTVIEW_SETFOCUS
MOV [EBX].SETFOCUS,EAX
mov eax,ALISTVIEW_release
mov [ebx].ALISTVIEW_release,eax
RET
RELEASECLASS
RET
ALISTVIEW_init endp
;================================function main====================================;
MAIN:
invoke GetModuleHandle,0
MOV hProcess,EAX
INVOKE InitCommonControls
NEW AWINDOW,STRINGA("WINDOW WITH LISTVIEW"),STRINGA("LISTVIEW CLASS")
MOV lpWindow,EBX
GETCLASS AWINDOW
OVERRIDE V_WNDPROC,AWINDOW_WNDPROCA
MOV [EBX].@LEFT,CW_USEDEFAULT
MOV [EBX].@TOP,CW_USEDEFAULT
MOV [EBX].@WIDTH,CW_USEDEFAULT
MOV [EBX].@HEIGHT,CW_USEDEFAULT
EXERT BUILDWINDOW,0,SW_SHOWDEFAULT
RELEASECLASS
invoke ExitProcess,0
END MAIN