多文档标题格式为 “主框架标题 - 子框架标题”
修改主框架标题的方式主要有一下两种:
1. 在CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中对成员变量m_strTitle进行直接赋值修改,如m_strTitle = TEXT("My Title")
2. 根据标题栏标题被修改时窗口会接收WM_SETTEXT消息的原理,可以修改处理该消息的函数,如下:
afx_msg LRESULT OnSetText( WPARAM wParam, LPARAM lParam);
ON_MESSAGE(WM_SETTEXT, &CMainFrame::OnSetText)
LRESULT CMainFrame::OnSetText( WPARAM wParam, LPARAM lParam)
{
lParam = (LPARAM)"主窗口标题";
DefWindowProc (WM_SETTEXT, wParam, lParam);
Invalidate();
return 0;
}
修改子框架标题的方式主要是重载CView的virtual void OnTitleChange(LPCTSTR lpszText);方法:
void C...View::OnTitleChange(LPCTSTR lpszText)
{
// TODO: Add your specialized code here and/or call the base class
if (m_pDocument != NULL)
m_pDocument->SetTitle(lpszText);
// CHtmlView::OnTitleChange(lpszText);
}
若视图类是继承CHtmlView,则该方法会在加载完网页后自动调用,lpszText值为网页的title。
若不想把子框架标题添加到主框架标题后,即不显示横杠及以后的内容,可以在CChildFrame::PreCreateWindow(CREATESTRUCT& cs)中添加cs.style &= ~FWS_ADDTOTITLE;
若cs.style &= ~FWS_ADDTOTITLE;添加到CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中,则在主框架中就不会再处理WM_SETTEXT消息
当然这个只能在创建窗口的时候起作用,在程序运行过程中,需要用OnUpdateFrameTitle来更新窗口的标题