工具栏创建问题,欢迎各路MFC高手

sgls652709 2011-11-17 02:57:19
先看代码:
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()这个函数才行吗。

...全文
114 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
shen_wei 2011-11-18
  • 打赏
  • 举报
回复
http://codeguru.earthweb.com/forum/showthread.php?p=1113581
这个和你的一样问题。。不明白何原因
sgls652709 2011-11-17
  • 打赏
  • 举报
回复
能讲一下AFX_IDW_TOOLBAR 是怎么冲突的吗?恳请各位路过的同道施援手助我!!!!
shen_wei 2011-11-17
  • 打赏
  • 举报
回复
AFX_IDW_TOOLBAR 你写成自己的定义的数。。1000以上就行
AFX_IDW_TOOLBAR +10 肯定和系统的冲突了。。

隐藏/显示菜单 

void CPicView::OnShowMenu()
{
if(AfxGetMainWnd()-> GetMenu() != NULL)
{
::SetMenu(AfxGetMainWnd()-> GetSafeHwnd(), NULL);
}
else
{
::SetMenu(AfxGetMainWnd()-> GetSafeHwnd(), ::LoadMenu(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDR_MAINFRAME)));
}
}

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧