在WTL中的自定义绘制控件中实现滚动

亚历山德鲁

我已经在WTL中使用复选框创建了自己的自定义绘制列表,我想使其现在可以滚动,但事实是我将其绘制为静态文本控件的子类。而且我不知道静态控件是否支持在任何控件中滚动方式。无论如何,我的问题是如何使自定义控件可滚动,我是否必须强制实施该机制?

科迪·格雷

是的,您必须完全手动实现它。那就是不使用内置控件的缺点。从ListBox开始,然后根据您的需要对其进行自定义可能是一个更好的主意。这样,您将免费获得所有滚动,选择和其他逻辑。

这些步骤大致如下(某些或所有这些可能都有ATL / WTL习惯用法,但是任何ATL / WTL程序员都可以从原始Win32来回转换):

  1. WS_HSCROLL和/或WS_VSCROLL窗口样式添加到自定义静态控件中,具体取决于您是否需要水平,垂直或两个滚动条。您可以将这些添加到传递给CreateWindow / CreateWindowEx函数的窗口样式列表中。

  2. 默认情况下,这些滚动条根本不执行任何操作。您需要告诉他们使用该SetScrollInfo功能该怎么做在您的情况下:

    • 第一个参数(hwnd)是控制窗口的句柄。
    • 第二个参数(fnBar)应该是SB_HORZ调整水平滚动条或SB_VERT调整垂直滚动条。
    • 第三个参数(lpsi)是指向SCROLLINFO结构的指针,其中填充了所需的滚动参数,包括拇指的当前位置,最小值和最大值以及用于设置比例滚动条的“页面”大小。
    • 第四个参数(fRedraw)应该设置为TRUE

  3. 您还将需要相应的EnableScrollBar功能来启用/禁用滚动条。像以前的功能一样

    • hwnd 是控制窗口的句柄
    • wSBflags或者是SB_HORZSB_VERT,或SB_BOTH
    • wArrowsESB_*值之一,取决于您想要什么

  4. 最后,您将需要在自定义控件的窗口过程中编写代码以处理WM_HSCROLL和/或WM_VSCROLL消息。每当滚动条移动时,这些消息就会发送到窗口。在这些消息的处理程序内部,您将需要做以下事情来更新控件的状态:

    • 调用SetScrollInfo函数将拇指更新到新位置
    • 根据滚动距离重新绘制控件的内容。有多种方法可以执行此操作,但是我可能会使用该ScrollWindowEx函数。

    自定义控件的窗口过程需要处理WM_SIZE消息,以响应于窗口大小的变化来更新滚动条状态(通过调用SetScrollInfo和/或EnableScrollBar)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在自定义WPF控件中强制重新绘制自定义绘制的UIElement

来自分类Dev

在Xamarin中创建自定义控件

来自分类Dev

用户控件中的自定义方法

来自分类Dev

在自定义控件中替换DataTemplate

来自分类Dev

Scrollviewer中的自定义控件

来自分类Dev

DynamicResource中的自定义控件属性

来自分类Dev

用户控件中的自定义事件

来自分类Dev

UITabBarController 中的自定义控件

来自分类Dev

自定义控件中的 Xamarin BindableProperty

来自分类Dev

xamarin 中的自定义控件示例?

来自分类Dev

为什么自定义WinForms控件在绘制时不遵守构造函数中设置的属性?

来自分类Dev

如何使滚动条在自定义控件中良好播放?

来自分类Dev

如何在Java中实现自定义选项卡控件

来自分类Dev

有条件地捕获闭包中的变量以实现自定义控件

来自分类Dev

如何在Java中实现自定义选项卡控件

来自分类Dev

在python中绘制自定义图

来自分类Dev

未找到自定义控件中的子控件名称

来自分类Dev

Java中的自定义缓存实现

来自分类Dev

在Android中实现自定义ListView

来自分类Dev

在SQL中实现自定义公式

来自分类Dev

Java中的自定义缓存实现

来自分类Dev

在Spring中实现自定义注释

来自分类Dev

如何在Flutter中实现自定义应用栏布局可滚动效果

来自分类Dev

在自定义控件中处理DataTemplate中的事件

来自分类Dev

滚动listview后,Android中的自定义listAdapter中替换的可绘制图像发生更改。为什么?

来自分类Dev

当iOS 7中显示工作表/警报时,如何在自定义绘制的控件上将tintColor设置为灰色?

来自分类Dev

在已经绘制的自定义控件上绘制

来自分类Dev

如何在VB.NET for WinForms中创建没有BackgroundImage属性的自定义可滚动用户控件

来自分类Dev

WTL如何在同一窗口中使用2个自定义绘制CListViewCtr

Related 相关文章

  1. 1

    在自定义WPF控件中强制重新绘制自定义绘制的UIElement

  2. 2

    在Xamarin中创建自定义控件

  3. 3

    用户控件中的自定义方法

  4. 4

    在自定义控件中替换DataTemplate

  5. 5

    Scrollviewer中的自定义控件

  6. 6

    DynamicResource中的自定义控件属性

  7. 7

    用户控件中的自定义事件

  8. 8

    UITabBarController 中的自定义控件

  9. 9

    自定义控件中的 Xamarin BindableProperty

  10. 10

    xamarin 中的自定义控件示例?

  11. 11

    为什么自定义WinForms控件在绘制时不遵守构造函数中设置的属性?

  12. 12

    如何使滚动条在自定义控件中良好播放?

  13. 13

    如何在Java中实现自定义选项卡控件

  14. 14

    有条件地捕获闭包中的变量以实现自定义控件

  15. 15

    如何在Java中实现自定义选项卡控件

  16. 16

    在python中绘制自定义图

  17. 17

    未找到自定义控件中的子控件名称

  18. 18

    Java中的自定义缓存实现

  19. 19

    在Android中实现自定义ListView

  20. 20

    在SQL中实现自定义公式

  21. 21

    Java中的自定义缓存实现

  22. 22

    在Spring中实现自定义注释

  23. 23

    如何在Flutter中实现自定义应用栏布局可滚动效果

  24. 24

    在自定义控件中处理DataTemplate中的事件

  25. 25

    滚动listview后,Android中的自定义listAdapter中替换的可绘制图像发生更改。为什么?

  26. 26

    当iOS 7中显示工作表/警报时,如何在自定义绘制的控件上将tintColor设置为灰色?

  27. 27

    在已经绘制的自定义控件上绘制

  28. 28

    如何在VB.NET for WinForms中创建没有BackgroundImage属性的自定义可滚动用户控件

  29. 29

    WTL如何在同一窗口中使用2个自定义绘制CListViewCtr

热门标签

归档