2011-03-12 36 views
7

這很容易在.NET中(而不是我的問題),但我試圖找出是否可以簡單地更改給定索引的Win32 list box控件中的字符串文本。Win32 ListBox控件是否有SetText消息?

有一個GetText函數需要一個項目索引,但沒有什麼可以改變現有項目/字符串的文本。我的解決方法是將其刪除並將其添加回框中(這也是一種奇怪的前景,因爲沒有單個命令添加字符串+項目數據 - 必須通過插入字符串然後設置項目關於插入字符串的索引的數據,這是棘手的(不可能?),並且活動排序)。

回答

5

是的,缺少LB_SETITEMTEXT消息有點奇怪。

你應該把你刪除+插入+ SetData的調用之間調用WM_SETREDRAW ...

+1

是啊,這是正確的解決方案。 WinForms控件在底層做了完全相同的事情。沒有更優雅的解決方案,你錯過了。 – 2011-03-12 08:37:48

+1

@Cody:令人沮喪但並不令人意外。 Win32:自1993年以來,將30秒的編程任務轉換爲30分鐘的冒險。即使您的桌面上有1500頁Petzold參考。 – 2011-03-12 22:27:42

+0

@Jared:是的,在80年代中期創建的API不太可能在今天仍被視爲「尖端」。請注意,它當然是當時的:1988年的Windows編程確實是革命性的(當然,還有Mac ......)。 GDI獨自設法做的是令人欽佩的。批評很容易。 'ListView'控件比'ListBox'更新。它也提供更多功能並不奇怪。正如其他人所建議的,如果您想要這些功能,請選擇其他控件。但是,如果您花30分鐘時間刪除一個項目並插入一個新項目,請考慮新的職業。 – 2011-03-13 07:20:31

1

在被題外話風險...

我傾向於使用ListView控件的所有時間。您需要在報告視圖中模仿列表框,並且,它還支持多列。

哦..它有一個LVM_SETITEM消息:)
http://msdn.microsoft.com/en-us/library/bb761186(v=VS.85).aspx

+0

像這樣在報告模式下使用列表視圖的問題是,如果您隱藏列標題,則需要根據項目的寬度調整列寬... – Anders 2011-03-12 05:00:04