用MFC画滚动条的小问题

Posted

技术标签:

【中文标题】用MFC画滚动条的小问题【英文标题】:Small problem with painting scroll bars with MFC 【发布时间】:2008-10-12 20:54:16 【问题描述】:

在 MFC 应用程序中有一个小的矩形区域,滚动条在此处相遇(窗口的右下角)。似乎该区域仅在调整框架大小时才失效。在其他情况下(例如,如果另一个窗口被拖动到它上面),该区域不会重新绘制。

我已经能够在 VS 6 和 2008 的新创建项目中重现它。我也看到一些商业应用程序有同样的问题。要重新创建它:

    使用 CScrollView 派生视图创建一个新的 SDI 项目。 调整窗口大小以显示两个滚动条。 在该矩形上拖动另一个窗口以查看重绘问题。

任何想法如何摆脱这个?

【问题讨论】:

我相信您的问题演示,尤其是第 3 部分,具有选择“拖动时显示窗口内容”的先决条件。 不一定。您也可以简单地将第一个窗口(MFC 程序)拖离屏幕并返回,矩形不会失效。 【参考方案1】:

一个解决方法是捕获 CScrollViewOnPaint 方法,并在此方法中添加代码以始终绘制底部角客户端窗口。

但是这个绘制代码还需要调用 GetDC 来获得一个新的 CDC,这样它就可以绕过 BeginPaint 的剪切区域> CDCWM_PAINT 消息传入。

【讨论】:

谢谢,我可能最终会这样做。我只是认为有一些“标准”修复,因为这似乎是一个很常见的问题。

以上是关于用MFC画滚动条的小问题的主要内容,如果未能解决你的问题,请参考以下文章

需要 MFC 自定义滚动条的建议

MFC 控件编程之水平滚动条跟垂直滚动条

求教:关于MFC控件中的滚动条事件........

需要MFC自定义滚动条的建议

CSplitterWnd 的独立滚动条? (MFC)

大家好,MFC list控件中怎么让滚动条为灰色不能拖动,但是仍然可以用鼠标中键滚动列表内容。