gpt4 book ai didi

c++ - MFC 单选按钮 - DDX_Radio 和 DDX_Control 行为

转载 作者:可可西里 更新时间:2023-11-01 16:36:38 27 4
gpt4 key购买 nike

我有一个 MFC 对话框,其中有两个单选按钮。我把它们放在一个很好的组中,它们的 IDC 一个接一个(RB_LEFT,RB_RIGHT)。

我想使用 DDX_Radio,这样我就可以使用整数值访问按钮,所以在函数 DoDataExchange 中,我调用:

DDX_Radio(pDX, RB_LEFT, mRBLeftRight);

其中mRBLeftRightinteger类型的成员变量。我还需要编辑按钮属性,所以我想使用 DDX_Control 将它们映射到成员变量 mRBLeftmRBRight(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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com