2010-08-24 26 views
2

我遇到了Windows列表控件的問題(我特別使用MFC,但它看起來像適用於Windows中的所有列表控件通用控制庫)。列表控件爲圖像添加空間到列0當後續列有圖像時

在我的具體情況下,我想創建一個列表控件,它有兩列或更多列。第一列(0)是純文本,用於允許用戶通過鍵入該行中的文本跳轉到條目。第二列(或三,四,或其他)有一個圖像(或圖像和文本;無論哪種方式)。

這一切都很好,很容易就可以毫無問題地完成,然而最終的列表控件最終會在第0列的文本左側留下一個空格(它可能在RTL系統的右側)。這個spacer似乎是爲圖片保留的,我無法想出一個辦法來阻止它。 (安排列的具體順序並沒有改變任何東西。)

環顧四周,我發現一些其他人抱怨同樣的事情,特別是this thread這導致this thread。建議的解決方案不起作用,因爲如上所述,只是縮小列零的寬度僅會切斷文本而不是圖像間隔符(此外,您必須防止和/或處理用戶嘗試對列寬進行的任何更改使)。

有沒有人有任何想法,如何解決這個問題,短的編寫一個從頭開始控制列表控件或使用CodeProject/CodeGuru /等的太花哨的網格控件之一?

非常感謝。

回答

0

您是否嘗試更改LVITEM結構的iIndent成員? MSDN這樣說:

iIndent
版本4.70。要縮進項目的圖像寬度數。 A 單個縮進等於項目圖像的寬度 。因此,值1 縮進項目的寬度爲一個 圖像,值2縮進兩個 圖像,依此類推。請注意,此 字段僅支持項目。 試圖設置子項縮進 將導致調用函數 失敗。

+0

嗯,我還沒有發現(或使用)該成員。這聽起來非常有希望,所以今天我會試一試。謝謝! – Synetech 2010-08-26 16:28:14

+0

其實,我剛剛在我的一個項目中找到了一條線。顯然我*已經*已經嘗試過,並沒有奏效。無論如何,我再次嘗試了它,並將其設置爲1時導致縮進增加,將其設置爲0或甚至-1沒有任何效果(間隔器仍然存在)。 ':(' – Synetech 2010-08-26 16:57:00

+0

嗯太糟糕了,那麼恐怕你唯一的選擇就是自己畫所有的東西,至少你可以控制各個柱子的外觀...... – humbagumba 2010-08-27 10:27:38

0

列0在ListView中是特殊的。只要您將一個小圖像列表分配給ListView,控件就希望您在第0列中顯示圖像,因此它留下空間。

解決方案:

  1. 使列0零寬度,給它,你希望用戶能夠輸入值。第1列成爲您的「第一個」文本列。列2+是爲您的圖像。你需要全行選擇樣式才能工作。是的,你必須防止用戶調整欄0的大小。是的,這是一個痛苦。
  2. 創建一個列,該列的圖像爲列0,並使用LVM_SETCOLUMNORDERARRAY重新排列顯示順序
  3. 所有者繪製項目。
  4. 前出欄0的圖標(只是涵蓋所有基地)
+0

* *(1)** - 但是當按鍵時,它不會跳轉到下一個匹配的項目**(2)** - 與** 1 **相同​​*(3)**嘆息( – Synetech 2010-08-31 20:53:51

+0

)(1),你可以給第0列一個值,然後當它們輸入到列表中時,它會被使用,我已經編輯了我的答案,以便更好地解釋。 – Grammarian 2010-09-01 22:56:34

+0

(1) - 然後第一列只是第0列的重複。(4) - 這種打敗整個目的。 – Synetech 2010-09-20 05:10:45

相關問題