MFC--父與子對話方塊之間的傳值
阿新 • • 發佈:2019-01-11
今天同學讓我搞一個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:結果圖。