我有一个动态创建得工具栏(具体来说就是视图全屏后的一个退出全屏的按钮),使用如下代码进行创建:
m_pwndFullScrnBar=new CToolBar;
if (!m_pwndFullScrnBar->Create(this,CBRS_SIZE_DYNAMIC|CBRS_FLOATING) ||
!m_pwndFullScrnBar->LoadToolBar(IDR_FULLSCREEN))
{
TRACE0("Failed to create toolbar\n");
return; // fail to create
}这样出来的工具栏按钮,带有“×”,要是哪个SB用户点击这个按钮关闭了工具栏,那么就找不到退出全屏的办法了。
请问:有什么办法使创建的这个工具栏没有“×”按钮?
m_pwndFullScrnBar=new CToolBar;
if (!m_pwndFullScrnBar->Create(this,CBRS_SIZE_DYNAMIC|CBRS_FLOATING) ||
!m_pwndFullScrnBar->LoadToolBar(IDR_FULLSCREEN))
{
TRACE0("Failed to create toolbar\n");
return; // fail to create
}这样出来的工具栏按钮,带有“×”,要是哪个SB用户点击这个按钮关闭了工具栏,那么就找不到退出全屏的办法了。
请问:有什么办法使创建的这个工具栏没有“×”按钮?
有了思路,下面来看看具体的实现代码,我们先从CToolBar派生一个新类CToolBarEx,因为我们的目的是在浮动工具条时去掉“关闭”按钮,所以仅仅判断工具条是否浮动就可以了,这一点用CControlBar类的属性判断函数可以做到: BOOL IsFloating() const;
在新类中添加一个成员变量,用它表示“关闭”按钮的状态: BOOL m_bMenuRemoved;
当我们去掉主框架的系统菜单属性时,它的值为TRUE。
接着,我们需要一个m_pDockBar成员父窗口的指针,以便检查它是否确实为CDockFrameWnd,此时我们用到了 m_pDockBar,用它来判断父窗口类型,注意保证它是一个有效指针。这样我们就可以放心地从CToolBar中去掉系统菜单。下面是处理ON_WM_WINDOWPOSCHANGED消息的代码: void CToolBarEx::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos)
{
CToolBar::OnWindowPosChanged(lpwndpos);
// should only be called once, when floated.
if( IsFloating() )
{
if( m_pDockBar && !m_bMenuRemoved )
{
CWnd* pParent = m_pDockBar->GetParent();
if( pParent->IsKindOf(RUNTIME_CLASS(CMiniFrameWnd)))
{
pParent->ModifyStyle( WS_SYSMENU, 0, 0 );
m_bMenuRemoved = TRUE;
}
}
}
else if( m_bMenuRemoved ) {
m_bMenuRemoved = FALSE;
}
}
这是我在VCKbase上看到的,你看能不能用?
因为我是采用了拆分窗口,将其中一个view放大为全屏时,才动态创建了一个“退出全屏”的浮动工具栏,此时屏幕上除了这一个按钮之外没有其他任何菜单或控件。所以需要在该工具栏创建的时候就设置属性,而不是等到“工具栏被拖动”的消息才来判断是否浮动。
--------------------------------------------------------------------
那也是不一定要去掉关闭按钮,其他方法用ESC键退出也可以啊!
处理OnKeyDown消息,判断键值
if(nChar==VK_ESCAPE)
....//退出全屏
工具条类CToolBar::Create 的调用格式如下:
BOOL Create( CWnd* pParentWnd, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP,
UINT nID = AFX_IDW_TOOLBAR );其中参数pParentWnd用来确定指向工具条父窗口的指针;参数dwStyle用来确定工具条的风格,其取值如下;参数nID用来确定工具条子窗口的标识符。
CBRS_TOP 表示工具条在框架窗口的顶部
CBRS_BOTTOM 表示工具条在框架窗口的底部
CBRS_NOALIGN 表示工具条在父窗口改变大小时不响应
CBRS_TOOLTIPS 表示工具条具有动态提示功能
CBRS_SIZE_DYNAMIC 表示工具条是静态的不能改变
CBRS_SIZE_FIXED 表示工具条是动态的可以改变
CBRS_FLOATING 表示工具条是浮动的
CBRS_FLYBY 表示状态条上显示工具条中按钮的信息
CBRS_HIDE_INPLACE 表示工具条隐藏
既然你已经指定了浮动属性,上面的判断它也可以满足吧!