c++ - 如何为所有者绘制变量 CListBox (MFC) 设置高度

标签 c++ windows mfc listbox ownerdrawn

我有一个可变高度的所有者绘制 ListBox 控件。当我调用 AddString 时,会发送一条 MeasureItem 消息,要求我告诉 Windows 项目的大小。问题是,代码还没有机会调用 SetItemData,因此代码还不能确定大小。

我试过调用 SetRedraw(FALSE) 希望能推迟测量请求,但没有成功。

那么如何在CListBox中添加一个item的同时获取传入的Item Data呢?我试过使用和不使用 LBS_HASSTRINGS。不确定还能尝试什么。

最佳答案

如果您的列表框控件没有 LBS_HASSTRINGS 样式,则 AddString() 的指针参数不会被视为字符串,而是被视为项目数据(请参阅备注LB_ADDSTRING 的文档部分)。

因此,如果您的列表项包含字符串和一些项数据,您可以将这两条信息包装在结构或类中,并将指向该包装器的指针传递给 AddString().

优点是在调用 MeasureItem() 时字符串和项目数据都将可用。不利之处在于,如果您的列表已排序,您将必须实现 CompareItem(),并在删除项目时和销毁列表框控件之前释放包装器。

关于c++ - 如何为所有者绘制变量 CListBox (MFC) 设置高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8897956/

相关文章:

c# - 监控 Windows 中的常规键盘快捷键(例如按两次 Ctrl 调出 Google 桌面搜索)?

c++ - 使用 DrawIcon 绘制的 .ico 文件看起来有误

c++ - 如何解决什一奉献的未知数

c++ - 收到未初始化局部变量的警告

node.js - 无法执行二进制文件 exec 格式错误 windows bash

windows - 为什么我的无 CRT 应用程序在启动时间歇性崩溃?

c++ - CAtlMap 使用 CString 作为键

c++ - 关于 MFC 库中的 _variant_t 类型

c++ - NUI_LOCKED_RECT 是什么,Pitch 代表什么? (体感)

c++ - 如何为 python 迭代器编写 c++ 包装器?