如何在选项卡控件页面中显示对话框?

时间:2011-06-04 15:23:52

标签: c++ visual-studio-2008 winapi

如何在Tab控件对象中当前打开的选项卡中设置另一个对话框?

我正在Visual Studio 2008资源编辑器中创建Tab控件(或者如何调用它?),我为选项卡控件创建了IDD_FORMVIEW对话框。

我知道如何初始化标签文本,使用WM_NOTIFY消息处理当前选中的标签等,但我缺少的是:如何将我的其他对话框的句柄发送到标签控制页面以显示那个对话框?

1 个答案:

答案 0 :(得分:2)

作为对话框的所有“标签页”应设置为创建的选项卡的子项。更改选项卡后,您将收到一条通知消息,您可以在DialogProc中处理,如下所示:

case WM_NOTIFY: {
    switch( ( ( LPNMHDR ) lParam) -> code ) {
    case TCN_SELCHANGE: {
      if( TabCtrl_GetCurSel( ( ( LPNMHDR ) lParam) -> hwndFrom ) == 0 ) {
        ShowWindow( hwndPathSettings, SW_SHOW );
        ShowWindow( hwndStartSettings, SW_HIDE );
      } else {
        ShowWindow( hwndPathSettings, SW_HIDE );
        ShowWindow( hwndStartSettings, SW_SHOW );
      }

      break;
    }

正如您所看到的,当用户更改选项卡时,代码会显示新选项卡子项并隐藏旧项目符号。在这种情况下,hwndPathSettings和hwndStartSettings是子对话框的窗口句柄。

要把它放在上下文中,在你的WM_INITDIALOG中你可能会有一些类似的代码来设置标签:

    HWND   hwndTab = GetDlgItem( hwndDlg, IDC_TAB );
    TCITEM tci     = {0};
    tci.mask       = TCIF_TEXT;
    tci.pszText    = _T("Path");

    TabCtrl_InsertItem( hwndTab, 0, &tci );

    tci.pszText = _T("Run on Start");
    TabCtrl_InsertItem( hwndTab, 1, &tci );

    hwndPathSettings  = CreateDialogParam( GetModuleHandle( NULL ),
      MAKEINTRESOURCE( IDD_PATHSETTINGS ), hwndTab, PathSettingsProc, lParam );
    hwndStartSettings = CreateDialog( GetModuleHandle( NULL ),
      MAKEINTRESOURCE( IDD_STARTSETTINGS ), hwndTab, StartSettingsProc );
    break;