假如我有20个radio button,都是一组的.要把20个按钮的情况保存到一个变量中.难道要我添加20个单击事件?高手帮忙化简之.

解决方案 »

  1.   

    这个按钮可以将第一个设置为group类型的,然后就可以用类向导添加一个整形变量,当你点击第一个按钮的时候,这个变量值为0,第二个为1……以此类推,直到遇见下一个类型为group的radio button
      

  2.   

    将第一个radio button的group属性设为true,再添加一个变量,这个变量就和20个radio button关联了
      

  3.   

    afx_msg void OnBtnClicked(UINT nCmdID); ON_CONTROL_RANGE(BN_CLICKED, IDC_.., IDC_.., ...); //注意ID号连续
      

  4.   


    是控件变量吗?类别为value的时候没有int选项啊.只有bool类型的控件变量!
      

  5.   

    你把你的第一个radio button的Group属性选中,然后,对这个radio button关联一个int类型的变量,就行了,
      

  6.   

    大哥,请把你的代码发出来.DDX怎么写的.
      

  7.   

    用的2005吧
    说来惭愧
    一直不知道用向导怎么添加成组Radio的整型控制变量
    都是手动添加的
    类似
    DDX_Radio(pDX, IDC_RADIO_FOLDER, m_nType);
      

  8.   

    选择第一个radio,选择属性里的“组”,然后进入类向导,给这个radio添加一个变量,如:m_radio1.
    在消息响应函数中判断,具体代码: if (m_radio1==0)//选择第一个radio
    {
    fun1(); //选择第一个radio时的操作
    }
            else if(m_radio1==1)//选择第二个radio
            {
                    fun2();//选择第二个radio时的操作
            }
            //....依次类推,直到
             else if(m_radio1==19) //选择第20个radio
                   fun20();  //选择第20个radio时的操作
      

  9.   

    那么多的IF,ELSE IF,用switch不好么?
      

  10.   

    void CAdvEditDemoDlg::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CAdvEditDemoDlg)
    DDX_Control(pDX, IDC_EDIT2, m_edt2);
    DDX_Control(pDX, IDC_EDIT1, m_edt);
    //}}AFX_DATA_MAP
    for(int i = 0; i < 7; i ++)
    DDX_Control(pDX, IDC_EDIT3 + i, m_AdvEdit[i]);
    }
    参照上面的方法,处理一下了。那个是处理EDIT控件的,共有7个。m_AdvEdit[i]是7个CEdit对象了。
      

  11.   

    无需20个,
    afx_msg void OnBtnClicked(UINT nCmdID); ON_CONTROL_RANGE(BN_CLICKED, IDC_.., IDC_.., ...); //注意ID号连续这20个控件的ID必须为连续的就行
      

  12.   

    在要获取 变量值时前增加 函数UpdateData(TRUE);不然获取的不是最新的值.
      

  13.   

    void AFXAPI DDX_Radio(CDataExchange* pDX, int nIDC, int& value)
    // must be first in a group of auto radio buttons
    {
    pDX->PrepareCtrl(nIDC);
       HWND hWndCtrl;
       pDX->m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl); ASSERT(::GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP);
    ASSERT(::SendMessage(hWndCtrl, WM_GETDLGCODE, 0, 0L) & DLGC_RADIOBUTTON); if (pDX->m_bSaveAndValidate)
    value = -1;     // value if none found // walk all children in group
    int iButton = 0;
    do
    {
    if (::SendMessage(hWndCtrl, WM_GETDLGCODE, 0, 0L) & DLGC_RADIOBUTTON)
    {
    // control in group is a radio button
    if (pDX->m_bSaveAndValidate)
    {                      
    if (::SendMessage(hWndCtrl, BM_GETCHECK, 0, 0L) != 0)
    {                           
    ASSERT(value == -1);    // only set once
    value = iButton;     
    }
    }
    else
    {
    // select button
    ::SendMessage(hWndCtrl, BM_SETCHECK, (iButton == value), 0L);
    }       //第三个变量1为BST_CHECKED,0为BST_UNCHECHKED
    iButton++;
    }
    else
    {
    TRACE(traceAppMsg, 0, "Warning: skipping non-radio button in group.\n");
    }
    hWndCtrl = ::GetWindow(hWndCtrl, GW_HWNDNEXT); } while (hWndCtrl != NULL &&
    !(GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP));
    }由上可知,一个组内的radio button是可以通过一个int变量存值的.哈哈正确方法:
    DDX_Radio(pDX, IDC_RADIO3, m_nTextRadio);
    int m_nTextRadio;            //就可以了.
    //bool m_nTextRadio;           //或者是这个,只能保存最多二个radio的值...具体方法:选中一组radio button的"头",右键添加value控件变量的时候,里面下拉框只会出现BOOL类型的选项.
              不过可以那个编辑框可以手动输入为int
              
      

  14.   


    void AFXAPI DDX_Radio(CDataExchange* pDX, int nIDC, int& value)
    // must be first in a group of auto radio buttons
    {
    pDX->PrepareCtrl(nIDC);
      HWND hWndCtrl;
      pDX->m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);ASSERT(::GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP);
    ASSERT(::SendMessage(hWndCtrl, WM_GETDLGCODE, 0, 0L) & DLGC_RADIOBUTTON);if (pDX->m_bSaveAndValidate)
    value = -1; // value if none found// walk all children in group
    int iButton = 0;
    do
    {
    if (::SendMessage(hWndCtrl, WM_GETDLGCODE, 0, 0L) & DLGC_RADIOBUTTON)
    {
    // control in group is a radio button
    if (pDX->m_bSaveAndValidate)
    {  
    if (::SendMessage(hWndCtrl, BM_GETCHECK, 0, 0L) != 0)
    {  
    ASSERT(value == -1); // only set once
    value = iButton;  
    }
    }
    else
    {
    // select button
    ::SendMessage(hWndCtrl, BM_SETCHECK, (iButton == value), 0L);
    } //第三个变量1为BST_CHECKED,0为BST_UNCHECHKED
    iButton++;
    }
    else
    {
    TRACE(traceAppMsg, 0, "Warning: skipping non-radio button in group.\n");
    }
    hWndCtrl = ::GetWindow(hWndCtrl, GW_HWNDNEXT);} while (hWndCtrl != NULL &&
    !(GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP));
    }