分享时间:2009-12-02到百度空间,空间关闭,重新整理
修改边栏的标题很简单,即调用SetWindowText().但是它不会立即显示在标题栏上,让标题立即显示的方法在网上实在找不到,自己前几天尝试了多半天,最后只是通过调用框架的DockControlBar()重新生成边栏来实现立即显示. 但是自己对这个方法并不满意,今天重新尝试,终于找到了有效且根本的方法.
修改后的标题之所以不立即显示是因为边栏的父窗口是ReBar,
ReBar的父窗口是浮动边栏的框架,显示出来的标题是框架的标题,不是边栏的标题,只是二者初始化时相等.如果通过两次求父窗口指针获得框架的指针来修改框架的标题的话,即GetParent()->GetParent()->
SetWindowText().虽然显示了修改后的标题,但是一但框架移动重绘又恢复了.经过自己尝试,恢复的不是边栏的标题,而是Rebar的标题.所以修改边栏的标题是没有意义的,修改了也不会被显示,修改Rebar的标题才会使修改立即显示.
修改效果:
代码:
CWnd *pWnd = GetParent();//得到父窗口指针
if (pWnd != (CWnd *) NULL)//非空
{
ASSERT_KINDOF(CWnd, pWnd);//有效
pWnd->SetWindowText("新标题");//修改
//修改当前标题,否则只会在边栏移动后更新,方法很多,列出简便的两种
pWnd=pWnd->GetParent();
if(pWnd!=(CWnd *) NULL)//非空
{
ASSERT_KINDOF(CWnd, pWnd);//有效
//方法1,直接修改
pWnd->SetWindowText("新标题");
//方法2,向窗口发送 WM_SIZE消息,让框架自己更新
//::SendMessage(pWnd->m_hWnd,WM_SIZE,0,0);
}
}