📄 subject_48146.htm
字号:
<p>
序号:48146 发表者:ophir 发表日期:2003-07-28 16:59:33
<br>主题:帮我看看这个问题,我给400分
<br>内容:我在一个程序中做了两个工具条,并想使它们都可以浮动<BR>问题是如果我想使自建工具条浮动,虽然可以通过编译链接,但是一运行就出错。<BR><BR>class CMainFrame : public CMDIFrameWnd<BR>{<BR> //只加了一句<BR> CToolBar *m_pImageToolBar;<BR>}<BR><BR>//用来创建工具条的函数<BR>BOOL CMainFrame::CreateImageToolBar()<BR>{<BR> if((m_pImageToolBar = new CToolBar)==NULL)<BR> return FALSE;<BR> if(!m_pImageToolBar->Create(this,WS_CHILD|WS_VISIBLE|CBRS_TOP,IDW_IMAGETOOLBAR))<BR> return FALSE;<BR> if(!m_pImageToolBar->LoadToolBar(IDR_IMAGETOOLBAR))<BR> return FALSE;<BR> m_pImageToolBar->EnableDocking(CBRS_ALIGN_ANY);<BR> DockControlBar(m_pImageToolBar);//加上这就话就错,去掉就没问题了,可也不能浮动了。<BR> return TRUE;<BR>}<BR><BR>int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)<BR>{<BR> if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)<BR> return -1;<BR><BR> //建立自定义工具条<BR> if(!CreateImageToolBar())<BR> {<BR> TRACE0("Failed to create imagetoolbar\n");<BR> return -1;<BR> }<BR> <BR> <BR> if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP<BR> | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||<BR> !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))<BR> {<BR> TRACE0("Failed to create toolbar\n");<BR> return -1; // fail to create<BR> }<BR><BR> if (!m_wndStatusBar.Create(this) ||<BR> !m_wndStatusBar.SetIndicators(indicators,<BR> sizeof(indicators)/sizeof(UINT)))<BR> {<BR> TRACE0("Failed to create status bar\n");<BR> return -1; // fail to create<BR> }<BR><BR> m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);<BR> EnableDocking(CBRS_ALIGN_ANY);<BR> DockControlBar(&m_wndToolBar);<BR><BR> return 0;<BR>}
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:利 回复日期:2003-07-28 17:32:23
<br>内容::)
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:ophir 回复日期:2003-07-28 17:46:56
<br>内容:我自己回答了,有没有人给我400分<BR><BR>第一步: <BR><BR>创建一个MDI工程,一路都选择默认选项。 <BR><BR> 第二步: <BR><BR>在 CMainFrame 类的头文件中添加下列方法以及变量声明: <BR><BR>// Operations<BR>public:<BR> void DockControlBarLeftOf(CToolBar* Bar, CToolBar* LeftOf);<BR> <BR>protected: // control bar embedded members <BR> CToolBar m_wndToolBar1; <BR> CToolBar m_wndToolBar2; <BR> 第三步: <BR><BR>在 CMainFrame 类实现文件中添加下列方法实现: void CMainFrame::DockControlBarLeftOf(CToolBar* Bar, CToolBar* LeftOf)<BR>{<BR> CRect rect;<BR> DWORD dw;<BR> UINT n;<BR> <BR> // 让 MFC 调整所有浮动工具条的尺寸,以便GetWindowRect的到准确结果<BR> RecalcLayout(TRUE);<BR> <BR> LeftOf->GetWindowRect(&rect);<BR> rect.OffsetRect(1,0);<BR> dw=LeftOf->GetBarStyle();<BR> n = 0;<BR> n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;<BR> n = (dw&CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n;<BR> n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n;<BR> n = (dw&CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n;<BR> <BR> // 当矩形使用默认参数时,DockControlBar 将在单独的一行里浮动工具条,<BR> // 通过计算矩形的大小来模拟工具条拖动到指定位置实现浮动。<BR> DockControlBar(Bar,n,&rect);<BR>} <BR> 第四步: <BR><BR>在 CMainFrame::OnCreate 中创建工具条: if (!m_wndToolBar1.CreateEx(this, TBSTYLE_FLAT | TBSTYLE_LIST, WS_CHILD | WS_VISIBLE | CBRS_TOP<BR> | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||<BR> !m_wndToolBar1.LoadToolBar(IDR_MAINFRAME))<BR> {<BR> TRACE0("Failed to create toolbar\n");<BR> return -1; // fail to create<BR> }<BR><BR> if (!m_wndToolBar2.CreateEx(this, TBSTYLE_FLAT | TBSTYLE_LIST, WS_CHILD | WS_VISIBLE | CBRS_TOP<BR> | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||<BR> !m_wndToolBar2.LoadToolBar(IDR_WINDOW))<BR> {<BR> TRACE0("Failed to create toolbar\n");<BR> return -1; // fail to create<BR> } <BR>用 DockControlBarLeftOf 调用代替 DockControlBar调用: m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY);<BR>m_wndToolBar2.EnableDocking(CBRS_ALIGN_ANY);<BR>EnableDocking(CBRS_ALIGN_ANY);<BR>DockControlBar(&m_wndToolBar1);<BR>DockControlBarLeftOf(&m_wndToolBar2,&m_wndToolBar1);<BR> 第五步: <BR><BR>要实现 m_wndToolBar1 和 m_wndToolBar2的浮动。没有工具条资源是不行的,所以还必须在资源文件(.rc)中添加ToolBar1.bmp和ToolBar2.bmp工具条资源,其 ID 分别IDR_MAINFRAME(MFC默认)和 IDR_WINDOW。 <BR> <BR>我随便用向导建立一个程序行了,可放到原来的上又不行了!<BR>我倒! <BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:金鱼王 回复日期:2003-07-28 17:57:13
<br>内容:www.vckbase.net上有源码
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:半路出家.NET 回复日期:2003-07-28 19:19:00
<br>内容:进来拿分!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:IDoIt 回复日期:2003-08-02 11:49:02
<br>内容:把 //建立自定义工具条<BR> if(!CreateImageToolBar())<BR> {<BR> TRACE0("Failed to create imagetoolbar\n");<BR> return -1;<BR> }<BR>放到下面这一行的代码的后面阿!!<BR> EnableDocking(CBRS_ALIGN_ANY);<BR>因为只有调用了EnableDocking()后才可以调用DockControlBar(m_pImageToolBar);//加上这就话就错,去掉就没问题了,可也不能浮动了。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -