读书人

关于工具栏的位置解决方法

发布时间: 2012-03-08 13:30:13 作者: rapoo

关于工具栏的位置
多文档程序
在两个视图间切换是我让部分工具栏隐藏
切换回来时工具栏也重新显示
使用的showwindow

问题:
工具栏隐藏后在对应位置上留有空地
怎样让下面的工作区自动对上去

谢谢

[解决办法]
可以用CFrameWnd::ShowControlBar( CControlBar* pBar, BOOL bShow, BOOL bDelay );来控制工具栏的显示/隐藏

用CFrameWnd::RecalcLayout( BOOL bNotify = TRUE );来控制工具栏的重新布置,来达到你“工具栏隐藏后在对应位置上留有空地
怎样让下面的工作区自动对上去”
的目的
[解决办法]

CRect rcDock=CRect( 0, 0, 0, 0 );
if( pBarPre )
{
pBarPre-> GetDockingFrame()-> RecalcLayout();
pBarPre-> GetWindowRect( rcDock );
rcDock.OffsetRect( 1, 1 );
if( bNextRow )
{
rcDock.left=0;
rcDock.top +=rcDock. Height();

}
}
pMainFrame-> DockControlBar( pBar, nDockBarID, rcDock );


以上代码解释:
bNextRow:true
pBar在pBarPre的下一行停靠,

bNextRow:false
pBar在pBarPre的右边停靠,右边无空间装下,则自动换到下一行。



[解决办法]
CFrameWnd::RecalcLayout See Also
CFrameWnd Overview | Class Members | Hierarchy Chart | CWnd::RepositionBars
Called by the framework when the standard control bars are toggled on or off or when the frame window is resized.

virtual void RecalcLayout(
BOOL bNotify = TRUE
);
Parameters
bNotify
Determines whether the active in-place item for the frame window receives notification of the layout change. If TRUE, the item is notified; otherwise FALSE.

[解决办法]
如果你看一看《visual c++ mfc扩展编程实例》这本书,一定能解决这个问题。

读书人网 >VC/MFC

热点推荐