【发布时间】:2021-02-24 07:47:41
【问题描述】:
我想创建一个基于 Win32 的模式对话框,其中按钮的实际标签在创建时作为输入接收。例如,单击一个按钮可能会导致出现另外两个按钮。由于在编译时不知道按钮属性,我假设使用资源文件不是解决方案。我也不想隐藏/禁用按钮,而只是动态生成它们。
按钮的数量可以变化,但必须保持顺序。例如,按钮的顺序可以是以下任意一种:
A, B, C, D, E
B, C, E
C
A, B, E
我不想拥有以下内容
[A] B [C] D [E] 其中[X] 表示灰色按钮
[ ] B [ ] D [ ] 其中[ ] 表示空白空间
我进行了一些在线搜索,其中使用 CreateWindow() 或 CreateWindowEx() 似乎是一种/一种使用方式,但我找不到简单的工作示例。
微软在任何地方都有这样的示例代码吗?
【问题讨论】:
-
“我也不想隐藏/禁用按钮,而只是动态生成它们。” - 为什么?您试图通过创建/销毁而不是显示/隐藏控件来防止什么问题?
-
我不想显示灰色的禁用按钮,我想显示 B C D 而不是:[A] B C D [E],其中 [X] 表示灰色按钮
-
隐藏的按钮根本不显示。
-
"如果每个控件都有 (x,y,width,height) 值,那么隐藏的控件不会在该位置留下空白空间” - 是的。 “除非所有其他控件都以某种方式移动?” - 是什么阻止您自己移动它们?您正在创建控件,将它们移动到任何您想要的位置,例如使用
SetWindowsPos()。跟踪您创建的 HWND 以及您希望在任何给定时间显示的 HWND。然后,您可以遍历该列表,隐藏您不希望显示的列表,并在您希望显示的列表中移动。 -
另一种思路,你创建一个结构体,一个参数是一个包含足够坐标的数组,另一个是每个坐标的状态。每当创建按钮时,都会从数组中提取坐标并将坐标设置为使用时的坐标。如果按钮被销毁,则坐标设置为未使用。其余按钮根据此坐标重新排序。
标签: windows winapi visual-c++ dialog win32gui