Уроки Iczelion'а




Урок 19. Tree View Control - часть 10


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 [edi].hdr.code==TVN_BEGINDRAG invoke

SendMessage,hwndTreeView,TVM_CREATEDRAGIMAGE,0,[edi].itemNew.hItem mov hDragImageList,eax invoke ImageList_BeginDrag,hDragImageList,0,0,0 invoke

ImageList_DragEnter,hwndTreeView,[edi].ptDrag.x,[edi].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

Анализ:

Внутри обработчика WM_CREATE вы создаете контрол tree view.

invoke CreateWindowEx,NULL,ADDR TreeViewClass,NULL,\ WS_CHILD+WS_VISIBLE+TVS_HASLINES+TVS_HASBUTTONS+\ TVS_LINESATROOT,0,\ 0,200,400,hWnd,NULL,\ hInstance,NULL

Обратите внимание на стили. TVS_xxxx - это стили, присущие tree view.

invoke ImageList_Create,16,16,ILC_COLOR16,2,10 mov hImageList,eax invoke LoadBitmap,hInstance,IDB_TREE mov hBitmap,eax invoke ImageList_Add,hImageList,hBitmap,NULL invoke DeleteObject,hBitmap invoke SendMessage,hwndTreeView,TVM_SETIMAGELIST,0,hImageList

Затем вы создаете пустой image list, который будет принимать изображения размером 16x16 пикселей и с глубиной цвета 16 бит. Вначале он будет содержать 2 изображения, но будет расширен до 10, если это потребуется. Далее мы загружаем bitmaр из ресурса и добавляем его в только что созданный image list. После этого мы удаляем хэндл битмапа, так как он больше нам не нужен. Как только image list готов, мы ассоциируем его с tree view, посылая ему TVM_SETIMAGELIST.




Содержание  Назад  Вперед