MFC单选按钮组消息处理程序

时间:2017-02-02 11:29:05

标签: c++ visual-studio-2015 mfc radio-button

我在Visual Studio MFC-GUI编程技术方面有两个关于处理VS2015 CE中一组单选按钮的小问题。

我有一个基于对话框的应用程序。此应用程序使用指定的笔在我的对话框上绘制一些线条。 现在我制作了一组单选按钮,可以为笔使用不同的颜色。所以我创建了一个组合框,将单选按钮放入此组框中,启用第一个单选按钮的组属性并检查选项卡顺序,以便所有单选按钮正确顺序。

没关系 - 测试GUI我能够按计划选择一个单选按钮,因为我无法在同一时间绘制一条不同颜色的线时间。现在我在ClassWizard中为第一个单选按钮对象的BN_CLICKED消息添加了一个处理程序,以添加不同颜色笔的选择。

现在是有趣的部分。仅当我单击第一个单选按钮时才会执行此处理程序。启用了group属性的那个。我认为每当我点击该组中的任何单选按钮时都应该执行它。我尝试的下一件事是向所有这些单选按钮添加一个BN_CLICKED-Messagehandler,但ClassWizard没有显示其他单选按钮的BN_CLICKED消息 - 仅适用于启用了group proerty的按钮。

在谷歌搜索后,我读了一篇文章,只要在对话框中双击它就可以为按钮添加BN_CLICKED-Messagehandler。所以我双击了所有的单选按钮,并添加了第一个单选按钮的BN_CLICKED-Messagehandler的调用。这是一个解决方法,所以当我点击任何一个单选按钮(黑色,蓝色,红色等)时,现在我的线条会以不同的颜色绘制。

我有两个问题 - 这个行为是打算的吗?我想我之所以能够在ClassWizard中为第一个单选按钮添加一个BN_CLICKED-Messagehandler的原因是,它将由我的组中的任何单选按钮调用,不是吗?

另一个问题是,我宁愿编写一次处理程序,并且能够告诉类向导使用这个特定的处理程序,而不是为每个按钮创建一个唯一的处理程序。这与这个单选按钮无关。我用一个简单的应用程序对它进行了测试,该应用程序由几个按钮组成 - 它们可以通过类向导附加自己的BN_CLICKED-Messagehandler。当我没有从向导中接受自动生成的函数名并输入我自己的处理函数的名称时,它只是声明它不能覆盖它。如何在类向导中为对象消息选择现有的处理程序,或者这是不可能的,我必须在自己的代码中手动执行此操作?

希望那里的VS2015 MFC Guy能够告诉我......

1 个答案:

答案 0 :(得分:3)

这确实是设计上的。您可能希望每次单击按钮都有不同的行为 - 如果您不这样做;只需将所有BN_CLICKED关联到同一个消息处理程序并删除自动生成的那些消息处理程序。 您也可以使用ON_CONTROL_RANGE(BN_CLICKED,id1,id2,memberFxn) - 确保您的按钮在resource.h中处于相同的范围内 希望有所帮助!