为什么我的列表框没有调整大小? (动态调整对话框组件的大小)

时间:2018-04-14 16:34:21

标签: c++ winapi modal-dialog resize

我的应用是Win32;我正在使用VS 2015.我有一个包含列表框的对话框。我将列表框设置为动态调整大小,但在调整对话框大小时它不会改变。

以下是列表框'属性:

enter image description here

列表框是所有者绘制的:

enter image description here

这是对话框的默认大小:

enter image description here

当我在Resource Workshop对话框编辑器中的测试模式中拉伸时,这是对话框的样子。请注意,内部列表框也会扩展,完全符合预期:

enter image description here

但是,当它实际运行时,拉伸对话框不会增加列表框的大小:

enter image description here

为什么这不起作用?还有一些额外的伏都教我必须调用才能让它真正起作用吗?这只适用于MFC吗?什么是Win32等效的CWnd::ExecuteDlgInit

注意:我已查看https://msdn.microsoft.com/en-us/library/mt270148.aspxhttp://mariusbancila.ro/blog/2015/07/27/dynamic-dialog-layout-for-mfc-in-visual-c-2015/,其中我找不到答案。

3 个答案:

答案 0 :(得分:1)

这仅适用于MFC吗?

实际上,这仅在使用MFC时有效。

Win32的CWnd :: ExecuteDlgInit等效是什么?

MFC是在Windows API之上构建的库。 Windows API中的窗口系统不提供任何种类的布局管理。如果您想了解Windows API的等效功能,那实际上就是MFC中实现的功能。

那么,为什么在图形资源编辑器中支持此功能?因为那是生成布局信息的地方。最终将其放入类型为AFX_DIALOG_LAYOUT的自定义资源中,MFC在其中将其选中以发挥其魔力。如果您不使用MFC,则将忽略该资源。

并不是说-从理论上讲-您将无法实现自己的读取生成的资源的解决方案。只要您可以找到MFC使用的自定义资源的文档。我没有,但是看一下MFC的源代码,发现它很简单(一个WORD版本,然后是成对的WORD对,用于水平和垂直移动和大小设置)。

答案 1 :(得分:-1)

作为记录,我也在寻找解决方案,当我在对话框上调整控件的大小时,所有动态调整大小都停止了,尽管它在“测试模式”下运行良好。

要修复此问题,在您发布的第二个链接中,有一节介绍添加函数: void CMFCDynLayoutDemoDlg :: SetupDynamicLayout()

在哪里重新设置动态布局管理器

完成此操作后,它将开始为我提供实时版本。

这篇文章中也有类似的答案

Recalculate dynamic layout properties

答案 2 :(得分:-1)

解决方案是使用Qt。 Qt中的对话框布局使Win32看起来像石器时代。