我有一个基于 MFC 的对话框应用程序。我想保留窗口之前的滚动位置,并在调整对话框大小后重新显示相同的位置。我怎样才能实现它?
我正在使用 OnSize() 方法来处理窗口大小调整。 您能否提供一个逻辑来在调整大小后保留并重新显示先前的窗口和滚动条位置
相当复杂。我会重写
OnSize()
成员,首先获取当前滚动位置,调用基类成员,然后进行一些计算,以便调整大小之前的窗口中间在调整大小后保持在中间,最后滚动到新的职位。它可能不是很准确,因为您有限制,例如随着窗口变大,滚动范围会变小。检查 Get/SetScrollPosition()
、Get/SetScrollRange()
和 Get/SetScrollInfo()
功能。它们是 Win32 函数,也可以作为 CWnd
类成员使用(毕竟 MFC 在很大程度上扩展了 Win32 包装器)。
但是我认为这是一个相当糟糕的 UI 设计。显示滚动条的对话框不符合人体工程学,因为用户必须滚动才能显示所需的控件。对话框应该显示所有控件,即对话框资源应该完全适合窗口的客户区,并且不具有可调整大小的边框。对话框应该足够小,以适应目标机器分辨率的屏幕;如果您无法容纳所有控件,您应该考虑其他解决方案,例如调整控件大小/重新定位或使用选项卡式页面。此外,对话框基本上是用作弹出窗口,而不是用作应用程序的主窗口(“重叠”)。许多 MFC 开发人员选择“对话框应用程序”选项,因为它被认为是简单的。 imo 的最佳选择是不支持文档/视图的 SDI 应用程序(取消选中该选项)。但它仍然包含一个视图对象。视图类型可以是
CFormView
,这是基于对话框资源的视图,应用程序表现更好,支持 ON_UPDATE_COMMAND_UI
处理程序等功能,并提供工具栏、状态栏和可停靠窗格等好东西,所有这些都是生成的由向导。也就是说,它是一个正确的应用程序,而不是一个重新用作应用程序窗口的对话框。