如果使用“Visual Studio 2017 (v141)”平台工具集构建应用程序,CCheckListBox项目选择时会重叠。

3

目前正在尝试将 CCheckListBox 控件用于项目中。 该项目是一个简单的 MFC 对话框应用程序。 在对话框中添加了具有以下特定属性的列表框控件。

 Owner Draw -> Fixed
 Selection -> Multiple
 Has String -> True

使用类向导添加以下变量到标头
CCheckListBox mCheckListBox;

已将以下内容添加到源文件中。

mCheckListBox.AddString(L"Item-1");
mCheckListBox.AddString(L"Item-2");
mCheckListBox.AddString(L"Item-3");
mCheckListBox.AddString(L"Item-4");

当使用平台工具集“Visual Studio 2012(v110)”构建应用程序时,该应用程序可以正常工作。 但是,如果使用平台工具集“Visual Studio 2017(v141)”构建该应用程序,则在选择列表项时会发生重叠问题。

如果有人遇到相同的问题,请分享解决方案。 将不胜感激。

注意: 如果已经有类似的问题,请分享链接。


为什么你设置了owner-draw?Owner drawn控件是指继承MFC控件并实现DrawItem以获得自定义外观和感觉的控件。而你只是简单地使用CCheckListBox,没有这样做。关闭它,看看行为是否会改变。 - acraig5075
我也看到了重叠的条目,但是还没有解决方案,抱歉。 - j6t
@acraig5075 CCheckListBox需要使用owner-draw标志(它是由MFC实现的自定义外观控件)。 - j6t
@acraig5075 感谢您的评论。正如您所知,Owner-Draw 有三个选项(无、固定、可变)。我已经尝试了无和可变两种选项。但应用程序崩溃了。 - gsmaker
@j6t 感谢您的确认。 这个问题是否已经在 Platform toolset v142 (Visual Studio 2019) 中得到解决了呢? - gsmaker
显示剩余2条评论
1个回答

2

这是另一个 MFC 的 bug。

您可以通过在 OnInitDialog 方法中添加以下内容来规避此 bug:

mCheckListBox.SetFont(GetFont());

1
我认为这个 bug 出现在系统 DPI 为 125% 或更高时,但应用程序不具备 DPI 感知功能。 - Barmak Shemirani
@BarmakShemirani 在我的平台上(Windows 10),它也会以100%的DPI显示。 - Jabberwocky
@Jabberwocky非常感谢。我已经确认添加了上述行以解决问题。 - gsmaker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接