您的位置:首页 > 其它

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

2017-06-25 00:03 393 查看
资料时间:2009-12-02之前
分享时间:2009-12-02到百度空间,空间关闭,重新整理

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

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

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

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

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

实现效果:



实现步骤

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.最后实例化对应的对象,加载对应的资源.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: