2008-10-31 45 views
1

我用從CListBox派生的類,並用以下命令來創建它:即使我在MeasureItem()方法中指定了大小,在更改列表框的大小時,CListBox的項目大小發生了變化?

style:WS_CHILD|WS_VISIBLE |LBS_OWNERDRAWFIXED | WS_VSCROLL | WS_HSCROLL 

我希望ListBox的項目是有一個固定的大小,而不是受列表框的大小。根據列表框的尺寸變化

void CMyListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMIS) 
{ 
    lpMIS->itemHeight = ALBUM_ITEM_HEIGHT; 
    lpMIS->itemWidth = ALBUM_ITEM_WIDTH; 
} 

但項目的大小變化:所以我重寫MeasureItem()方法,在我指定像下面的項目的大小。我的方法有什麼問題嗎?

回答

0

如果您查看條目CListBox::MeasureItem,您會發現只有在設置了LBS_OWNERDRAWVARIABLE(而不是LBS_OWNERDRAWFIXED)樣式時才調用該條目。如果我理解正確,那麼這將解釋您看到的行爲,因爲每次控件大小更改時都需要調用MeasureItem

另外,您是否考慮過在MFC Technical Note 14 : Custom Controls中所提出的觀點?

1

參考文獻中未提及的是WM_MEASUREITEM每次調用*_OWNERDRAWFIXED控件調整大小。

然而,我不知道這種行爲是如何官方的,是否應該依賴,但已經在CodeGuru和谷歌的東西上發現了幾個論壇帖子進行了驗證。

如果您不想處理該消息,則只需在第一個OnMeasureItem()調用中的某個位置設置一個私有標誌,並在您下次檢查它時立即返回。

相關問題