我已经在WTL中使用复选框创建了自己的自定义绘制列表,我想使其现在可以滚动,但事实是我将其绘制为静态文本控件的子类。而且我不知道静态控件是否支持在任何控件中滚动方式。无论如何,我的问题是如何使自定义控件可滚动,我是否必须强制实施该机制?
是的,您必须完全手动实现它。那就是不使用内置控件的缺点。从ListBox开始,然后根据您的需要对其进行自定义可能是一个更好的主意。这样,您将免费获得所有滚动,选择和其他逻辑。
这些步骤大致如下(某些或所有这些可能都有ATL / WTL习惯用法,但是任何ATL / WTL程序员都可以从原始Win32来回转换):
将WS_HSCROLL
和/或WS_VSCROLL
窗口样式添加到自定义静态控件中,具体取决于您是否需要水平,垂直或两个滚动条。您可以将这些添加到传递给CreateWindow / CreateWindowEx函数的窗口样式列表中。
默认情况下,这些滚动条根本不执行任何操作。您需要告诉他们使用该SetScrollInfo
功能该怎么做。在您的情况下:
hwnd
)是控制窗口的句柄。fnBar
)应该是SB_HORZ
调整水平滚动条或SB_VERT
调整垂直滚动条。lpsi
)是指向SCROLLINFO
结构的指针,其中填充了所需的滚动参数,包括拇指的当前位置,最小值和最大值以及用于设置比例滚动条的“页面”大小。fRedraw
)应该设置为TRUE
。您还将需要相应的EnableScrollBar
功能来启用/禁用滚动条。像以前的功能一样
hwnd
是控制窗口的句柄wSBflags
或者是SB_HORZ
,SB_VERT
,或SB_BOTH
wArrows
是ESB_*
值之一,取决于您想要什么最后,您将需要在自定义控件的窗口过程中编写代码以处理WM_HSCROLL
和/或WM_VSCROLL
消息。每当滚动条移动时,这些消息就会发送到窗口。在这些消息的处理程序内部,您将需要做以下事情来更新控件的状态:
SetScrollInfo
函数将拇指更新到新位置ScrollWindowEx
函数。自定义控件的窗口过程还需要处理WM_SIZE
消息,以响应于窗口大小的变化来更新滚动条状态(通过调用SetScrollInfo
和/或EnableScrollBar
)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句