关键词:工具栏、动态创建、去掉"×"按钮

njtlxm 2004-06-30 09:03:38
我有一个动态创建得工具栏(具体来说就是视图全屏后的一个退出全屏的按钮),使用如下代码进行创建:
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用户点击这个按钮关闭了工具栏,那么就找不到退出全屏的办法了。
请问:有什么办法使创建的这个工具栏没有“×”按钮?
...全文
187 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kudeet 2004-06-30
  • 打赏
  • 举报
回复
http://dev.csdn.net/develop/article/12/12038.shtm
既然你已经指定了浮动属性,上面的判断它也可以满足吧!
北狐狸 2004-06-30
  • 打赏
  • 举报
回复
我也是初学者。。。谢谢lixiaosan(小三) 、 laiyiling(最熟悉的陌生人) 当然还有njtlxm (似是故人来) 。。。
njtlxm 2004-06-30
  • 打赏
  • 举报
回复
楼上的,我创建的时候已经是浮动的了,请看给出的代码。
Kudeet 2004-06-30
  • 打赏
  • 举报
回复
你也可以直接在创建的时候就指定为浮动的。
工具条类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 表示工具条隐藏
Kudeet 2004-06-30
  • 打赏
  • 举报
回复
要是哪个SB用户点击这个按钮关闭了工具栏,那么就找不到退出全屏的办法了。
--------------------------------------------------------------------
那也是不一定要去掉关闭按钮,其他方法用ESC键退出也可以啊!
处理OnKeyDown消息,判断键值
if(nChar==VK_ESCAPE)
....//退出全屏
njtlxm 2004-06-30
  • 打赏
  • 举报
回复
多谢楼上两位,不过还是不行。
因为我是采用了拆分窗口,将其中一个view放大为全屏时,才动态创建了一个“退出全屏”的浮动工具栏,此时屏幕上除了这一个按钮之外没有其他任何菜单或控件。所以需要在该工具栏创建的时候就设置属性,而不是等到“工具栏被拖动”的消息才来判断是否浮动。
scmsir 2004-06-30
  • 打赏
  • 举报
回复
如果我写得不明白,你可以看第十八期。
scmsir 2004-06-30
  • 打赏
  • 举报
回复
首先,我们来确定实现的思路,因为我们要实现的功能与工具条有关,所以涉及的类肯定与 CToolBar有关。其次,为了判断工具条浮动后“关闭”按钮的状态,我们需要一个表示状态的成员变量;第三,实现工具条的浮动特性,需要对工具条窗口的ON_WM_WINDOWPOSCHANGED消息进行处理。这个消息负责CToolBar窗口大小、位置或Z坐标的变化,这里为什么不用WM_SIZE/OnSize来处理窗口大小的改变呢?因为仅当涉及窗口大小改变而不涉及窗口位置也改变时才这样调用,所以当浮动工具条时不一定每次都调用处理WM_SIZE/OnSize。我们可以利用 CControlBar 基类的m_pDockBar成员来调用GetParent()以获取工具条的父窗口。从而改变父窗口的式样——屏蔽系统菜单——来达到我们的目的——去掉“关闭”按钮。
有了思路,下面来看看具体的实现代码,我们先从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上看到的,你看能不能用?
lixiaosan 2004-06-30
  • 打赏
  • 举报
回复
http://www.vckbase.com/document/viewdoc.asp?id=533

15,980

社区成员

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

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