• ベストアンサー

親ウィンドウの変数の変更

以下のようにクライアント領域をダブルクリックして、モーダルダイアログを表示し ダイアログから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(); }

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

>CPPPView* my = (CPPPView*)GetParent(); >my->flg=99; 親ウィンドウはViewではありません。 この処理はメモリ破壊を起こしてます。 親ウィンドウのViewウィンドウを取得する必要があります。 CPPPView* my = (CPPPView*)((CFrameWnd*)GetParent())->GetActiveView();

VitaminBB
質問者

お礼

#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(); }

その他の回答 (2)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>   flg=dlg.aa; いいんじゃないですか?それで。 あとは無理やりなことしか思いつかないですけど。

VitaminBB
質問者

お礼

回答ありがとうございます。

回答No.2

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(); }

VitaminBB
質問者

お礼

#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(); }

関連するQ&A