好吧首先使用win32 api在C中编码,没有mfc,没有.net,没有wxwidgets。 我已经创建了一个带有WC_TABCONTROL类的窗口,并添加了选项卡,一切正常,除了......我需要在每个选项卡中都有内容,我得到了msdn的印象,我需要为每个页面创建一个对话框,然后在用户选择选项卡时加载对话框。唯一的问题是我的主窗口不是一个对话框,所以使选项卡的对话框完美适合不是太好了。
所以我想知道是否有更好的方法来做到这一点?我想过只是隐藏并显示每个标签的不同控件,但这似乎不是一个好主意。
我想要的是当我的应用程序启动它时会将窗口和选项卡控件调整到适合所有选项卡所需的最小尺寸(3-4个选项卡),并且窗口不会调整大小我想简化一下。我按照msdn上的示例(将每个对话框加载到内存中,通过每个对话框循环并将RECT设置为所需的最小大小然后调整所有内容)来做到这一点,问题是大小是在对话框单元中而我不能将它转换为像素,因为我还没有对话框的HWND。
基本上我的问题是使用制表符控件管理窗口控件的最佳方法是什么。因此,如果我有一个制表符控件并且用户从tab1更改为tab2,我希望向用户显示不同的控件。
答案 0 :(得分:3)
MSDN的基本思想是在每个选项卡中拥有自己的HWND控件。这样做的好处是,您可以通过隐藏/显示父HWND来隐藏/显示HWND中的所有控件。这意味着从一个选项卡转到另一个选项卡只是隐藏一个容器HWND并显示另一个容器的情况,这比隐藏/显示控件组更简单,更优雅。 (它还使每个窗格的对话处理程序代码保持独立,这通常是您想要的。)但这两种方法都是允许的:创建对话框通常更方便,但您不需要这样做。
这些容器HWND不必是对话框,但使用对话框意味着窗口将为您填充.rc文件中的内容并自动处理键盘选项卡。如果您创建自己的HWND,则必须自己完成。您可以采用混合方法:从对话框开始,但如果需要,可以在WM_INITDIALOG处理程序中添加自己的控件,甚至可以处理WM_SIZE以进行自定义布局,以使控件更好地适应。
如果你去创建自己的HWND路由,请查找IsDialogMessage(),以便为您自己的HWND添加键盘标签支持的简单方法;并检查WS_EX_CONTROLPARENT样式,以便标签本身和容器HWND中的控件之间的标签工作。
Re:“问题是大小是在对话框单元中,我无法将其转换为像素,因为我还没有对话框的HWND。” - 您可以使用CreateDialog将对话框创建为不可见 - 从.rc文件中省略WS_VISIBLE - 然后您可以在显示之前根据需要进行测量/调整大小。