如何在WIN32 API中“通知”父窗口有关子窗口“列表框”控件的“滚动事件”?
Posted
技术标签:
【中文标题】如何在WIN32 API中“通知”父窗口有关子窗口“列表框”控件的“滚动事件”?【英文标题】:How to "notify" parent window about "scroll event" of child window "list box" control in WIN32 API? 【发布时间】:2013-08-15 12:32:45 【问题描述】:如何“通知”父窗口关于其子窗口“列表框”控件的“滚动事件”,每次在WIN32 API中向上或向下滚动?
我正在尝试使用 WIN32 API 制作一个字典。我创建了一个父窗口,然后在里面创建了一个子窗口列表框控件。
我想从数据库中一次将“50个单词列表”添加到列表框控件中,这样应用程序在启动过程中根本不需要花费时间。
然后,我想跟踪 "滚动条位置"("SCROLLINFO" 结构的 "nPos" 值) 当用户向上或向下滚动单词列表时,我可以调用一个函数,当列表框几乎向上滚动到底部时,它会在列表框的末尾再添加 50 个单词。
在主窗口程序函数中,在“switch”语句中,我使用了“WM_VSCROLL”窗口消息,希望能抓住孩子窗口列表框控件的滚动事件。子窗口列表框控件具有"LBS_NOTIFY" 样式。但一切都是徒劳的!列表框控件的滚动事件未通知其父窗口。父窗口在其子窗口列表框控件的滚动事件的 "WM_VSCROLL" 消息中也没有做任何事情。
请帮助我,指导我,用代码示例向我展示如何“通知”父窗口关于其子窗口的“滚动事件”,a “列表框”控件,在WIN32 API中每次向上或向下滚动。
【问题讨论】:
【参考方案1】:滚动消息仅发送到实际正在滚动的窗口,在本例中为 ListBox。 LBS_NOTIFY
仅适用于少数选择消息,不包括滚动消息。您必须通过 SetWindowLongPtr(GWL_WNDPROC)
或 SetWindowSubclass()
对 ListBox 进行子类化,并让您的子类过程捕获滚动消息并根据需要将信息转发到父窗口。
【讨论】:
非常感谢您的回复。我还在这里找到了一个非常有用的链接:***.com/questions/239866/…以上是关于如何在WIN32 API中“通知”父窗口有关子窗口“列表框”控件的“滚动事件”?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 win32API 中更改静态窗口的背景颜色? [复制]
WIN32 API 中 WM_MOUSEHOVER 上的弹出窗口 - 如何关闭它?