gpt4 book ai didi

windows - 稍后更改组合框的项目高度(以了解DPI)

转载 作者:行者123 更新时间:2023-12-03 11:14:51 25 4
gpt4 key购买 nike

背景:

我有一个具有每个监视器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%监视器时)。

最佳答案

经过反复尝试后,我发现了一种变通办法,它似乎可以解决所有情况,通过添加一个虚拟条目并将其再次删除来解决问题:

// Workaround to avoid combo box bug after resizing (esp. enlarging) the entries' height:
int idx = AddString(L"");
DeleteString(idx);

关于windows - 稍后更改组合框的项目高度(以了解DPI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58205173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com