背景:
我有一个具有每个监视器DPI感知模式的MFC应用程序。当我将窗口移到另一个具有其他屏幕缩放比例的监视器时,我会收到并处理WM_DPICHANGED_AFTERPARENT
消息。
我的所有者绘制的组合框(样式为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%监视器时会出现此问题。)
答案 0 :(得分:0)
经过反复尝试后,我发现了一种变通办法,它似乎可以解决所有情况,通过添加虚拟条目并再次将其删除来解决问题:
// Workaround to avoid combo box bug after resizing (esp. enlarging) the entries' height:
int idx = AddString(L"");
DeleteString(idx);