旧版列表视图不会触摸滚动

时间:2016-05-06 09:52:14

标签: listview winapi touch atl

我有一个接近荒谬的问题。这听起来很简单,但我花了几天时间研究它无济于事。

我在ATL / WTL中有一个程序,它使用listview控件来显示文件和文件夹。用户抱怨这些窗格不会在启用触摸的PC上使用“平移”手势滚动。它可以用鼠标滚动,但不能用手指滚动。

该程序完全与触摸无关。它依赖legacy behavior将触摸转换为滚动消息,但它不起作用。我很难排除故障,因为我不有一个可以触摸的Windows PC进行测试。我相信滚动消息已发送,但随后窗口会跳回。我根本不做任何滚动事件,所以它都是默认的listview行为。

我在同一程序中使用的其他listview控件,例如在对话框窗口中,通过触摸滚动正常工作(!)。在消除了所有其他可能性之后,我得出结论,问题来自窗口类名称(?)。对话框中的列表视图窗口具有默认类名syslistview32,而不滚动的视图以ATL方式超级显示:

DECLARE_WND_SUPERCLASS(_T("ATL:ShellItemView"), CListViewCtrl::GetWndClassName())

但是基类是标准的列表视图控件。问题可以是班级名字吗?!我想不出别的什么。如果您有触摸PC,可以从这里(free trial

尝试该程序

感谢 尼科斯

1 个答案:

答案 0 :(得分:0)

是的,班级名字就是它!我没有对列表视图进行超类化,而是创建了一个标准的列表视图,然后将其子类化。这保留了syslistview32类名,但提供了我自己的额外功能。名字中有什么?

这是一个很大的微软错误;我无法相信我失去了3天。但至少现在它已经解决了