プログラミングメモ →目次

ダイアログバーの作成(VC++)

1.フレームベースのプロジェクトを作成します。

2.ダイアログバーのためのダイアログのリソースを作成します。リソースは、スタイルが「チャイルド」、境界線が「なし」としするダイアログです。例えば、IDはIDD_DIALOG1とします。テストのため、エディットとボタンを1つずつ張り付けておきます。

3.CDialogBar型メンバ変数を追加します。CMainFrameクラスに、CDialogBar型のメンバ変数m_dlgbarTestを追加する。

CDialogBar m_dlgbarTest;

4.ダイアログバーをクリエートします。CMainFrame::OnCreate関数に、ダイアログバーを作成するための処理を追加します(赤色で記述している部分)。ここまでしたら、ダイアログバーがアプリを立ち上げたときに表示されます。

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;

    if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, 
                               WS_CHILD | WS_VISIBLE | CBRS_TOP
        | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
        !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
    {
        TRACE0("Failed to create toolbar\n");
        return -1;      // 作成に失敗
    }

    if (!m_wndStatusBar.Create(this) ||
        !m_wndStatusBar.SetIndicators(indicators,
          sizeof(indicators)/sizeof(UINT)))
    {
        TRACE0("Failed to create status bar\n");
        return -1;      // 作成に失敗
    }

    // ダイアログバーの生成
    if(!m_dlgbarTest.Create(this, IDD_DIALOG1, 
                                WS_VISIBLE | CBRS_LEFT, AFX_IDW_TOOLBAR))
    {
        TRACE0("Failed to create toolbar\n");
        return -1;      // 作成に失敗
    }
    m_dlgbarTest.EnableDocking(CBRS_ALIGN_ANY);


    // TODO: ツール バーをドッキング可能にしない場合は以下の3行を削除
    //       してください。
    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar);

    DockControlBar(&m_dlgbarTest);
    m_dlgbarTest.SetWindowText(_T("Test..."));

    return 0;
}
5.ボタンのクリック処理。ボタンの処理ハンドルは、CMainFrameのメッセージマップに追加します。例、ボタンをクリックしたら、エディットに"Clicked."を表示させます。 
void CMainFrame::OnButton1() 
{
    // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
    m_dlgbarTest.GetDlgItem(IDC_EDIT1)->SetWindowText(_T("Clicked."));
}
6.ダイアログバーの表示と非表示。別の ツールバーのように、表示と非表示するには、メニューのIDM_DIALOG_BAR_DISPを追加します。メニューの処理ハンドルは下記のよう記述します。

void CMainFrame::OnUpdateDialogBarDisp(CCmdUI* pCmdUI) 
{
    // TODO: この位置に command update UI ハンドラ用のコードを追加してください
    pCmdUI->SetCheck(m_dlgbarTest.IsWindowVisible());

}

void CMainFrame::OnDialogBarDisp() 
{
    // TODO: この位置にコマンド ハンドラ用のコードを追加してください
    if( m_dlgbarTest.IsWindowVisible() )
        ShowControlBar(&m_dlgbarTest, FALSE, FALSE);
    else
        ShowControlBar(&m_dlgbarTest, TRUE, FALSE);
    
}