Radio Buttons in MFC (Visual Studio 2008 / C++)

This is a quick and dirty description of how to use radio buttons in MFC, written because I could not find this information in a single place on the web.

In the dialog editor:

  • Create a new group with the group box control and set a meaningful caption
  • Add radio button controls inside the group
  • The radio buttons must have ascending tab order
  • The first radio button (in tab order) must have the property “Group” set to True
  • All other radio buttons must have the property “Group” set to False

It should look similar to this:

In the header file defining the dialog class:

  • Add a member variable of type int that will store which radio button is selected (none: -1, first: 0, second: 1, and so on).
    Example:
    int m_nLEDType;

In the cpp file implementing the dialog class:

  • In the constructor initialize the member variable (with 0)
    Example:
    CDialogConfig::CDialogConfig(CMainFrame* pMainFrame) : CDialog(CDialogConfig::IDD, pMainFrame), m_nLEDType(0)
  • In DoDataExchange add a call to DDX_Radio similar to the following (where IDC_RADIO_LEDTYPE1 is the ID of the first radio button):
    DDX_Radio(pDX, IDC_RADIO_LEDTYPE1, m_nLEDType);

When you want to read which radio button is selected:

  • Call UpdateData with a parameter of true (indicates reading):
    UpdateData (TRUE);
  • After UpdateData has been called, the member variable (m_nLEDType in this example) has the current state of the buttons.

When you want to select one of the buttons programmatically:

  • Set the member variable to the correct value (none selected: -1, first button selected: 0, second button selected: 1, and so on)
  • Call UpdateData with a parameter of false (indicates writing):
    UpdateData (FALSE);

, , ,

5 Responses to Radio Buttons in MFC (Visual Studio 2008 / C++)

  1. Gerorge June 1, 2012 at 08:23 #

    Thank you very much!

    • ju to March 29, 2013 at 14:03 #

      thanks!!!

  2. liviu August 7, 2013 at 16:09 #

    Hi,

    It does not work when I have multiple group boxes (each of them with radio controls) on my CDialog. If I select a radio button from one group, another radio button from another group gets modified.

  3. Henri de Feraudy October 9, 2013 at 07:54 #

    The information is clear and practical, but it leaves out one particular scenario:
    suppose I want to disable the radio buttons.
    Then I must name them, and somehow establish a relation between their ID’s and the appropriate data structures.

    • Henri de Feraudy October 9, 2013 at 08:01 #

      OK, I found a solution, it goes like this
      GetDlgItem(IDC_PCA_RADIO1)->EnableWindow(FALSE);

Leave a Reply