2012-01-17 77 views
1

我有一個可變高度的所有者繪製ListBox控件。當我調用AddString時,會發送一個MeasureItem消息,要求我告訴Windows該項目的大小。問題是,代碼還沒有機會調用SetItemData,所以代碼無法確定大小。如何爲所有者繪製變量CListBox(MFC)設置高度

我試着調用SetRedraw(FALSE)希望能推遲度量請求,但沒有運氣。

那麼如何將項目添加到CListBox並同時獲取項目數據?我已經試過,沒有LBS_HASSTRINGS。不知道還有什麼要嘗試。

回答

1

如果你的列表框控件沒有LBS_HASSTRINGS風格,指針參數AddString()不被視爲一個字符串,但作爲項目數據(見LB_ADDSTRING文檔中的註釋部分)。

因此,如果您的列表項包含字符串和某些項目數據,則可以將這兩個信息包裝在結構或類中,並將指向該包裝的指針傳遞給AddString()

好處是,在調用MeasureItem()時,字符串和項目數據都可用。缺點是如果您的列表已排序,則必須執行CompareItem(),並且在刪除項目和列表框控件被銷燬之前釋放這兩個包裝。

+0

奇妙 - 我知道那裏必須有一個技巧:) – DougN

相關問題