- ベストアンサー
親ウィンドウの変数の変更
以下のようにクライアント領域をダブルクリックして、モーダルダイアログを表示し ダイアログからCPPPViewのメンバ変数flgを変更しましたが、 CPPPView内では変更結果が反映させていません。 どうしてなのでしょうか? またどうすれば変更されるようになりますか? void CPPPView::OnLButtonDblClk(UINT nFlags, CPoint point) { CHenkouDlg dlg; dlg.DoModal(); // ここではflgが99になっていない CView::OnLButtonDblClk(nFlags, point); } void CHenkouDlg::OnOK() { CPPPView* my = (CPPPView*)GetParent(); my->flg=99; CDialog::OnOK(); }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>CPPPView* my = (CPPPView*)GetParent(); >my->flg=99; 親ウィンドウはViewではありません。 この処理はメモリ破壊を起こしてます。 親ウィンドウのViewウィンドウを取得する必要があります。 CPPPView* my = (CPPPView*)((CFrameWnd*)GetParent())->GetActiveView();
その他の回答 (2)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
> flg=dlg.aa; いいんじゃないですか?それで。 あとは無理やりなことしか思いつかないですけど。
お礼
回答ありがとうございます。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
void CPPPView::OnLButtonDblClk(UINT nFlags, CPoint point) { CHenkouDlg dlg(this); // 変更 dlg.DoModal(); CView::OnLButtonDblClk(nFlags, point); } void CHenkouDlg::OnOK() { CPPPView* my = (CPPPView*)m_pParentWnd; // 変更 my->flg=99; CDialog::OnOK(); }
お礼
#1さん #2さん回答ありがとう御座います。 どちらの方法でもうまく行きました。 改めて色々な方法が有るものだなと思いました。 そこで、逆にCPPPView内から値を取得する場合、以下の方法が一般的?だと思うのですが、 (実はこの方法が分からなくて最初の質問をしました) これ以外にも方法があれば紹介下さい。 void CPPPView::OnLButtonDblClk(UINT nFlags, CPoint point) { CHenkouDlg dlg; dlg.DoModal(); flg=dlg.aa; CView::OnLButtonDblClk(nFlags, point); } void CHenkouDlg::OnOK() { aa=99; CDialog::OnOK(); }
お礼
#1さん #2さん回答ありがとう御座います。 どちらの方法でもうまく行きました。 改めて色々な方法が有るものだなと思いました。 そこで、逆にCPPPView内から値を取得する場合、以下の方法が一般的?だと思うのですが、 (実はこの方法が分からなくて最初の質問をしました) これ以外にも方法があれば紹介下さい。 void CPPPView::OnLButtonDblClk(UINT nFlags, CPoint point) { CHenkouDlg dlg; dlg.DoModal(); flg=dlg.aa; CView::OnLButtonDblClk(nFlags, point); } void CHenkouDlg::OnOK() { aa=99; CDialog::OnOK(); }