分享时间: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);//重绘边框
}
}
}