⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_48146.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:48146 发表者:ophir 发表日期:2003-07-28 16:59:33
<br>主题:帮我看看这个问题,我给400分
<br>内容:我在一个程序中做了两个工具条,并想使它们都可以浮动<BR>问题是如果我想使自建工具条浮动,虽然可以通过编译链接,但是一运行就出错。<BR><BR>class CMainFrame : public CMDIFrameWnd<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //只加了一句<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CToolBar *m_pImageToolBar;<BR>}<BR><BR>//用来创建工具条的函数<BR>BOOL CMainFrame::CreateImageToolBar()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if((m_pImageToolBar = new CToolBar)==NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(!m_pImageToolBar-&gt;Create(this,WS_CHILD|WS_VISIBLE|CBRS_TOP,IDW_IMAGETOOLBAR))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(!m_pImageToolBar-&gt;LoadToolBar(IDR_IMAGETOOLBAR))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pImageToolBar-&gt;EnableDocking(CBRS_ALIGN_ANY);<BR>&nbsp;&nbsp;&nbsp;&nbsp;DockControlBar(m_pImageToolBar);//加上这就话就错,去掉就没问题了,可也不能浮动了。<BR>&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<BR>}<BR><BR>int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//建立自定义工具条<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(!CreateImageToolBar())<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRACE0("Failed to create imagetoolbar\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRACE0("Failed to create toolbar\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// fail to create<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (!m_wndStatusBar.Create(this) ||<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;!m_wndStatusBar.SetIndicators(indicators,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sizeof(indicators)/sizeof(UINT)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRACE0("Failed to create status bar\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// fail to create<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);<BR>&nbsp;&nbsp;&nbsp;&nbsp;EnableDocking(CBRS_ALIGN_ANY);<BR>&nbsp;&nbsp;&nbsp;&nbsp;DockControlBar(&amp;m_wndToolBar);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;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>&nbsp;&nbsp;&nbsp;&nbsp;void DockControlBarLeftOf(CToolBar* Bar, CToolBar* LeftOf);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>protected:&nbsp;&nbsp;// control bar embedded members <BR>&nbsp;&nbsp;&nbsp;&nbsp;CToolBar&nbsp;&nbsp;&nbsp;&nbsp;m_wndToolBar1; <BR>&nbsp;&nbsp;&nbsp;&nbsp;CToolBar&nbsp;&nbsp;&nbsp;&nbsp;m_wndToolBar2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR> 第三步: <BR><BR>在 CMainFrame 类实现文件中添加下列方法实现: void CMainFrame::DockControlBarLeftOf(CToolBar* Bar, CToolBar* LeftOf)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;CRect rect;<BR>&nbsp;&nbsp;&nbsp;&nbsp;DWORD dw;<BR>&nbsp;&nbsp;&nbsp;&nbsp;UINT n;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 让 MFC 调整所有浮动工具条的尺寸,以便GetWindowRect的到准确结果<BR>&nbsp;&nbsp;&nbsp;&nbsp;RecalcLayout(TRUE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;LeftOf-&gt;GetWindowRect(&amp;rect);<BR>&nbsp;&nbsp;&nbsp;&nbsp;rect.OffsetRect(1,0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;dw=LeftOf-&gt;GetBarStyle();<BR>&nbsp;&nbsp;&nbsp;&nbsp;n = 0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;n = (dw&amp;CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;<BR>&nbsp;&nbsp;&nbsp;&nbsp;n = (dw&amp;CBRS_ALIGN_BOTTOM &amp;&amp; n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n;<BR>&nbsp;&nbsp;&nbsp;&nbsp;n = (dw&amp;CBRS_ALIGN_LEFT &amp;&amp; n==0) ? AFX_IDW_DOCKBAR_LEFT : n;<BR>&nbsp;&nbsp;&nbsp;&nbsp;n = (dw&amp;CBRS_ALIGN_RIGHT &amp;&amp; n==0) ? AFX_IDW_DOCKBAR_RIGHT : n;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 当矩形使用默认参数时,DockControlBar 将在单独的一行里浮动工具条,<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 通过计算矩形的大小来模拟工具条拖动到指定位置实现浮动。<BR>&nbsp;&nbsp;&nbsp;&nbsp;DockControlBar(Bar,n,&amp;rect);<BR>}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR> 第四步: <BR><BR>在 CMainFrame::OnCreate 中创建工具条:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!m_wndToolBar1.CreateEx(this, TBSTYLE_FLAT | TBSTYLE_LIST, WS_CHILD | WS_VISIBLE | CBRS_TOP<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;!m_wndToolBar1.LoadToolBar(IDR_MAINFRAME))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRACE0("Failed to create toolbar\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// fail to create<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (!m_wndToolBar2.CreateEx(this, TBSTYLE_FLAT | TBSTYLE_LIST, WS_CHILD | WS_VISIBLE | CBRS_TOP<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;!m_wndToolBar2.LoadToolBar(IDR_WINDOW))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRACE0("Failed to create toolbar\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// fail to create<BR>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp; <BR>用 DockControlBarLeftOf 调用代替 DockControlBar调用: m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY);<BR>m_wndToolBar2.EnableDocking(CBRS_ALIGN_ANY);<BR>EnableDocking(CBRS_ALIGN_ANY);<BR>DockControlBar(&amp;m_wndToolBar1);<BR>DockControlBarLeftOf(&amp;m_wndToolBar2,&amp;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>内容:把&nbsp;&nbsp;&nbsp;&nbsp;//建立自定义工具条<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(!CreateImageToolBar())<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRACE0("Failed to create imagetoolbar\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>放到下面这一行的代码的后面阿!!<BR>&nbsp;&nbsp;&nbsp;&nbsp;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 + -