【问题标题】:How to remove only horizontal scrollbar from CScrollView如何从 CScrollView 中仅删除水平滚动条
【发布时间】:2021-04-08 21:23:34
【问题描述】:

在带有 MFC 的 Visual C++ 中,我想从 CScrollView 中删除未使用的水平滚动条。我找到了很多方法,但我需要垂直滚动条。自然,必须重写 OnSize,而不是调用 base 的 OnSize。但是垂直滚动条必须保留,所以我必须调用base的OnSize。例如,什么是 OnSize?谢谢你。 (我不是编程初学者,但我是图形用户界面的初学者)。

更新(我的英语不完美):

如果不需要滚动条(整个视图都适合窗口),滚动条会消失,但前提是没有拆分器!

class CChildFrame: public CMDIChildWndEx {
protected:
    CSplitterWndEx  m_wndSplitter;
public:
    virtual BOOL OnCreateClient(CREATESTRUCT *, CCreateContext *const pContext) {
        return  m_wndSplitter.Create(this, 2, 1, CSize(60, 60), pContext);
    }
    // Project Wizard generated code
};

没有这个,窗口菜单中的菜单项拆分被禁用,因此,不可选:拆分视图不起作用。如何使用拆分器启用自动消失?

这与启用拆分器无关(有 2 个视图)或未启用:即使仅存在 1 个视图,不需要的拆分器也不会消失。

两个视图有自己的垂直滚动条,但共享水平滚动条:它们一次滚动。但我想设置不同的位置。如何创建自己的滚动条?

【问题讨论】:

  • 您的代码不完整。您创建了拆分器的单元格,但没有创建它们的内容。之后你将需要像m_wndSplitter.CreateView(0 ,0, RUNTIME_CLASS(CMyOwnView), CSize(100, 100), pContext); m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CMyOwnView), CSize(100, 100), pContext); 这样的东西。稍后您可以使用代码为CMyOwnView *pSubView = (CMyOwnView*) m_wndSplitter.GetPane(0, 1); 获取每个视图
  • 菜单执行以下操作:窗口/拆分。最初只有一个视图,菜单创建另一个。我试过了,工作正常,但是有一个常见的水平滚动条(我不能在 2 个视图上设置不同的位置),如果不需要,什么不会消失(整个视图都适合窗口)。

标签: c++ windows mfc desktop-application


【解决方案1】:

你试过yourScrollView->ShowScrollBar(SB_HORZ, FALSE)这样简单的东西吗?

文档:https://docs.microsoft.com/en-us/cpp/mfc/reference/cwnd-class#showscrollbar

【讨论】:

  • 这没有效果。在调用 base 函数之前和之后,我将它放在 InitialUpdate 和 OnSize 中。
  • 尝试覆盖OnPrepareDC,在那里调用ShowScrollBar,然后调用__super::OnPrepareDC。可能这是错误的顺序。
  • 这里有另一个有趣的答案:stackoverflow.com/a/2423483/383779
  • 如果您根本不想滚动,为什么不使用CView 而不是ScrollView
  • 我需要垂直滚动条。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
相关资源
最近更新 更多