これは小ダイアログの設定が上手く行っていないのでしょうか?
そうですね。IDC_TAB1
のタブコントロールに貼り付けるIDD_DIALOG1
とIDD_DIALOG2
の2つのモードレスダイアログボックスが子ウィンドウになっていない為に、タブコントロールと同じレベルの兄弟ウィンドウになっています。
モードレスダイアログボックスのリソーステンプレートとして使用するIDD_DIALOG1
とIDD_DIALOG2
のウィンドウスタイルは、リソースファイル中で以下のようにWS_CHILD
が指定されている必要があります。
IDD_DIALOG1 DIALOGEX 0, 0, 100, 60
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU
...
恐らく今は、自動生成で以下のようにWS_POPUP
が指定されていしまっているのではないかと。
IDD_DIALOG1 DIALOGEX 0, 0, 100, 60
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
WS_CHILD
が指定されていないと、コード上で以下のようにm_ctrlTab
を親ウィンドウとしてCreate
してもm_ctrlTab
が親になりません。
m_pDlg1 = new CDlg1(&m_ctrlTab);
// CDlg1::IDD(IDD_DIALOG1)のウィンドウスタイルを正しく設定しないと、m_ctrlTabが親にならない。
m_pDlg1->Create(CDlg1::IDD, &m_ctrlTab);
タブコントロールのクラス、CTabCtrl
に関する情報はどうも断片的なものが多く、簡潔にまとまっているものとしてはこちらのサイト様の記事がよいように思いました。Windows XP時代のものですが、今でも動作します。
https://www.kazetest.com/vcmemo/dlgintab/dlgintab.htm
記事の下の方にVisual Studio 2017でもプロジェクトを変換することでビルド可能なプロジェクト一式がダウンロード可能となっていますので、サイト様に感謝しつつ、改めて参考にされるのがよろしいかと思います。
ただ、ここからは個人的な意見なのですが、もし、これから新規でMFC(Microsoft Foundation Class)を習熟されようとするのであればお勧めできません。あまり深追いしない方が良いと思います。目的次第ではC#を使って、WPFやWindows Formsで実装することをお勧めします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/17 00:32