首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MFC单选按钮- DDX_Radio和DDX_Control行为

MFC单选按钮- DDX_Radio和DDX_Control行为
EN

Stack Overflow用户
提问于 2009-07-22 14:21:00
回答 2查看 20.7K关注 0票数 9

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

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

代码语言:javascript
复制
DDX_Radio(pDX, RB_LEFT, mRBLeftRight);

其中mRBLeftRightinteger类型的成员变量。我还需要编辑按钮属性,所以我想使用DDX_Control将它们映射到成员变量mRBLeftmRBRight (CButton)上:

代码语言:javascript
复制
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函数中,我执行以下调用:

代码语言:javascript
复制
mRBLeft= ((CButton*)GetDlgItem(RB_LEFT));
mRBRight = ((CButton*)GetDlgItem(RB_RIGHT));

现在只要我不使用mRBLeft就没问题,但是如果我使用了,就会在DoDataExchange上崩溃。真正让我困惑的是,如果我用((CButton*)GetDlgItem(RB_LEFT)->SetCheck(true)修改我的左单选按钮,它就可以工作了。那么有什么不同呢?

(我知道这对little来说有很多麻烦,但我只想了解其中的机制)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-07-22 14:59:49

TBH它比JC的帖子更容易让你相信。

代码语言:javascript
复制
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即可指向该组中单选按钮的索引。

票数 9
EN

Stack Overflow用户

发布于 2009-07-22 14:55:24

我在这里找到了答案:http://www.flounder.com/getdlgitem.htm

同时使用DDX_ControlDDX_Radio有一个问题:)这是一个绕过这个问题的小技巧。

单选按钮变量

另一个内在的问题,代表了微软某种奇怪的哲学观点,那就是你不能为单选按钮创建控制变量。这没有任何意义。他们有一些奇怪的想法,那就是你操作单选按钮的唯一方法就是通过索引。这是无可救药的不足。因此,您必须经历一些严重的扭曲才能获得单选按钮的控制变量。

您必须做的第一件事是返回并将所有单选按钮标记为具有WS_GROUP样式。只有WS_GROUP样式的单选按钮才能有控制变量。但是,如果您用WS_GROUP标记所有这些变量,创建控制变量,然后删除WS_GROUP属性,那么一切都会正常工作,谢谢。我们为什么要经历这些额外的步骤是没有任何意义的,但就像派生类的问题一样,我多年来一直在抱怨这个问题,但没有任何效果。我的问题是我总是忘记返回和撤消所有的WS_GROUP属性,所以在这之后我第一次运行程序时,我发现我所有的单选按钮都是一键组合。哇哦。$#%!修复并重新编译/重新链接。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1165619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档