首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 組合語言

Windows 樹狀檢視控制項 (TreeView) 完整開發指南

     編輯:組合語言

建立與基本樣式

  • 類別名:SysTreeView32,需先 InitCommonControls
  • 常用樣式:TVS_HASBUTTONS (展開/收合 ±)、TVS_HASLINES (連接線)、TVS_LINESATROOT (根節點也顯示線/按鈕)

訊息機制

  • 應用程式送 TVM_* 訊息控制控制項
  • 控制項送 WM_NOTIFY (含 NMHDR + 擴充結構) 通知父視窗,代碼以 TVN_* 開頭

插入項目:TVM_INSERTITEM + TV_INSERTSTRUCT

hParent      = 父項目控制代碼 (TVI_ROOT/NULL 表根節點)
hInsertAfter = TVI_FIRST/TVI_LAST/TVI_SORT
item.imask   = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE ...
item.pszText = 項目標籤字串指標
item.iImage  = 圖示索引 (未選取)
item.iSelectedImage = 圖示索引 (選取)

圖示列表整合

  1. ImageList_Create(cx, cy, flags, cInitial, cGrow) → 取得 HIMAGELIST
  2. LoadBitmap 從資源載入點陣圖
  3. ImageList_Add(himl, hbm, NULL) 加入圖示 (自動按寬高切割)
  4. DeleteObject(hbm) 釋放點陣圖
  5. SendMessage(hwndTV, TVM_SETIMAGELIST, TVSIL_NORMAL, himl) 關聯

取得項目資訊:TVM_GETITEM + TVM_GETNEXTITEM

  • TVM_GETITEM 需預設 TVITEM.imask 與 hItem
  • TVM_GETNEXTITEM 旗標:TVGN_CARET (焦點)、TVGN_CHILD、TVGN_DROPHILITE (拖放目標)、TVGN_ROOT、TVGN_NEXT/PREVIOUS 等

拖放操作完整流程 (TVN_BEGINDRAG 起手)

  1. TVN_BEGINDRAG:TVM_CREATEDRAGIMAGE 產生拖放專用圖示列表 → ImageList_BeginDrag(hDrag, 0, 0, 0) 設熱點 → ImageList_DragEnter(hwndTV, x, y) 顯示 → SetCapture(hwnd) 捕捉滑鼠
  2. WM_MOUSEMOVE:ImageList_DragMove(x,y) 更新位置 → ImageList_DragShowNolock(FALSE) 隱藏拖放圖示 → TVM_HITTEST 檢測目標項目 → 若命中 TVM_SELECTITEM(TVGN_DROPHILITE, hItem) 高亮 → ImageList_DragShowNolock(TRUE) 恢復
  3. WM_LBUTTONUP:ImageList_DragLeave/DragEnd/Destroy 清理 → TVM_GETNEXTITEM(TVGN_DROPHILITE) 取得目標 → TVM_SELECTITEM(TVGN_CARET) 正式選取 → TVM_SELECTITEM(TVGN_DROPHILITE, 0) 取消高亮 → ReleaseCapture

完整 MASM32 範例程式碼

原文提供完整可編譯範例:建立視窗、TreeView、ImageList、插入根/子節點、處理 WM_NOTIFY/WM_MOUSEMOVE/WM_LBUTTONUP 實現拖放,註解詳盡。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved