SOFTIST 编程方法筆記编程方法筆記 目录

对话栏的实现方法(VC++)

本文纪录对话框工具栏在View/Doc/Frame结构上的实现方法。

1.创建View/Doc/Frame工程,作实现对话框工具栏的准备。

2.为对话框工具栏准备一个对话框的资源。风格是“child”,边界是“None”。ID临时定为IDD_DIALOG1。为了试验,在对话框上贴上一个Edit和一个按钮。

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("未能创建工具栏\n");
		return -1;      // 未能创建
    }

    if (!m_wndStatusBar.Create(this) ||
        !m_wndStatusBar.SetIndicators(indicators,
          sizeof(indicators)/sizeof(UINT)))
    {
		TRACE0("未能创建状态栏\n");
		return -1;      // 未能创建
    }

    // ダイアログバーの生成
    if(!m_dlgbarTest.Create(this, IDD_DIALOG1, WS_VISIBLE | CBRS_LEFT, AFX_IDW_TOOLBAR))
    {
		TRACE0("未能创建对话框工具栏\n");
		return -1;      // 未能创建
    }
    m_dlgbarTest.EnableDocking(CBRS_ALIGN_ANY);


    //TODO: 如果不需要工具栏可停靠,则删除这三行 
    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的MESSAGE-MAP上。例,点击按钮后在Edit上显示"Clicked."。 
void CMainFrame::OnButton1() 
{
    m_dlgbarTest.GetDlgItem(IDC_EDIT1)->SetWindowText(_T("Clicked."));
}
6.对话框工具栏的表示与隐藏。同別的工具栏一样,追加IDM_DIALOG_BAR_DISP菜单来进行对话框工具栏的表示与隐藏。菜单的処理如下。

void CMainFrame::OnUpdateDialogBarDisp(CCmdUI* pCmdUI) 
{
    pCmdUI->SetCheck(m_dlgbarTest.IsWindowVisible());

}

void CMainFrame::OnDialogBarDisp() 
{
    if( m_dlgbarTest.IsWindowVisible() )
        ShowControlBar(&m_dlgbarTest, FALSE, FALSE);
    else
        ShowControlBar(&m_dlgbarTest, TRUE, FALSE);
    
}