From ba50ece48a4b95563031f1dacffd3e04f89d952f Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期四, 21 八月 2025 05:25:41 +0800
Subject: [PATCH] 1.完善可折叠列表;
---
SourceCode/Bond/Servo/CExpandableListCtrl.h | 17 ++++----
SourceCode/Bond/Servo/CControlJobDlg.cpp | 10 +----
SourceCode/Bond/Servo/CExpandableListCtrl.cpp | 43 ++++++++++++++++-----
3 files changed, 44 insertions(+), 26 deletions(-)
diff --git a/SourceCode/Bond/Servo/CControlJobDlg.cpp b/SourceCode/Bond/Servo/CControlJobDlg.cpp
index a438bfa..77311e8 100644
--- a/SourceCode/Bond/Servo/CControlJobDlg.cpp
+++ b/SourceCode/Bond/Servo/CControlJobDlg.cpp
@@ -39,12 +39,6 @@
{
CDialogEx::OnInitDialog();
- DWORD dwStyle = m_listCtrl.GetExtendedStyle();
- dwStyle |= LVS_EX_FULLROWSELECT;
- dwStyle |= LVS_EX_GRIDLINES;
- dwStyle |= LVS_EX_DOUBLEBUFFER;
- m_listCtrl.SetExtendedStyle(dwStyle);
-
HIMAGELIST imageList = ImageList_Create(24, 24, ILC_COLOR24, 1, 1);
ListView_SetImageList(m_listCtrl.GetSafeHwnd(), imageList, LVSIL_SMALL);
@@ -64,8 +58,8 @@
m_listCtrl.InsertChild(ch21, { _T("SubStep A2"), _T("Run"), _T("Bond") });
// 鍒濆璁╅《灞傚睍寮�
- //root1->expanded = true;
- //root2->expanded = true;
+ root1->expanded = true;
+ root2->expanded = true;
m_listCtrl.RebuildVisible();
diff --git a/SourceCode/Bond/Servo/CExpandableListCtrl.cpp b/SourceCode/Bond/Servo/CExpandableListCtrl.cpp
index 00bdf28..11470ce 100644
--- a/SourceCode/Bond/Servo/CExpandableListCtrl.cpp
+++ b/SourceCode/Bond/Servo/CExpandableListCtrl.cpp
@@ -19,16 +19,18 @@
// 鎶ヨ〃椋庢牸鍒椾妇渚�
SetExtendedStyle(GetExtendedStyle()
- | LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP | LVS_EX_GRIDLINES);
-
- // 绀轰緥鍒楋紙鍙湪澶栭儴璁剧疆锛�
- if (GetHeaderCtrl() == nullptr || GetHeaderCtrl()->GetItemCount() == 0) {
- InsertColumn(0, _T("鍚嶇О"), LVCFMT_LEFT, 260);
- InsertColumn(1, _T("鐘舵��"), LVCFMT_LEFT, 120);
- InsertColumn(2, _T("鎻忚堪"), LVCFMT_LEFT, 260);
- }
+ | LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP | LVS_EX_GRIDLINES | LVS_EX_DOUBLEBUFFER);
return 0;
+}
+
+void CExpandableListCtrl::PreSubclassWindow()
+{
+ // 鎶ヨ〃椋庢牸鍒椾妇渚�
+ SetExtendedStyle(GetExtendedStyle()
+ | LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP | LVS_EX_GRIDLINES | LVS_EX_DOUBLEBUFFER);
+
+ CListCtrl::PreSubclassWindow();
}
CExpandableListCtrl::Node* CExpandableListCtrl::InsertRoot(const std::vector<CString>& cols)
@@ -273,6 +275,29 @@
CString txt0 = n->cols.empty() ? _T("") : n->cols[0];
pDC->DrawText(txt0, textRc, DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX | DT_END_ELLIPSIS);
+
+ // 鈥斺�� 鐢诲畬涓夎涓庢枃鏈箣鍚庯紝琛ヤ竴鏉¤琛岀殑搴曢儴妯悜缃戞牸绾� 鈥斺��
+ // 浠呭綋寮�鍚簡 LVS_EX_GRIDLINES 鎵嶇粯鍒�
+ if (GetExtendedStyle() & LVS_EX_GRIDLINES)
+ {
+ // 鐢ㄦ暣琛� bounds锛屼繚璇佹í绾胯疮绌挎墍鏈夊垪鐨勫彲瑙佸搴�
+ CRect rcRow;
+ GetSubItemRect(row, 0, LVIR_BOUNDS, rcRow);
+
+ // 搴曡竟 y 鍧愭爣锛堜笌绯荤粺缃戞牸绾垮榻愶級
+ const int y = rcRow.bottom - 1;
+
+ // 棰滆壊涓庣郴缁熼鏍兼帴杩戯紱鑻ヨ寰楀亸娴咃紝鍙崲 COLOR_3DSHADOW
+ CPen pen(PS_SOLID, 1, GetSysColor(COLOR_3DLIGHT));
+ CPen* oldPen = pDC->SelectObject(&pen);
+
+ // 妯嚎浠庤宸﹀埌琛屽彸锛堝綋鍓嶅彲瑙佸尯鍩燂級
+ pDC->MoveTo(rcRow.left, y);
+ pDC->LineTo(rcRow.right, y);
+
+ pDC->SelectObject(oldPen);
+ }
+
*pResult = CDRF_SKIPDEFAULT;
return;
}
@@ -286,5 +311,3 @@
*pResult = CDRF_DODEFAULT;
}
-
-
diff --git a/SourceCode/Bond/Servo/CExpandableListCtrl.h b/SourceCode/Bond/Servo/CExpandableListCtrl.h
index d4ecb51..57d606d 100644
--- a/SourceCode/Bond/Servo/CExpandableListCtrl.h
+++ b/SourceCode/Bond/Servo/CExpandableListCtrl.h
@@ -35,23 +35,24 @@
// 便捷:通过可见行号取 Node*
Node* GetNodeByVisibleIndex(int i) const;
+private:
+ void appendVisible(Node* n);
+ CRect expanderRectForRow(int row) const; // 首列展开按钮区域
+ virtual void PreSubclassWindow();
+
protected:
// 消息
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnClick(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult);
-
DECLARE_MESSAGE_MAP()
private:
- std::vector<std::unique_ptr<Node>> m_roots; // 顶层节点
- std::vector<Node*> m_visible; // 展开后的可见节点顺序
- int m_expanderPadding = 6; // 首列内侧边距
- int m_expanderSize = 10; // 小三角/方块大小
+ std::vector<std::unique_ptr<Node>> m_roots; // 顶层节点
+ std::vector<Node*> m_visible; // 展开后的可见节点顺序
+ int m_expanderPadding = 6; // 首列内侧边距
+ int m_expanderSize = 10; // 小三角/方块大小
int m_textGap = 6;
-
- void appendVisible(Node* n);
- CRect expanderRectForRow(int row) const; // 首列展开按钮区域
};
--
Gitblit v1.9.3