改變對話方塊的好方法

來源:互聯網
上載者:User
在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設定為一個不同的值,就可使得對話方塊有不同的標題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.