[英]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_IMAGE
或HDF_BITMAP
的同時使用HDF_SORTUP
或HDF_SORTDOWN
。 然后我創建了新的圖像以指示排序和過濾狀態,但現在我的所有ListView
項目都按列標題圖像的大小縮進(似乎是c# ListView
控件的已知問題)。
我找到了一些看起來很有希望的東西: BCM_SETSPLITINFO
允許你設置分割按鈕的字形。 但是我有一個ListView標題,而不是一個拆分按鈕,除非標題有子窗口是拆分按鈕...
那么,如果沒有實現完整的所有者繪制解決方案,任何人都有任何想法如何復制“滴答”標記?
謝謝
格雷格
如果你需要真正的好東西,你最終會訴諸主人。 我不認為header-control給出了這個東西的任何消息/通知/通知反映。
現在,您可以通過在列名稱的左側添加刻度標記來欺騙用戶。 如果沒有勾選,則在左側顯示一組空格。 您不能將此符號放在右側,因為用戶可能會調整列的大小,並且刻度標記不會在右側。
根據所選字體,您放置的空格集可能會更多或更少。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.