我们一直在使用CListCtrl类进行一些开发。在Windows 7中一切正常,但在Windows 10操作系统中却出现了一些奇怪的行为。我试图在这里实现一些简单的操作。我有一个函数,可以说是funSelect代码片段,如下所示
//此函数试图复制CListCtrl对象保存的选定列
funcSelect()
{
/ *第一步,我调用GetSelectedColumn()函数以获取作为CListCtrl类的一部分的选定列* /
int iselectedCoulmn = CListCtrlObj.GetSelectedColumn();
//如果未选择任何列,则Windows 7将返回-1,而Windows 10将返回0
///基于值-1,其余代码将被写入。但是在Win 10中,它的值为0。因此,代码不会造成任何问题
}
我确实检查了清单文件之类的所有设置,并且正确使用了ComCtl32.dll版本6,而且它正在使用SDK Ver 10,并且已经检查了VS2015的设置,可以看到所有包含的SDK都已正确设置。所有这些东西都准备就绪了。
有人可以解释一下为什么此API GetSelectedColumn()返回0而不是-1的原因。Windows10的此API进行了任何更改吗?
正确的行为是,当未选择任何列时,它应该为-1。甚至MSDN文档都这么说。有没有其他替代方法可以实现GetSelectedColumn(),但可以通过平台独立和通用的方式实现?
任何功能或代码段都将非常有帮助。
作为清单文件中的FYI,我们确实引入了兼容性标记,以便它可以调用本机API,但即使在此之后,GetSelectedColumn()返回值也没有变化。它仍然返回0而不是-1。
就像FYI一样,以下内容已添加到清单文件中
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
</application>
</compatibility>
如果有人可以对此提供更多的信息,并且有人遇到过相同的问题,那么他们将如何解决,我将非常感激。任何可以完成此工作的代码段或功能,请告诉我。如果能尽快得到我的答复,我将不胜感激
谢谢-颜