1. 程式人生 > >MFC--父與子對話方塊之間的傳值

MFC--父與子對話方塊之間的傳值

今天同學讓我搞一個MFC的父對話方塊和子對話方塊的傳值,搞了接近一個小時,真的是發現,很多看起來簡單的東西,當真正要用的時候才發現自己是多麼的眼高手低,

程式設計一定要多寫、、多練!!

1:建立一個MFC應用程式(基於對話方塊的);

2:新增一個“”傳送訊息“”按鈕,和一個編輯框(新增變數-CEdit  m_edit1 ,CString m_strSendMessage);

3:新建一個對話方塊,同樣新增一個”回傳訊息到父對話方塊“”按鈕和一個編輯框(新增變數-CEdit  m_edit2 ,CString m_strGetMessage);

4:給子對話方塊新增一個初始化程式:選擇類檢視--選擇MFC類嚮導-虛擬函式-新增OnInitDialog函式,以下是初始化程式碼,以便在後面開啟子視窗的時候,賦值顯示

BOOL CGetMessage::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// TODO:  在此新增額外的初始化
	m_edit2.SetWindowTextW(m_strGetMessage);
	return TRUE;  // return TRUE unless you set the focus to a control
	// 異常: OCX 屬性頁應返回 FALSE
}
5:“傳送訊息”按鈕,雙擊新增訊息響應函式,建立一個非模式的對話方塊
void CCSendMessageDlg::OnBnClickedButton1()
{
	// TODO: 在此新增控制元件通知處理程式程式碼
	CString str;
	m_edit1.GetWindowTextW(str);
	CGetMessage *dlg=new CGetMessage();
	dlg->m_strGetMessage=str;
	dlg->Create(IDD_DIALOG1);
	dlg->ShowWindow(SW_SHOWNORMAL);
}

6:雙擊回傳訊息到父視窗按鈕,新增訊息響應函式

GetParent()獲取父視窗的指標,如果視窗是子視窗,則返回值是父視窗控制代碼,如果無則返回NULL。

GetWindowText是Windowa API的一個巨集,在WinUser.h中根據是否已定義Unicode被分別定義為GetWindowTextW和GetWindowTextA。

void CGetMessage::OnBnClickedButton1()
{
	// TODO: 在此新增控制元件通知處理程式程式碼
	CCSendMessageDlg *p=(CCSendMessageDlg*)GetParent();
	CString str;
	m_edit2.GetWindowTextW(str);
	p->m_edit1.SetWindowText(str);

}

7:結果圖。