C win32选项卡控件

Jos*_*osh 8 c api winapi tabs

好吧首先使用win32 api编写C语言,没有mfc,没有.net,没有wxwidgets.我已经创建了一个带有WC_TABCONTROL类的窗口,并添加了选项卡,一切正常,除了......我需要在每个选项卡中都有内容,我得到了msdn的印象,我需要为每个页面创建一个对话框,然后在用户选择选项卡时加载对话框.唯一的问题是我的主窗口不是一个对话框,所以使选项卡的对话框完美适合不是太好了.

所以我想知道是否有更好的方法来做到这一点?我想过只是隐藏并显示每个标签的不同控件,但这似乎不是一个好主意.

我想要的是当我的应用程序启动时它将调整窗口和选项卡控件的大小以适应所有选项卡(3-4个选项卡)所需的最小尺寸,并且窗口不会调整大小,我想简化事情一点点.我按照msdn上的示例(将每个对话框加载到内存中,通过每个对话框循环并将RECT设置为所需的最小大小然后调整所有内容)来做到这一点,问题是大小是在对话框单元中而我不能将其转换为像素,因为我还没有对应框的HWND.

基本上我的问题是使用选项卡控件管理窗口控件的最佳方法是什么.因此,如果我有一个制表符控件并且用户从tab1更改为tab2,我希望向用户显示不同的控件.

Bre*_*McK 5

MSDN 的基本思想是让每个选项卡的控件都位于其自己的 HWND 中。这样做的好处是,您可以通过隐藏/显示父 HWND 来隐藏/显示 HWND 中的所有控件。这意味着从一个选项卡转到另一个选项卡只是隐藏一个容器 HWND 并显示另一个容器的情况,这比隐藏/显示一组控件更简单、更优雅。(它还使每个窗格的对话框处理程序代码保持独立,这通常是您想要的。)但这两种方法都是允许的:创建对话框通常更方便,但您不需要这样做。

这些容器 HWND 不必是对话框,但使用对话框意味着 Windows 将为您填充 .rc 文件中的内容并自动处理键盘选项卡。如果您创建自己的 HWND,则必须自己执行此操作。您可以采用混合方法:从对话框开始,但如果需要,可以在 WM_INITDIALOG 处理程序中添加您自己的控件,甚至可以处理 WM_SIZE 来执行自定义布局,以便控件更适合。

如果您选择创建您自己的 HWND 路线,请查找 IsDialogMessage() 以获取向您自己的 HWND 添加键盘选项卡支持的简单方法;并检查 WS_EX_CONTROLPARENT 样式,以便在选项卡本身和容器 HWND 中的控件之间进行选项卡切换。

回复:“问题是尺寸以对话框单位为单位,我无法将其转换为像素,因为我还没有对话框的 HWND。” - 您可以使用 CreateDialog 将对话框创建为不可见 - 从 .rc 文件中省略 WS_VISIBLE - 然后您可以在显示之前适当测量/调整大小。