我有一个接近荒谬的问题。这听起来很简单,但我花了几天时间研究它无济于事。
我在ATL / WTL中有一个程序,它使用listview控件来显示文件和文件夹。用户抱怨这些窗格不会在启用触摸的PC上使用“平移”手势滚动。它可以用鼠标滚动,但不能用手指滚动。
该程序完全与触摸无关。它依赖legacy behavior将触摸转换为滚动消息,但它不起作用。我很难排除故障,因为我不有一个可以触摸的Windows PC进行测试。我相信滚动消息已发送,但随后窗口会跳回。我根本不做任何滚动事件,所以它都是默认的listview行为。
我在同一程序中使用的其他listview控件,例如在对话框窗口中,通过触摸滚动正常工作(!)。在消除了所有其他可能性之后,我得出结论,问题来自窗口类名称(?)。对话框中的列表视图窗口具有默认类名syslistview32
,而不滚动的视图以ATL方式超级显示:
DECLARE_WND_SUPERCLASS(_T("ATL:ShellItemView"), CListViewCtrl::GetWndClassName())
但是基类是标准的列表视图控件。问题可以是班级名字吗?!我想不出别的什么。如果您有触摸PC,可以从这里(free trial)
尝试该程序感谢 尼科斯
答案 0 :(得分:0)
是的,班级名字就是它!我没有对列表视图进行超类化,而是创建了一个标准的列表视图,然后将其子类化。这保留了syslistview32
类名,但提供了我自己的额外功能。名字中有什么?