0

現在、メイン ダイアログのボタンが押されたときに子ダイアログを作成するダイアログ ベースのアプリケーションを MFC で作成しています。子ダイアログには、3 つの編集コントロール ボックスと 1 つのボタンがあります。ボタンが押されると、3 つの編集コントロール ボックスからの情報が取得され、個別の CString として格納されます。これらの CString は、Main Dlg.cpp にある関数に渡されます。その関数は、これらの文字列を受け取り、リスト コントロールに挿入します。プログラムは正常にビルドされ、(子ダイアログの) 追加ボタンが押されるまで実行されます。プログラムがクラッシュする理由がわかりません 引数が正しいように見えますか?2 つのダイアログ ボックス間でこのようなデータを渡すのにこれが最善の方法かどうかもわかりません。それに関するより良いアイデアも高く評価されます。

ポップアップ追加ボタン機能

 void Popup::OnBnClickedPopadd()
   {
    CString str1, str2, str3;
    CThermotronDlg dlg;
    GetDlgItemText(ID_RampEdit,str1);
    GetDlgItemText(ID_DwellEdit,str2);
    GetDlgItemText(ID_TempEdit,str3);

    dlg.ReciveAndDisplay(str1,str2,str3);
   }

受信表示機能

 void CThermotronDlg::ReciveAndDisplay(CString str1, CString str2,CString str3){

    LPCTSTR ramp(str1),dwell(str2),temp(str3);

    MyListEx.InsertItem(1,ramp);
    MyListEx.SetItemText(0,1,dwell);
    MyListEx.SetItemText(0,2,temp);


}
4

1 に答える 1

1

ポップアップ ダイアログで変数を初期化する代わりにCThermotronDlg dlg;、メイン ダイアログのアドレスを見つけて、このダイアログの ReceiveAndDisplay メソッドを直接呼び出す必要があります。m_pMainWndこれを行う方法の 1 つは、アプリケーション オブジェクトのパブリック変数 ( ) にアクセスすることtheAppです。の適切なコードは次のOnBnClickedPopadd()とおりです。

 void Popup::OnBnClickedPopadd()
   {
    CString str1, str2, str3;
    CThermotronDlg *pDlg = (CThermotronDlg*)theApp.m_pMainWnd;
    GetDlgItemText(ID_RampEdit,str1);
    GetDlgItemText(ID_DwellEdit,str2);
    GetDlgItemText(ID_TempEdit,str3);

    pDlg->ReciveAndDisplay(str1,str2,str3);
   }
于 2013-02-06T01:29:33.250 に答える