【问题标题】:CListBox's Item size changed when changing the size of the list box even if I specify the size in MeasureItem() method?即使我在 MeasureItem() 方法中指定大小,更改列表框大小时 CListBox 的项目大小也会发生变化?
【发布时间】:2008-10-31 10:14:06
【问题描述】:

我使用了一个派生自 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;
}

但是项目的大小会随着列表框大小的变化而变化。我的方法有什么问题吗?

【问题讨论】:

    标签: mfc ownerdrawn clistbox


    【解决方案1】:

    参考中没有提到的是WM_MEASUREITEM 被调用每次*_OWNERDRAWFIXED 控件被调整大小。

    不过,我不知道这种行为有多正式以及是否应该依赖它,但它已在 CodeGuru 和 Google 事物上找到的几个论坛帖子中得到验证。

    如果您不想处理该消息,则只需在第一个 OnMeasureItem() 调用中的某处设置一个私有标志,并在您下次检查它是否设置后立即返回。

    【讨论】:

      【解决方案2】:

      如果您查看CListBox::MeasureItemMSDN 条目,您会发现它只被调用一次,除非设置了LBS_OWNERDRAWVARIABLE(不是LBS_OWNERDRAWFIXED)样式。如果我理解正确,那么这将解释您所看到的行为,因为每次控件的大小更改时都需要调用 MeasureItem

      另外,你考虑过MFC Technical Note 14 : Custom Controls中的观点吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-27
        • 2014-04-05
        • 1970-01-01
        • 2013-03-24
        • 2014-05-14
        • 2021-01-03
        • 2013-06-20
        相关资源
        最近更新 更多