为什么我的收音机按钮不起作用? [英] Why do my radio buttons not work?

查看:138
本文介绍了为什么我的收音机按钮不起作用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在Visual C ++ 2005中使用MFC对话框应用程序。我的单选按钮是m_Small,m_Medium和m_Large。它们都不会在我的m_Summary编辑框中显示出来。可能是错的?

I'm working on an MFC dialog application in Visual C++ 2005. My radio buttons are m_Small, m_Medium, and m_Large. None of them display what they are supposed to in my m_Summary edit box. What could be wrong?

这是我的代码。

    // Pizza_ProgramDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Pizza_Program.h"
#include "Pizza_ProgramDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
    CAboutDlg();

// Dialog Data
    enum { IDD = IDD_ABOUTBOX };

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

// Implementation
protected:
    DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// CPizza_ProgramDlg dialog




CPizza_ProgramDlg::CPizza_ProgramDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CPizza_ProgramDlg::IDD, pParent)
    , m_Name(_T(""))
    , m_Address(_T(""))
    , m_Phone(_T(""))
    , m_Summary(_T(""))
    , m_Extra(FALSE)
    , m_Pepperoni(FALSE)
    , m_Sausage(FALSE)
    , m_Peppers(FALSE)
    , m_Mushrooms(FALSE)
    , m_Onions(FALSE)
    , m_Eatin(0)
    , m_Medium(0)
    , m_Large(0)
    , m_Takeout(0)
    , m_Delivery(0)
    , m_Small(0)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CPizza_ProgramDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_EDIT_NAME, m_Name);
    DDV_MaxChars(pDX, m_Name, 1000);
    DDX_Text(pDX, IDC_EDIT_ADDRESS, m_Address);
    DDV_MaxChars(pDX, m_Address, 1000);
    DDX_Text(pDX, IDC_EDIT_PHONE, m_Phone);
    DDV_MaxChars(pDX, m_Phone, 1000);
    DDX_Text(pDX, IDC_EDIT_SUMMARY, m_Summary);
    DDV_MaxChars(pDX, m_Summary, 1000);
    DDX_Check(pDX, IDC_CHECK_EXTRA, m_Extra);
    DDX_Check(pDX, IDC_CHECK_PEPPERONI, m_Pepperoni);
    DDX_Check(pDX, IDC_CHECK_SAUSAGE, m_Sausage);
    DDX_Check(pDX, IDC_CHECK_PEPPERS, m_Peppers);
    DDX_Check(pDX, IDC_CHECK_MUSHROOMS, m_Mushrooms);
    DDX_Check(pDX, IDC_CHECK_ONIONS, m_Onions);
}

BEGIN_MESSAGE_MAP(CPizza_ProgramDlg, CDialog)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    //}}AFX_MSG_MAP
    ON_EN_CHANGE(IDC_EDIT_SUMMARY, &CPizza_ProgramDlg::OnEnChangeEditSummary)
    ON_BN_CLICKED(IDOK, &CPizza_ProgramDlg::OnBnClickedOk)
    ON_BN_CLICKED(IDC_BUTTON_PROCESS, &CPizza_ProgramDlg::OnBnClickedButtonProcess)
END_MESSAGE_MAP()


// CPizza_ProgramDlg message handlers

BOOL CPizza_ProgramDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    // Add "About..." menu item to system menu.

    // IDM_ABOUTBOX must be in the system command range.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        CString strAboutMenu;
        strAboutMenu.LoadString(IDS_ABOUTBOX);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }

    // Set the icon for this dialog.  The framework does this automatically
    //  when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE);         // Set big icon
    SetIcon(m_hIcon, FALSE);        // Set small icon

    // TODO: Add extra initialization here

    return TRUE;  // return TRUE  unless you set the focus to a control
}

void CPizza_ProgramDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
        CAboutDlg dlgAbout;
        dlgAbout.DoModal();
    }
    else
    {
        CDialog::OnSysCommand(nID, lParam);
    }
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CPizza_ProgramDlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // device context for painting

        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

        // Center icon in client rectangle
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;

        // Draw the icon
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialog::OnPaint();
    }
}

// The system calls this function to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CPizza_ProgramDlg::OnQueryDragIcon()
{
    return static_cast<HCURSOR>(m_hIcon);
}


void CPizza_ProgramDlg::OnEnChangeEditSummary()
{

    // TODO:  If this is a RICHEDIT control, the control will not
    // send this notification unless you override the CDialog::OnInitDialog()
    // function and call CRichEditCtrl().SetEventMask()
    // with the ENM_CHANGE flag ORed into the mask.

    // TODO:  Add your control notification handler code here
}

void CPizza_ProgramDlg::OnBnClickedOk()
{
    // TODO: Add your control notification handler code here
    OnOK();
}

void CPizza_ProgramDlg::OnBnClickedButtonProcess()
{
    // TODO: Add your control notification handler code here

    UpdateData(TRUE);
    m_Summary += "Customer's Name: ";
    m_Summary += m_Name;
    m_Summary += char(13);
    m_Summary += char(10);
    m_Summary += "Customer's Address: ";
    m_Summary += m_Address;
    m_Summary += char(13);
    m_Summary += char(10);
    m_Summary += "Customer's Phone Number: ";
    m_Summary += m_Phone;


   if (m_Small==TRUE)
{
    m_Summary += char(13);
    m_Summary += char(10);
    m_Summary += "Small Pizza $5.00";
}
   else if (m_Medium==TRUE)
{
    m_Summary += char(13);
    m_Summary += char(10);
    m_Summary += "Medium Pizza $10.00";
}
   else if (m_Large==TRUE)
   { 
       m_Summary += char(13);
       m_Summary += char(10);
       m_Summary += "Large Pizza $15.00";
   }

   if (m_Extra==TRUE)
   {
       m_Summary += char(13);
       m_Summary += char(10);
       m_Summary += "Extra Cheese +$1.00";
   }

      if (m_Pepperoni==TRUE)
   {
       m_Summary += char(13);
       m_Summary += char(10);
       m_Summary += "Pepperoni +$1.00";
   }

         if (m_Sausage==TRUE)
   {
       m_Summary += char(13);
       m_Summary += char(10);
       m_Summary += "Sausage +$1.00";
   }

        if (m_Peppers==TRUE)
   {
       m_Summary += char(13);
       m_Summary += char(10);
       m_Summary += "Peppers +$1.00";
   }

           if (m_Mushrooms==TRUE)
   {
       m_Summary += char(13);
       m_Summary += char(10);
       m_Summary += "Mushrooms +$1.00";
   }
              if (m_Onions==TRUE)
   {
       m_Summary += char(13);
       m_Summary += char(10);
       m_Summary += "Onions +$1.00";
   }

    UpdateData(FALSE);
}


推荐答案

您需要添加一个电话 DDX_Radio 在你的班级的 DoDataExchange 函数中。

You need to add a call to DDX_Radio in your class's DoDataExchange function.

为了这个工作,你应该把你的 m_Small m_Medium m_Large 具有单个整数的成员变量:

For this to work you should replace your m_Small, m_Medium, and m_Large member variables with a single integer:

int m_Size;

假设第一个单选按钮的ID为 IDC_SMALL ,那么 DDX_Radio 调用将是:

Assuming the ID of the first radio button is IDC_SMALL, then the DDX_Radio call would be:

DDX_Radio(pDX, IDC_SMALL, m_Size);

(不幸的是,你不能声明 m_Size 作为枚举,因为 DDX_Radio 期望一个 int

(Unfortunately, you can't declare m_Size as an enum because DDX_Radio expects an int.)

另外,作为 Aiden Ryan正确指出,在Visual Studio资源编辑器中,确保单选按钮在对话框选项卡顺序中顺序显示。第一个单选按钮的Group属性设置为True,其他单选按钮的Group属性设置为False。

Also, as Aiden Ryan correctly points out, in the Visual Studio resource editor ensure that the radio buttons appear sequentially in the dialog tab order. The first radio button should have the Group property set to True and the other radio buttons should have the Group property set to False.

这篇关于为什么我的收音机按钮不起作用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆