2つのラジオボタンがあるMFCダイアログがあります。私はそれらを素敵なグループに入れました、それらのIDCは次々にあります(RB_LEFT, RB_RIGHT)。
DDX_Radio整数値を使用してボタンにアクセスできるように使用したいので、関数で次のDoDataExchangeように呼び出します。
DDX_Radio(pDX, RB_LEFT, mRBLeftRight);
ここで、はタイプmRBLeftRightのメンバー変数ですinteger。また、ボタンのプロパティを編集する必要があるため、を使用DDX_Controlしてメンバー変数にマップしmRBLeft、mRBRight(CButton):
DDX_Control(pDX, RB_LEFT, mRBLeft);
DDX_Control(pDX, RB_RIGHT, mRBRight);
ここで、を呼び出すとDDX_Control、が呼び出されるたびに、処理できないメッセージを強制的に処理するDoDataExchangeため、アプリケーションがクラッシュします。私が理解しているこの部分。DDX_ControlRB_LEFTDDX_Radio
私は使用せずDDX_Control(の呼び出しを削除)、クラスDoDataExchangeのラジオボタン()へのポインターを保持することにしました。CButton*したがって、私のOnInitDialog関数では、次の呼び出しを行います。
mRBLeft= ((CButton*)GetDlgItem(RB_LEFT));
mRBRight = ((CButton*)GetDlgItem(RB_RIGHT));
今、私が使用しない限り、それは問題ないmRBLeftでしょうが、私が使用する場合、バム、クラッシュしDoDataExchangeます。本当に困惑するのは、左
((CButton*)GetDlgItem(RB_LEFT)->SetCheck(true)
のラジオボタンを使用して変更すると機能することです。すっごく違いは何ですか?
(私はそれが少しの面倒なことであることを知っています、しかし私はただメカニズムを理解したいです)