在界面有放了许多,同类的控件,想通过定义数组形式
更好高效使用它们,如何实现?

解决方案 »

  1.   

    HWND btnHwnd[10];//按钮句柄数组
    btnHwnd[0]=GetDlgItem(GetSafeHwnd(),IDC_BUTTON1);
    .....
    .....
    .....
    btnHwnd[9]=GetDlgItem(GetSafeHwnd(),IDC_BUTTON10);
      

  2.   

    参照以上代码为何出:
    error C2664: 'void __thiscall CWnd::GetDlgItem(int,struct HWND__ ** ) const' : cannot convert parameter 1 from 'struct HWND__ *' to 'int'
            This conversion requires a reinterpret_cast, a C-style cast or function-style cast错误请指教?
      

  3.   

    ::GetDlgItem(GetSafeHwnd(),IDC_BUTTON1);
      

  4.   


    兄台照您方法是可以声明了,这样用就
    ((CButton*)GetDlgItem(btnHwnd[0]))->EnableWindow(false);
     出提示:
    error C2664: 'class CWnd *__thiscall CWnd::GetDlgItem(int) const' : cannot convert parameter 1 from 'struct HWND__ *' to 'int'
            This conversion requires a reinterpret_cast, a C-style cast or function-style cast还是使用就不通?还敬请指点!!谢谢
      

  5.   

    在类里面定义:
    CButton m_button[10];
    写一个函数:
    CreateButton()
    {
        for(int i=0;i<10;i++)
        {
            m_button[i].Create(..........);
        }
    }
      

  6.   

    ::GetDlgItem(GetSafeHwnd(),IDC_BUTTON1); 得到的是窗口句柄不是ID要这样用
    ::EnableWindow(btnHwnd[0], FALSE);
      

  7.   

    按照你的用法,该如此定义UINT CtrlIDs[10];//控件ID 数组
    CtrlIDs[0] = IDC_BUTTON1;
    //其他ID
    CtrlIDs[9] = IDC_BUTTON9;//访问之
    for(int n=0; n<10; n++){
     GetDlgItem(btnHwnd[n])->EnableWindow(FALSE);
    }
      

  8.   

    上面 GetDlgItem(btnHwnd[n])->EnableWindow(FALSE); btnHwnd[n]写错了改成CtrlIDs[n]如果控件比较多,可使用动态数组,例如CUIntArray CtrlIDs;//控件ID 数组
    CtrlIDs.Add(IDC_BUTTON1);
    //其他ID
    CtrlIDs.Add(IDC_BUTTON9);;//访问之
    for(int n=0; n<10; n++){
    GetDlgItem(CtrlIDs[n])->EnableWindow(FALSE);
    }
      

  9.   

    如“SoLike”提示问题解决了一半,解决了ID数组,
    GetDlgItem(CtrlIDs[n])->EnableWindow(FALSE); 只能控制基本属性之类。
    但是能否:
         窗口中有IDC_EDIT1,IDC_EDIT2,IDC_EDIT3个控件我想创建对应的数组来操作它们,可是
    CEdit eidt[3];
            
             int style=WS_CHILD|WS_CLIPSIBLINGS|WS_EX_TOOLWINDOW|WS_BORDER;
    edit[0].Create(style,CRect(0,0,0,0),this,IDC_EDIT1);
    edit[1].Create(style,CRect(0,0,0,0),this,IDC_EDIT2);
    edit[2].Create(style,CRect(0,0,0,0),this,IDC_EDIT3);
             
             edit[0].SetLimitText(4);
    edit[1].GetWindowText(str);
    edit[2].SetWindowText("ok");
    我想这样创建数组,但是窗口中的控件IDC_EDIT1,IDC_EDIT2,IDC_EDIT3毫无反映??这是为何?
    像这种情况如何创建与窗口ID对应的可使用其各属性的数组。敬请大虾执教,谢谢..
      

  10.   

    CEdit* edits[3];
    edits[0]=(CEdit*)GetDlgItem(IDC_EDIT1);
    //...
    edits[2]=(CEdit*)GetDlgItem(IDC_EDIT2);CString strTxt;
    for(int n=0; n<3; n++){
     strTxt.Format(_T("edit%d"), n);
     edit[n]->SetWindowText(strTxt);
    }