2011-06-04 9 views
0

タブコントロールオブジェクトで現在開いているタブ内に別のダイアログボックスを表示するにはどうすればよいですか?タブコントロールページ内にダイアログボックスを表示する方法は?

Visual Studio 2008リソースエディタでタブコントロールを作成しています(またはその呼び出し方法は?)、タブコントロール用にIDD_FORMVIEWダイアログボックスを作成しました。

私はタブのテキストを初期化し、現在選択されているタブをWM_NOTIFYメッセージなどで処理する方法を知っていますが、何が失われているのですか:ダイアログボックスをタブコントロールページに表示してダイアログボックスを表示する方法

答えて

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; 
+0

+1、と私はWTLを使用することをお勧め - それは、ゼロ・オーバーヘッドですWindows APIのラッパー。 – ybungalobill

+0

いいえ、ダイアログボックスはこのコードで変更されますが、ここで使用した矛盾したコードを実際に理解していません。最初の 'hwndPathSettings'宣言は2番目とは異なる機能を使用しています。 3番目のタブにはどのような機能が使用されますか? 'if(TabCtrl_GetCurSel(((LPNMHDR)lParam) - > hwndFrom)== 0)'、それがどのフォームに変更されたかチェックするのでしょうか?なぜゼロとの比較ですか?これはもっとうまくいきません: 'if(TabCtrl_GetCurSel(GetDlgItem(hDlg、IDC_TAB2))== 0)' ..? – Rookie

+0

2番目のコードブロックは、WM_INITDIALOGに含まれるものです。これにより、ページがタブコントロールに挿入され、子が作成されます。最初のコードブロックは、ページ内容を切り替えるタブを変更するハンドラです。既にlParamからhwndTabを取得している場合、GetDlgItemは必要ありません。 –

関連する問題