【发布时间】:2010-02-11 14:17:34
【问题描述】:
我正在维护一个最初用 VS6 编写的 MFC/COM/ATL 45-odd 项目解决方案。我现在正在使用VS2008。 我正在查看一个列表控件(vanilla CListCtrl),它的行为不像我们认为的那样。 通常在 MFC 列表控件中,您可以按一个键,(Q 说)& 选择将跳到以“Q”开头的第一行(如 Windows 资源管理器)。有谁知道为什么这不会发生? 样式/扩展样式设置为与同一项目中的另一个控件相同,可以正常工作。 我是否必须发送自己的消息,或者是否有控制该功能的标志等?通常谷歌会提供答案,但这次我无法正确构建我的查询以提供相关信息。 这是 CListCtrl 的 .rc 文件中的行,它不会跳转到按键时的行:
CONTROL "List1",IDC_BAL_LIST,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,0,73,493,230
下面是同一 .rc 文件中的一行,显示了执行此操作的列表控件:
CONTROL "List1",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,1,38,501,219
如你所见,属性没有明显区别,那么什么程序代码会影响呢?
【问题讨论】:
-
明显的区别在于ID值,在代码中是如何处理的?
-
它们都绑定到 CListCtrl 成员变量并使用这些变量进行操作。我刚刚浏览了两个相关的代码部分,并且它们都分配了相同的 ExtendedStyles - LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES。我看不出它们之间有什么区别。很难显示所有代码,因为它在每个 .cpp 中分布在 2-3000 个 LOC 上 - 我希望有人可以提出一种可以关闭此功能的方法。如果我知道这将是一个很好的起点,例如,此属性是否有名称等。
-
不可能有很多事情会阻止此功能工作 - 只是我无法在任何地方找到信息 - 肯定有一位 MFC 大师可以告诉我(可能很明显)回答为什么 up、down、PgUp、PgDn、End 和 Home 都可以工作,但是按“B”并跳转到“B”——算了!
标签: visual-c++ mfc