我使用了一个派生自CListBox
的类,并使用以下代码创建它:
style:WS_CHILD|WS_VISIBLE |LBS_OWNERDRAWFIXED | WS_VSCROLL | WS_HSCROLL
我希望ListBox的项目具有固定大小,不受列表框大小的影响。所以我重写了MeasureItem()方法,我在其中指定了项目的大小,如下所示:
void CMyListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMIS)
{
lpMIS->itemHeight = ALBUM_ITEM_HEIGHT;
lpMIS->itemWidth = ALBUM_ITEM_WIDTH;
}
但是项目的大小会根据列表框的大小变化而变化。我的方法有什么问题吗?
答案 0 :(得分:1)
参考文献中未提及的是每次调整WM_MEASUREITEM
控件时*_OWNERDRAWFIXED
被称为。
我不知道,这种行为的官方程度如何以及是否应该依赖,但已经在CodeGuru和Google上发现的几个论坛帖子进行了验证。
如果您不想处理该消息,那么只需在第一个OnMeasureItem()
调用中的某个地方设置一个私有标记,并在检查下次设置它时立即从中返回。
答案 1 :(得分:0)
如果查看CListBox::MeasureItem
的MSDN
条目,除非设置了LBS_OWNERDRAWVARIABLE
(非LBS_OWNERDRAWFIXED
)样式,否则只会调用一次。如果我理解正确,那么这将解释您所看到的行为,因为每次控件的大小更改时都需要调用MeasureItem
。
另外,您是否考虑了MFC Technical Note 14 : Custom Controls中的观点?