From 782efcdeb10eba2a952951026fe5a1fecae45d4f Mon Sep 17 00:00:00 2001 From: zhongyang219 Date: Thu, 29 Jan 2026 09:49:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3ScrollArea=E4=B8=AD=E7=9A=84L?= =?UTF-8?q?istElement=E7=9A=84=E7=BB=98=E5=9B=BE=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E4=BC=9A=E8=B6=85=E5=87=BAScrollArea=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MusicPlayer2/UIElement/AbstractListElement.cpp | 14 ++++++++++++-- MusicPlayer2/UIPanel/TestPanel.cpp | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/MusicPlayer2/UIElement/AbstractListElement.cpp b/MusicPlayer2/UIElement/AbstractListElement.cpp index fc0473ae..2c021dc0 100644 --- a/MusicPlayer2/UIElement/AbstractListElement.cpp +++ b/MusicPlayer2/UIElement/AbstractListElement.cpp @@ -11,7 +11,17 @@ void UiElement::AbstractListElement::DrawScrollArea() { - DrawAreaGuard guard(&ui->GetDrawer(), rect); + //设置绘图剪辑区域。如果父节点有ScrollArea元素,则需要将绘图区域限制在ScrallArea中 + CRect clip_rect = rect; + Element* ele = GetParent(); + while (ele != nullptr) + { + if (dynamic_cast(ele) != nullptr) + clip_rect &= ele->GetRect(); + ele = ele->GetParent(); + } + + DrawAreaGuard guard(&ui->GetDrawer(), clip_rect); if (GetRowCount() <= 0) { @@ -231,7 +241,7 @@ void UiElement::AbstractListElement::DrawScrollArea() //绘制文本 if (!draw_mini_spectrum || j > 0)//如果第1列绘制了迷你频谱,则不再绘制文本 { - DrawAreaGuard guard(&ui->GetDrawer(), rect & rect_text); + DrawAreaGuard guard(&ui->GetDrawer(), clip_rect & rect_text); if (!IsMultipleSelected() && i == GetItemSelected() && j == GetColumnScrollTextWhenSelected()) ui->GetDrawer().DrawScrollText(rect_text, display_name.c_str(), ui->GetUIColors().color_text, ui->GetScrollTextPixel(), false, selected_item_scroll_info, false, true); else diff --git a/MusicPlayer2/UIPanel/TestPanel.cpp b/MusicPlayer2/UIPanel/TestPanel.cpp index acec7b22..3a5d870e 100644 --- a/MusicPlayer2/UIPanel/TestPanel.cpp +++ b/MusicPlayer2/UIPanel/TestPanel.cpp @@ -36,6 +36,7 @@ CTestPanel::CTestPanel(CPlayerUIBase* ui) m_combobox1->SetCurSel(0); m_tip_info_text = m_root_element->FindElement("tipInfoText"); + m_list1 = m_root_element->FindElement("list1"); if (m_list1 != nullptr) { m_list1 = m_root_element->FindElement("list1");