2010-10-25 95 views
0

我有一個MS Visual C++ 2005項目,我嘗試在主對話框中顯示一個專門用於顯示可選子窗體對話框的部分。每個子表單將具有相同的大小,但具有不同的佈局。該選擇使用組合框控件執行。我搜索的最佳方式來實現這個功能,我碰到這個類來了,是有人在1999年制定了一個主對話框內處理孩子的對話:在CDialog類型的子表單之間傳遞數據

http://www.codeproject.com/KB/dialog/childdlg.aspx

通過附加修改:

http://www.codeproject.com/KB/dialog/childdlg.aspx?msg=1287#xx1287xx

該代碼適用於選擇和顯示各種子窗體,但我似乎無法將數據從一個子窗體傳遞到另一個。具體來說,每個子表單由幾個編輯控件組成。我希望用戶能夠在子窗體#1上的編輯控件中輸入一個值,並將此值在子窗體#2上的編輯控件或靜態文本控件中回顯。

我試圖通過使用子對話框類(名爲CSubFormType和CDialog的子類)的成員函數來執行此操作,該對象類將在殺死焦點到數據輸入編輯控件(即Box1a)時執行。

空隙CSubFormType :: OnEnKillfocusBox1a(){

p2WndControl = (CWnd*)(GetDlgItem(IDC_Box1a)); //Get pointer to the control dialog box for data entry 

//Inserted here some specific code used to place data entered into IDC_Box1a into extern wchar_t outstr[32] 

SetDlgItemText (IDC_Box1b, outstr); //Echo data entered in IDC_Box1a to IDC_Box1b on same Subform #1 


SetDlgItemText (IDC_Box2, outstr);//Echo data entered in IDC_Box1a to IDC_Box2 on different subform, Subform #2 

}

爲CSubFormType消息映射意味着調用OnEnKillfocusBox1a直接是:

ON_EN_KILLFOCUS(IDC_Box1a,& CSubFormType :: OnEnKillfocusBox1a)

或間接通過:

ON_BN_CLICKED(IDOK,& CSubFormType :: OnBnClickedOk)// CSubFormType :: OnBnClickedOk然後調用OnEnKillfocusBox1a

我遇到的問題是:

1)ON_BN_CLICKED(IDOK,& CSubFormType :: OnBnClickedOk)不在將數據輸入到Box1a後,請求按Enter鍵。相反,主對話框的OnBnClickedOk成員函數被調用。 2)當CSubFormType :: OnEnKillfocusBox1a確實得到執行時(通過鼠標點擊其他地方),它可以將在Box1a中輸入的值回送到同一個子表單#1中的Box1b,但不會將該值回送到子表單#2上的Box2 。

任何有關我需要做什麼來解決這些問題或更好的方法來實現相同的一般功能的指導將不勝感激。

被用於主對話框

組合框選擇部件功能:

空隙CMAIN :: OnCbnSelchange() { INT選擇;

selection = ((CComboBox*)GetDlgItem(IDC_Select))->GetCurSel(); 

switch(selection) 
{ 
    case 0: // Select Subform 1 
     //Do nothing 
     break; 

    case 1: // Select Subform 2 
     SetDlgItemText (IDC_Box2, outstr); //Set Box2 text on Subform #2 
     break; 
} 

m_SubForms.ShowSubForm(selection); 

}

回答

0

同步所有表單時主組合框的選擇而改變。您嘗試在文本框文本更改時立即進行此操作,但這不是必需的,因爲只有一個窗體可見。

+0

感謝您的評論。我將我用於組合框選擇的代碼添加到原始帖子的末尾。是否需要做一些特殊的事情來同步所有表單? – Mike 2010-10-25 17:56:33

+0

我不知道,這是你的要求。 – 2010-10-26 06:06:56