如何在 MFC 中刷新 Groupbox 控件 (C++)

How to refresh a Groupbox control in MFC (C++)

提问人:Brian Bai 提问时间:1/25/2022 最后编辑:Andrew TruckleBrian Bai 更新时间:1/26/2022 访问量:279

问:

我在 MFC 视图类中创建了一个 Groupbox。但是在从 Maxmize 恢复下来以及从 Restore Down 恢复 Maxmize 时刷新它失败。

The failed refresh Groupbox control as below pic:

我在以下位置创建了 Groupbox:View::OnCreate

int Cmfc_gui_test3View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
...
CRect mybox( 0, 0,350, 1000);

pmyGroupBox->Create(_T("Test GroupBox"), WS_CHILD | WS_VISIBLE | BS_CENTER | BS_GROUPBOX|WS_BORDER, mybox, this, IDG_GROUPBOX1);
...
}

我正在使用和方法。我也测试过,但没有运气。控件在刷新自身时始终失败。 希望有人能帮助我。提前致谢。pmyGroupbox->ShowWindow(SW_HIDE)pmyGroupbox->ShowWindow(SW_SHOW)OnPaintpmyGroupbox->ShowWindow(SW_RESTORE)

C++ MFC 控件 GroupBox

评论

1赞 Andrew Truckle 1/25/2022
不应在 OnPaint 处理程序中调用 ShowWindow。你到底想做什么?
0赞 Brian Bai 1/25/2022
我正在做的是开发一个 GUI:在客户端窗口中,左侧有一个 Groupbox,它将包含所有控件(按钮、组合框、列表框等);在右侧,将显示一个实时视频。
0赞 Brian Bai 1/25/2022
此外,实际上我想将 Groupbox 放在右侧。但是当我在 OnCreate 中使用 GetClientRect(&rect) 时,rect.right 和 rect.bottom 都返回 0。所以我没有把它放在右边。但这是另一个问题。也许我应该为这个问题创建一个不同的线程。
0赞 Andrew Truckle 1/26/2022
但是,为什么您必须手动完成所有这些操作呢?为什么不能使用资源编辑器?帮我看,视图是文档的表示形式。这就是为什么它被称为文档/视图架构。因此,文档具有基础数据,视图以可视方式呈现文档。它通常不用于呈现控件,这些控件通常是对话框或停靠窗格的一部分。
0赞 Brian Bai 1/26/2022
谢谢安德鲁,但是如何通过资源编辑器添加 Groupbox?我正在使用 VS 2015、MFC;我没有使用 CLR Windows 或 Winform 编程。

答:

0赞 Andrew Truckle 1/26/2022 #1

此问题(是否可以将 MFC 对话框资源附加到 CChildView?)应提供有用的信息。

如果要创建包含控件的窗体(如组合框),则需要使用 CFormView 类。

关于这个主题,还有其他一些有用的文章:

Q98598:HOWTO:在 SDI 和 MDI 应用程序中使用 CFormView

链接的文章提供了示例代码和说明。摘要如下:

总结

该类提供了一种放置控件的便捷方法 添加到基于对话框模板的视图中。一般 使用的过程在文档中进行了描述 类,并在 VIEWEX 和 CHKBOOK 示例应用程序中进行了说明 随 Microsoft 基础类 (MFC) 版本 2.x 和 以上。但是,这些应用程序并未演示使 框架窗口的初始大小与 形式。CFormViewCFormView

以下部分列出了支持创建 单文档界面 (SDI) 或多文档界面 (MDI) 基于 的应用程序,调整初始框架窗口的大小 在窗体周围,更改框架的样式,并关闭 MDI 使用表单中的按钮进行文档。CFormView

这些说明适用于较旧版本的 Visual Studio,因此可能需要稍作调整。

评论

1赞 Brian Bai 1/26/2022
嗨,安德鲁,感谢您的帮助,我非常感谢。现在,我构建了一个基于 CFormView 的 MFC 应用程序,并通过资源编辑器添加了 Groupbox。我有一个完美的 Groupbox,在移动和调整大小时没有任何垃圾显示。我发现的唯一问题是 Groupbox 无法正确缩放客户端窗口。无论如何,我将进一步调试它。