c++ - 如何在选项卡控件页面内显示对话框?

标签 c++ visual-studio-2008 winapi

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

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

我知道如何初始化选项卡文本、使用 WM_NOTIFY 消息处理当前选定的选项卡等,但我缺少的是:如何将其他对话框的句柄发送到选项卡控件页面在那里显示对话框?

最佳答案

所有作为对话框的“标签页”都应设置为所创建标签的子项。更改选项卡时,您将收到一条通知消息,您可以像这样在 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;

关于c++ - 如何在选项卡控件页面内显示对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6237577/

相关文章:

c++ - 关于 Connect 之前我应该​​拥有什么的问题

asp.net - Web 用户控制使用

c - 使用带有 gcc 的 windns.h 编译代码的链接器错误

C++ WinSock 选择本地接口(interface)进行连接

c++ - 静态对象的私有(private)析构函数是如何调用的?

c++ - 使用 boost::spirit 解析任意精度整数

c++ - 为什么要使用 Cstring 而不是 wchar_t

c++ - 如何将 cpp 文件添加到 Visual Studio 2008?

.net - Visual Studio 2008 : Creating Single DLL from Solution with Many Projects

winapi - 带有自定义进度条/C++ 构建器的 SHFileOperation 副本