【问题标题】:How to change the size & position of a dialog-based window programmatically?如何以编程方式更改基于对话框的窗口的大小和位置?
【发布时间】:2019-12-16 09:57:00
【问题描述】:

我有创建基于对话框的窗口的代码:

m_window = CreateDialogParam(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc, 0);
ShowWindow(m_window, SW_SHOW);

如何不通过资源(.rc) 文件以编程方式更改基于对话框的窗口的大小和位置?

【问题讨论】:

  • 第一步是找到您正在使用的框架的文档,然后阅读。如果在该框架中可行,则几乎可以保证文档会告诉您如何操作。请做一些研究..
  • @JesperJuhl:首先,我不使用框架,而是使用原生 Win32Api。其次,我在写我的问题之前已经进行了研究,但我没有找到任何东西,所以告诉我我该怎么办?
  • “首先,我不使用框架,我使用本地 Win32Api” - 在我的书中,一个框架,它确实有文档。
  • @LionKing 对话框与带有特殊类处理程序的普通 HWND 完全相同。所有采用 HWND 的函数都可以采用对话框。
  • 对话框是一个窗口,SetWindowPos 允许您调整窗口大小,包括对话框。但是 Win32 没有对话框布局引擎。当对话框大小发生变化时,您希望在对话框中移动或调整大小的任何控件都必须手动完成。

标签: c++ winapi win32gui


【解决方案1】:

可以使用SetWindowPos() 更改对话框的大小,但您不太可能希望对对话框执行此操作 - 或者您还必须调整 所有 其子项的大小。通常我只在对话框包含一个控件以使其完整大小时才这样做,通常是列表视图或 HTML。

同样的功能可以通过 SWP_NOSIZE 选项改变位置。

【讨论】:

  • 无需调整所有子控件的大小,只需调整有意义的子控件​​即可。例如,您不会调整按钮的大小。
  • @JonathanPotter 您必须在对话框中重新定位它们,这并非易事,具体取决于内容。大多数对话框不需要调整大小,并且具有可调整大小的对话框会导致 Windows gui 不一致。如果要调整内容的大小,对话框不是一个好的选择。
  • 不一定。想象一个顶部有一堆复选框的对话框,然后是一个编辑字段。只有编辑字段需要调整大小,复选框可以忽略。如果有 OK/Cancel 按钮,则需要移动它们。显然取决于对话布局,但这只是数学,而不是火箭科学。
  • @JonathanPotter 这将是一个设计非常糟糕的对话框 - 相反,您可以使用带有复选框的列表视图。 Windows 用户想要一致的设计。
  • 设计非常糟糕的对话框是那些在我的屏幕为 2880 像素高时打开 300 像素高并且不允许我调整它们大小的对话框。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
  • 2013-09-09
  • 1970-01-01
  • 2013-01-05
  • 2022-01-21
  • 1970-01-01
相关资源
最近更新 更多