2012-04-11 16 views
1

我使用CListBox :: SetItemData來存儲一個指向我的ownerdrawn CListBox派生類中的某些數據的指針,並且我希望列表框本身能夠跟蹤它並在不再需要時釋放內存。當列表框中有一個項目被刪除時收到通知?

爲此,我需要在每次刪除項目時收到通知(包括LB_RESETCONTENT和刪除項目的其他每種情況)。是否有一個或多個事件可以實現?

回答

1

正如它的主人用的LBS_OWNERDRAW*樣式可以一個畫尋找WM_DELETEITEM;

發送到列表框或組合框的所有者時,列表框或 組合框被破壞,或當由所述 LB_DELETESTRINGLB_RESETCONTENTCB_DELETESTRING,或CB_RESETCONTENT 消息被刪除的項目。該系統將刪除的消息WM_DELETEITEM每個 項目

1

不。ListBox僅爲用戶所做的事情生成通知。用戶無法刪除或添加或清空列表框,只能由您自己的代碼完成。所以這裏的哲學是控制不必告訴你一些你已經知道的東西。您可以在修改內容的代碼中隨意生成自己的消息。當然,從CListBox繼承自己的類並添加自己的虛擬方法會更好。

1

既然你已經繼承列表框反正「適當」的設計會(IMO)是數據管理功能添加到列表框中,然後就知道當項目被刪除時,可以根據需要刪除數據。我的意思是,讓我們說你的列表跟蹤人,你會添加AddPerson(Person p)和RemovePerson(Person p)方法到你的班級。 RemovePerson的實現將從列表中刪除相應條目,並刪除與其相關的所有數據。所以,不要使用CListBox :: DeleteString來刪除東西,而是使用自己實現的更高級別的API。