上一页 1 2 3 4 5 6 7 8 9 10 11 12 13 下一页 1、窗口标题问题
窗口标题本来不应该成为问题,缺省情况下MDI窗口通过在文档模板中提供的资源ID所提供的对应字符串来确定窗口标题。但是对于SDMV应用,由于各个视口实质上是对应于同一个文挡,因此每个视口都具有相同标题,只不过增加了一个数据用于指示这是第几个视口。如果在各个视口中指明具体的窗口名字,那么由不同的视口启动创建文档产生的窗口标题就不同,这个名字会影响到后继视口。为了作到不同类型的视口如棒图视口和曲线视口具有不同的标题,这就需要一定的技术处理。根据笔者的摸索发现可以采用如下步骤实现:
首先在从标准的MDI子窗口基类CMDIChildWnd派生一个自己的子窗口类,姑且命名为CMyChild,然后在其成员变量中增加一个CString型变量用以存储当前窗口标题:
CString winTitle;
然后在不同的视口创建过程中通过获取父窗口指针按自己的意愿对上述变量进行赋值,程序片段如下:
pChild=(CMyChild*)GetParent(); pChild->winTitle="棒图显示窗口"; | 最后在CMyChild派生类中重载CMDIChildWnd基类中的OnUpdateFrameTitle()函数来强制实现窗口标题的个性化,这一函数在各种类库手册上和联机帮助中都没有,但的确有这样一个具有保护属性的函数用来实现窗口标题的更新操作,这可以从MFC类库的源代码中找到该函数的实现。重载后的源代码如下:
void CMyChild::OnUpdateFrameTitle(BOOL bAddToTitle) { // update our parent window first GetMDIFrame()->OnUpdateFrameTitle(bAddToTitle);
if ((GetStyle() & FWS_ADDTOTITLE) == 0) return; // leave child window alone!
CDocument* pDocument = GetActiveDocument(); if (bAddToTitle && pDocument != NULL) { char szOld[256]; GetWindowText(szOld, sizeof(szOld)); char szText[256];
lstrcpy(szText,winTitle); //Modified by author! if (m_nWindow > 0) wsprintf(szText + lstrlen(szText), ":%d", m_nWindow);
// set title if changed, but don't remove completely if (lstrcmp(szText, szOld) != 0) SetWindowText(szText); } } |
上一页 1 2 3 4 5 6 7 8 9 10 11 12 13 下一页 |