做了一个对话框,有多个Edit控件,等待用户输入。想把用户输入的值与这个对话框“父窗口”中一些变量相对应。比较常规的方法是DoModal之后,
 YY1 = dlg.XX1;
 YY2 = dlg.XX2;
 YY3 = dlg.XX3;
    ......我感觉这些式子是有规律的,但是找不到一种简化的方法,
大家有何高见?非常感谢!

解决方案 »

  1.   

    在dodatachage中,直接印射你的变量.DDX_Text(pDX, IDC_EDIT1, maindlg.m_text);
      

  2.   

    注意放在AFX_DATA_MAP外面,这样不会破坏wizzard
      

  3.   

    查到一种方法如下根据ID区分   
      比如你可以这样   
      IDC_XXX1,IDC_XXX2,   
      ..................   
      IDC_XXX29,IDC_XXX30   
        
      定义一个数组变量,比如a[i],与这些控件交换数据   
      定义一个宏#define   val(n)   IDC_XXX##n   
        
      如果你要对控件ID赋值,   
      for(int   i=0;i<30;i++)   
      SetDlgItemText(val(i),a[i]);   
      如果从控件中返回变量   
      for(int   i=0;i<30;i++)   
      GetDlgItemText(val(i),a[i]);  
    ----------------------------------------------------------很有创意,但恐怕行不通,因为编译器会预先实现替换,val(i)=〉IDC_XXXi
    而不是想要的IDC_XXX1如何改进,退后实现替换?
      

  4.   

    俺都是在PretranslageMessage中处理。
      

  5.   

    if( VK_RETURN == pMsg->wParam )
    {
    RETURNCASE:
    if( id >= IDC_NUMBER0 && id <= IDC_NUMBER16 )
    {
    if( m_number[ id - IDC_NUMBER0 + 1 ]->IsWindowVisible() )
    {
    m_number[ id - IDC_NUMBER0 + 1 ]->SetFocus();
    m_number[ id - IDC_NUMBER0 + 1 ]->SetSel( 0, -1 );
    return TRUE;
    }
    else
    {
    m_ok.SetFocus();
    return TRUE;
    }
    }这样只要在控件的id是有规则的就可以处理了。
    实际效果就是IDC_NUMBER0与m_number[ 0 ]绑定,IDC_NUMBER1与m_number[ 1 ]绑定,等等。
      

  6.   

    非常感谢!!不过还是有几个小小的疑问:1 IDC_XXX0就是我在Dialog设计窗口给控件设的名字吧?
    2 我没太看懂哪一句是把控件和变量绑定的语句。  (我想把Edit和一个变量绑定)
    3 绑定的是Value还是Control,我没太看出来。谢谢!!!