|
对话栏的实现方法(VC++) 本文纪录对话框工具栏在View/Doc/Frame结构上的实现方法。 1.创建View/Doc/Frame工程,作实现对话框工具栏的准备。 2.为对话框工具栏准备一个对话框的资源。风格是“child”,边界是“None”。ID临时定为IDD_DIALOG1。为了试验,在对话框上贴上一个Edit和一个按钮。
3.追加CDialogBar型的成员变量。在CMainFrame类中,增加CDialogBar型的成员变量m_dlgbarTest。 CDialogBar m_dlgbarTest; 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);
}
|