【问题标题】:MFC add scrollbar to CWnd memberMFC 向 CWnd 成员添加滚动条
【发布时间】:2012-01-27 15:55:23
【问题描述】:


我有一个 CWnd 类名为 mywindow 的成员
我想添加一个滚动条。
我该怎么做?

我已经尝试过:

mywindow.EnableScrollBarCtrl(SB_BOTH,TRUE);

它同时显示水平和垂直滚动条,
但我无法按下按钮或移动滚动条。
我也在第一个命令之后尝试:

mywindow.EnableScrollBar(SB_BOTH,ESB_ENABLE_BOTH);

它什么也没改变。

谁能告诉我一个简单的例子,如何给这个成员添加滚动条?

非常感谢,
塔尔

【问题讨论】:

    标签: c++ mfc scrollbar cwnd


    【解决方案1】:

    启用滚动条是不够的。你必须对窗口消息WM_HSCROLLWM_VSCROLL做出反应。使用GetScrollInfo 方法获取滚动条的位置(值),然后根据该位置绘制窗口内容。

    【讨论】:

    • 我是怎么抓到这个按摩的?我如何添加我的函数说:ON_WM_HSCROLL() 和 ON_WM_VSCROLL() 将在调用按摩时调用。谢谢你的帮助
    • 如果您不知道如何捕捉窗口消息,您将很难!无论如何,我认为这是一个很好的阅读起点:msdn.microsoft.com/de-de/library/0x0cx6b1.aspx
    【解决方案2】:

    查找一些滚动条教程,例如 http://www.codeproject.com/KB/dialog/scrolling_support.aspx 。本质上,上面 dwo 的注释就是您需要做的 - 处理这些消息并设置虚拟客户区大小。

    【讨论】:

    • 谢谢@Roel。维护遗留项目时很难找到答案。您链接到的 Jeff Parsons 存档的 Microsoft 知识库文章非常有帮助,因为它提供了用于实现垂直滚动条的分步指南和代码。对于其他在这里磕磕绊绊的人,GitHub 上有一个 KB 存档:github.com/jeffpar/kbarchive
    【解决方案3】:

    在滚动条激活之前必须有一些“溢出”。

    在您的视图中写入一些“足够长”的数据,滚动条将变为活动状态(至少,这是我之前的经验)。

    通常,滚动条会从 MFC 组件(例如)文本编辑器或表单视图中“自动”处理。 IE。无需显式调用 EnableScrollBarCtrl 也会在需要时变得可见 ...

    【讨论】:

    • 当我在这个窗口中加载一个更大的图像时,窗口会变大,并且不会自动显示滚动条。所以我需要了解如何去做。
    猜你喜欢
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    相关资源
    最近更新 更多