问题描述
我想创建一个基于 Win32 的模式对话框,其中按钮的实际标签在创建时作为输入接收。例如,单击一个按钮可能会导致出现另外两个按钮。由于按钮属性在编译时未知,我认为使用资源文件不是解决方案。我也不想隐藏/禁用按钮,而只是动态生成它们。
按钮的数量可以是可变的,但顺序必须保持不变。例如,按钮的顺序可以是以下任何一种:
A,B,C,D,E
B,E
C
A,E
我不想拥有以下内容
[A] B [C] D [E]
其中 [X]
表示灰色按钮
[ ] B [ ] D [ ]
其中 [ ]
表示空白区域
我进行了一些在线搜索,其中使用 CreateWindow()
或 CreateWindowEx()
似乎是一种/一种使用方式,但我找不到简单的工作示例。
Microsoft 是否有任何此类示例代码?
解决方法
根据您的描述(只需要更改一些按钮标签),我将从资源文件开始。
创建对话框后,您可以使用 GetDialogItem
检索窗口句柄,以获取需要更改其标签的按钮的窗口句柄。然后您可以使用 SetWindowText
设置该控件的标签。
同样,单击一个按钮会显示另外两个按钮。在这种情况下,最初不可见的两个按钮将在资源文件中标记为不可见。然后当用户单击第一个按钮时,您将其他两个按钮设置为可见。
附带说明:在大多数情况下,最好仅禁用其他两个按钮而不是实际隐藏它们。 Windows 会将它们绘制为灰色,因此用户会认识到点击它们不会产生任何效果(目前),但它仍然清楚地表明某些其他操作将启用它们。
至少根据我的经验,从资源文件开始并根据需要操作控件通常(相当多)更容易,而不是尝试从头开始自己创建一个完整的对话框——而且没有什么您在问题中提到的方法接近我认为完全由您自己创建对话框的理由。
不过,为了完整起见,如果您决定确实需要这样做,您可能需要查看CreateDialogIndirect
。这使您可以构建一个定义对话框及其包含的控件的数据结构,然后创建一个实现它们的对话框。