我的应用是Win32;我正在使用VS 2015.我有一个包含列表框的对话框。我将列表框设置为动态调整大小,但在调整对话框大小时它不会改变。
以下是列表框'属性:
列表框是所有者绘制的:
这是对话框的默认大小:
当我在Resource Workshop对话框编辑器中的测试模式中拉伸时,这是对话框的样子。请注意,内部列表框也会扩展,完全符合预期:
但是,当它实际运行时,拉伸对话框不会增加列表框的大小:
为什么这不起作用?还有一些额外的伏都教我必须调用才能让它真正起作用吗?这只适用于MFC吗?什么是Win32等效的CWnd::ExecuteDlgInit
?
注意:我已查看https://msdn.microsoft.com/en-us/library/mt270148.aspx和http://mariusbancila.ro/blog/2015/07/27/dynamic-dialog-layout-for-mfc-in-visual-c-2015/,其中我找不到答案。
答案 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()
在哪里重新设置动态布局管理器
完成此操作后,它将开始为我提供实时版本。
这篇文章中也有类似的答案
答案 2 :(得分:-1)
解决方案是使用Qt。 Qt中的对话框布局使Win32看起来像石器时代。