- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个 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)
它会起作用的。这有什么区别?
(我知道这很麻烦,但我只是想了解其中的机制)
最佳答案
TBH 它比 JC 的帖子更容易让您相信。
DDX_Control( pDX, IDC_RADIO3, m_r3 );
DDX_Control( pDX, IDC_RADIO4, m_r4 );
m_Val = 0;
DDX_Radio( pDX, IDC_RADIO3, m_Val );
您需要用 WS_GROUP
标记组中的第一个单选按钮(在本例中为 IDC_RADIO3
)。您现在可以开始了,它会自动选择 IDC_RADIO3
)。
现在要使 m_Val
保持最新,可能值得在组中的所有单选按钮上放置一个点击处理程序。在该函数内,简单地调用 UpdateData( TRUE );
m_Val
现在将指向组中单选按钮的索引。
关于c++ - MFC 单选按钮 - DDX_Radio 和 DDX_Control 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1165619/
我有一个 MFC 对话框,其中有两个单选按钮。我把它们放在一个很好的组中,它们的 IDC 一个接一个(RB_LEFT,RB_RIGHT)。 我想使用 DDX_Radio,这样我就可以使用整数值访问按钮
我有一个带有单选按钮的对话框,每组有 4 个按钮。DoDataExchange 中的 DDX_Radio(pDX, D_RADIO_GROUPLEAD, intToStore) 用于保存和加载。它工作
我是一名优秀的程序员,十分优秀!