簡體   English   中英

如何在ListView控件頭上復制Windows資源管理器列篩選

[英]How to replicate Windows Explorer column filtering on ListView control header

我試圖在ListView控件上實現列過濾(通過pinvoke實現Windows Forms / c#/ win32),就像Windows資源管理器一樣。 對於那些在使用之前沒有使用它的人看起來像這樣:

在此輸入圖像描述

將鼠標懸停在列標題上時,會出現一個下拉箭頭,單擊下拉列表會顯示一個帶有各種過濾選項的上下文菜單。 選擇選項后,箭頭圖像將變為始終可見的刻度標記圖像,如下所示: 在此輸入圖像描述

我通過向ListView發送HDM_SETITEM消息並指定了HDF_SPLITBUTTON格式標志來顯示下拉箭頭。 我也可以顯示過濾菜單。

我遇到的問題是我無法想象如何顯示“刻度”圖像。 除了訴諸使用所有者繪圖,這真的看起來像是一種矯枉過正。 我已經瀏覽了ListView和Header控件的API文檔,似乎沒有任何Windows消息可以發送來更改圖像。

為了解決這個問題,我嘗試使用標題圖像來指示過濾處於活動狀態,但根據HDITEM文檔,您無法在HDF_IMAGEHDF_BITMAP的同時使用HDF_SORTUPHDF_SORTDOWN 然后我創建了新的圖像以指示排序和過濾狀態,但現在我的所有ListView項目都按列標題圖像的大小縮進(似乎是c# ListView控件的已知問題)。

我找到了一些看起來很有希望的東西: BCM_SETSPLITINFO允許你設置分割按鈕的字形。 但是我有一個ListView標題,而不是一個拆分按鈕,除非標題有子窗口是拆分按鈕...

那么,如果沒有實現完整的所有者繪制解決方案,任何人都有任何想法如何復制“滴答”標記?

謝謝

格雷格

如果你需要真正的好東西,你最終會訴諸主人。 我不認為header-control給出了這個東西的任何消息/通知/通知反映。

現在,您可以通過在列名稱的左側添加刻度標記來欺騙用戶。 如果沒有勾選,則在左側顯示一組空格。 您不能將此符號放在右側,因為用戶可能會調整列的大小,並且刻度標記不會在右側。

根據所選字體,您放置的空格集可能會更多或更少。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM