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_Control
RB_LEFT
DDX_Radio
私は使用せずDDX_Control
(の呼び出しを削除)、クラスDoDataExchange
のラジオボタン()へのポインターを保持することにしました。CButton*
したがって、私のOnInitDialog
関数では、次の呼び出しを行います。
mRBLeft= ((CButton*)GetDlgItem(RB_LEFT));
mRBRight = ((CButton*)GetDlgItem(RB_RIGHT));
今、私が使用しない限り、それは問題ないmRBLeft
でしょうが、私が使用する場合、バム、クラッシュしDoDataExchange
ます。本当に困惑するのは、左
((CButton*)GetDlgItem(RB_LEFT)->SetCheck(true)
のラジオボタンを使用して変更すると機能することです。すっごく違いは何ですか?
(私はそれが少しの面倒なことであることを知っています、しかし私はただメカニズムを理解したいです)