在VC++程式設計過程中經常會遇到這樣的情況:執行程式的多個地方需要調用同一個對話方塊,但在不同的情況下希望給對話方塊加上不同的標題。開始我們可能會用下面的一段程式以達到這一目的:
CTestDialog dlg;
dlg.SetWindowText(“標題-1");
dlg.DoModal();
利用上述辦法,我們本希望在程式不同的地方,通過設定函數SetWindowText不同的參數,以達到使同一對話方塊具有不同標題的目的,但這樣做是行不通的。
利用這種方法,當執行該段程式時,在一個可以忽略的錯誤之後,對話方塊的標題不會發生任何改變。這是因為,VC++程式設計中,大部分表單是動態建立的。比如上述對話方塊,在對dlg.DoModal的調用之前,雖然已構造了對話方塊的VC++對象,但表單對象還沒有被建立,顯然對一個沒有建立表單對象的對話方塊設定標題是行不通的。另外,dlg.DoModal的調用結束時,對話方塊表單對象將立即被釋放,因此在該函數之後設定對話方塊標題也是不行的。
通過對VC++架構結構中函數的調用順序的分析,我們發現在dlg.DoModal執行的開始時,程式會自動調用對話方塊的一系列初始化函數,其中包括對對話方塊成員函數OnInitDialog的調用,從這裡入手,將找到改變對話方塊標題的辦法。為此,首先為對話方塊引進一個類型為CString的公有成員變數m_strCaption,並將上述程式段改為:
CTestDialog dlg;
dlg.m_strCaption = “標題-1";
dlg.DoModal();
然後重載對話方塊的虛成員函數OnInitDialog如下:
BOOL CTestDialog::OnInitDialog()
{
CDialog::OnInitDialog();
SetWindowText(m_strCaption);
…
return TRUE;
}
通過這種辦法,每次在開啟對話方塊之前,只要將對話方塊公有成員變數m_strCaption設定為一個不同的值,就可使得對話方塊有不同的標題