【旧资料整理】MFC--去除浮动工具栏(CToolBar)或浮动边栏(CDialogBar)关闭按钮真正有效的方法

时间:2021-10-20 03:30:55
资料时间:2009-12-02之前

分享时间:2009-12-02到百度空间,空间关闭,重新整理


今天试着去除浮动边栏的关闭按钮,在网上找了半天也没有找到有效的方法,结合搜出的一些结果,终于找到了真正有效的去除关闭按钮的方法,而且对两类工具栏都有效,发上来和大家分享.

搜出次数最多的解决方法就是下面这两个了:

http://www.vckbase.com/document/viewdoc/?id=533

http://www.codeproject.com/docking/disabletoolbarclose.asp

第一个成功解决了浮动工具栏,但是对边栏无效.第二个方法只是将边栏的关闭按钮变灰.二者一结合就是真正有效的方法.


实现效果:

【旧资料整理】MFC--去除浮动工具栏(CToolBar)或浮动边栏(CDialogBar)关闭按钮真正有效的方法

实现步骤

1.添加对应的类

工具栏继承CToolBar,边栏继承CDialogBar

2.添加WM_MOVE消息响应(因为这两个消息两类工具栏都有),代码如下:


void C***Bar::OnMove(int x, int y) 
{
CDialogBar::OnMove(x, y);

// TODO: Add your message handler code here
//主要步骤都在确保指针正确
CWnd *pWnd = GetParent();
if (pWnd != (CWnd *) NULL)
{
ASSERT_KINDOF(CWnd, pWnd);
pWnd = pWnd->GetParent();//得到父窗口
}
if (pWnd != (CWnd *) NULL)
{
ASSERT_KINDOF(CWnd, pWnd);
if (pWnd->GetSafeHwnd() != AfxGetMainWnd()->GetSafeHwnd())//确保你窗口不是主窗口
{
pWnd->ModifyStyle( WS_SYSMENU, 0, 0 );//去除系统菜单按钮

             ::SendMessage(pWnd->m_hWnd,WM_NCPAINT,0,0);//重绘边框
}
}    
}


2.最后实例化对应的对象,加载对应的资源.