背景:
我有一个具有每显示器 DPI 感知模式的 MFC 应用程序。当我将窗口转移到另一个具有另一个屏幕缩放比例的监视器时,我会接收并处理该WM_DPICHANGED_AFTERPARENT
消息。
我的所有者绘制的组合框(带有 style CBS_OWNERDRAWFIXED
)已经填充了我需要根据新的缩放因子更新高度的项目。为此,我计算新高度并调用:
SetItemHeight(-1, height); // resizes the closed box
SetItemHeight(0, height); // do this on every item's index from 0 to n
问题:在以前的缩放中尚未打开的组合框,但在更改项目高度后打开的组合框出现错误。列表以所有条目的后半部分打开,下半部分为空。关闭并重新打开它可以解决问题。
我尝试了从其他更新问题(例如,显示和隐藏组合框)中知道的解决方法Invalidate()
,但它没有帮助。完全重新填写所有条目有效,但这很慢并且会导致闪烁(我在那个窗口中有 12 个这样的框)。
任何想法?谢谢!
编辑:问题显然只发生在增加项目的高度时(所以当我的窗口从 100% 移动到 200% 监视器时)。