方丈 发表于 2012-3-11 21:34:36

整段代码,能看懂的站内联系,交流学习

.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\comctl32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\comctl32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
.const
IDB_TREE equ 4006                ; ID of the bitmap resource
.data
ClassNamedb "TreeViewWinClass",0
AppName    db "Tree View Demo",0
TreeViewClassdb "SysTreeView32",0
Parentdb "Parent Item",0
Child1db "child1",0
Child2db "child2",0
DragModedd FALSE                ; a flag to determine if we are in drag mode

.data?
hInstanceHINSTANCE ?
hwndTreeView dd ?            ; handle of the tree view control
hParentdd ?                        ; handle of the root tree view item
hImageList dd ?                  ; handle of the image list used in the tree view control
hDragImageListdd ?      ; handle of the image list used to store the drag image

.code
start:
    invoke GetModuleHandle, NULL
    mov    hInstance,eax
    invoke WinMain, hInstance,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
    mov   wc.lpfnWndProc, OFFSET WndProc
    mov   wc.cbClsExtra,NULL
    mov   wc.cbWndExtra,NULL
    pushhInst
    pop   wc.hInstance
    mov   wc.hbrBackground,COLOR_APPWORKSPACE
    mov   wc.lpszMenuName,NULL
    mov   wc.lpszClassName,OFFSET ClassName
    invoke LoadIcon,NULL,IDI_APPLICATION
    mov   wc.hIcon,eax
    mov   wc.hIconSm,eax
    invoke LoadCursor,NULL,IDC_ARROW
    mov   wc.hCursor,eax
    invoke RegisterClassEx, addr wc
    invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR ClassName,ADDR AppName,\         WS_OVERLAPPED+WS_CAPTION+WS_SYSMENU+WS_MINIMIZEBOX+WS_MAXIMIZEBOX+WS_VISIBLE,CW_USEDEFAULT,\
         CW_USEDEFAULT,200,400,NULL,NULL,\
         hInst,NULL
    mov   hwnd,eax
    .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 uses edi hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    LOCAL tvinsert:TV_INSERTSTRUCT
    LOCAL hBitmap:DWORD
    LOCAL tvhit:TV_HITTESTINFO
    .if uMsg==WM_CREATE
      invoke CreateWindowEx,NULL,ADDR TreeViewClass,NULL,\
            WS_CHILD+WS_VISIBLE+TVS_HASLINES+TVS_HASBUTTONS+TVS_LINESATROOT,0,\
            0,200,400,hWnd,NULL,\
            hInstance,NULL            ; Create the tree view control
      mov hwndTreeView,eax
      invoke ImageList_Create,16,16,ILC_COLOR16,2,10    ; create the associated image list
      mov hImageList,eax
      invoke LoadBitmap,hInstance,IDB_TREE      ; load the bitmap from the resource
      mov hBitmap,eax
      invoke ImageList_Add,hImageList,hBitmap,NULL    ; Add the bitmap into the image list
      invoke DeleteObject,hBitmap    ; always delete the bitmap resource
      invoke SendMessage,hwndTreeView,TVM_SETIMAGELIST,0,hImageList
      mov tvinsert.hParent,NULL
      mov tvinsert.hInsertAfter,TVI_ROOT
      mov tvinsert.item.imask,TVIF_TEXT+TVIF_IMAGE+TVIF_SELECTEDIMAGE
      mov tvinsert.item.pszText,offset Parent
      mov tvinsert.item.iImage,0
      mov tvinsert.item.iSelectedImage,1
      invoke SendMessage,hwndTreeView,TVM_INSERTITEM,0,addr tvinsert
      mov hParent,eax
      mov tvinsert.hParent,eax
      mov tvinsert.hInsertAfter,TVI_LAST
      mov tvinsert.item.pszText,offset Child1
      invoke SendMessage,hwndTreeView,TVM_INSERTITEM,0,addr tvinsert
      mov tvinsert.item.pszText,offset Child2
      invoke SendMessage,hwndTreeView,TVM_INSERTITEM,0,addr tvinsert
    .elseif uMsg==WM_MOUSEMOVE
      .if DragMode==TRUE
            mov eax,lParam
            and eax,0ffffh
            mov ecx,lParam
            shr ecx,16
            mov tvhit.pt.x,eax
            mov tvhit.pt.y,ecx
            invoke ImageList_DragMove,eax,ecx
            invoke ImageList_DragShowNolock,FALSE
            invoke SendMessage,hwndTreeView,TVM_HITTEST,NULL,addr tvhit
            .if eax!=NULL
                invoke SendMessage,hwndTreeView,TVM_SELECTITEM,TVGN_DROPHILITE,eax
            .endif
            invoke ImageList_DragShowNolock,TRUE
      .endif
    .elseif uMsg==WM_LBUTTONUP
      .if DragMode==TRUE
            invoke ImageList_DragLeave,hwndTreeView
            invoke ImageList_EndDrag
            invoke ImageList_Destroy,hDragImageList
            invoke SendMessage,hwndTreeView,TVM_GETNEXTITEM,TVGN_DROPHILITE,0
            invoke SendMessage,hwndTreeView,TVM_SELECTITEM,TVGN_CARET,eax
            invoke SendMessage,hwndTreeView,TVM_SELECTITEM,TVGN_DROPHILITE,0
            invoke ReleaseCapture
            mov DragMode,FALSE
      .endif
    .elseif uMsg==WM_NOTIFY
      mov edi,lParam
      assume edi:ptr NM_TREEVIEW
      .if .hdr.code==TVN_BEGINDRAG
            invoke SendMessage,hwndTreeView,TVM_CREATEDRAGIMAGE,0,.itemNew.hItem
            mov hDragImageList,eax
            invoke ImageList_BeginDrag,hDragImageList,0,0,0
            invoke ImageList_DragEnter,hwndTreeView,.ptDrag.x,.ptDrag.y
            invoke SetCapture,hWnd
            mov DragMode,TRUE
      .endif
      assume edi:nothing
    .elseif uMsg==WM_DESTROY
      invoke PostQuitMessage,NULL
    .else
      invoke DefWindowProc,hWnd,uMsg,wParam,lParam
      ret
    .endif
    xor eax,eax
    ret
WndProc endp
end start

nichkhun 发表于 2012-3-13 06:06:10

居然学神语…
佩服…

刺骨之剑 发表于 2012-3-13 08:19:45

之认识几个单词:D

小青年 发表于 2012-3-13 21:32:16

求教这个是什么:dizzy:

东风异客 发表于 2012-3-13 22:31:18

windows下的汇编刚熟悉,暂时还看不懂。。。

lingdaoren 发表于 2012-12-18 19:51:48

是一个教你做下拉框的 代码例程
页: [1]
查看完整版本: 整段代码,能看懂的站内联系,交流学习