工具栏创建问题,欢迎各路MFC高手
先看代码:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
//CRect rect(0,0,0,0);
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC,CRect(0,0,0,0),AFX_IDW_TOOLBAR))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
m_wndToolBar.LoadToolBar(IDR_MAINFRAME);
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
//这里创建新的工具栏
if(!m_toolbar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_ALIGN_TOP,CRect(0,0,0,0),AFX_IDW_TOOLBAR)||!m_toolbar.LoadToolBar(IDR_TOOLBAR1))
{
TRACE0("Failed to create new toolbar\n");
return -1;
}
// T}DO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
//这里我实现新建的工具栏停靠
m_toolbar.EnableDocking(CBRS_ALIGN_TOP);
DockControlBar(&m_toolbar);
return 0;
}
问:
(1)if(!m_toolbar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_ALIGN_TOP,CRect(0,0,0,0),AFX_IDW_TOOLBAR)||!m_toolbar.LoadToolBar(IDR_TOOLBAR1))
我将工具栏子窗口标识设成默认的,就是AFX_IDW_TOOLBAR竟然没事,为什么有些地方设成AFX_IDW_TOOLBAR +10,不然的话就会冲突,可是我运行后没有异常啊。
(2)我在菜单中添加一个字菜单叫NewToolBar,然后编写一个函数,实现新菜单的显示和隐藏。代码如下:
void CMainFrame::OnNewToolbar()
{
// TODO: Add your command handler code here
m_pstate = !m_pstate;
if(m_pstate)
{
GetDlgItem(IDR_TOOLBAR1) ->ShowWindow(SW_SHOW);
}
else
{
GetDlgItem(IDR_TOOLBAR1) ->ShowWindow(SW_HIDE);
}
}结果程序能运行,就是一点击NewToolBar子菜单就出现异常,程序退出,理论上上面的函数也是能实现工具栏的显示和隐藏的啊,难道非得用ShowControlBar()这个函数才行吗。