0

どうか、私はこれを理解しようと一日中過ごしましたが、できません。いくつかの編集ボックスを備えたダイアログボックスから作成されたクラス(artist1)があります。編集ボックスに入力されたデータを取得し、クラスで公開した変数に保存したいと思います。しかし、なぜそれが機能しないのかわかりません。PSはmfcプログラミングに不慣れです。おかげさまで私のアーティストクラスです

void artist1::OnBnClickedButton1()
{
    //artist1 AA=*art1; 

    CEdit* pEdit1 = (CEdit*)GetDlgItem(IDC_EDIT1); 
    pEdit1->GetWindowText(Name1);
    nn=new CString;
    *nn=Name1;
    CEdit* pEdit2 = (CEdit*)GetDlgItem(IDC_EDIT2); 
    pEdit2->GetWindowText(Age1);
    n2=new CString;
    *n2=Age1;
    CEdit* pEdit3 = (CEdit*)GetDlgItem(IDC_EDIT3); 
    pEdit3->GetWindowText(Nationality1);
    n3=new CString;
    *n3=Nationality1;
    CEdit* pEdit4 = (CEdit*)GetDlgItem(IDC_EDIT4); 
    pEdit4->GetWindowText(Group1);
    n4=new CString;
    *n4=Group1;
    CEdit* pEdit5 = (CEdit*)GetDlgItem(IDC_EDIT5); 
    pEdit5->GetWindowText(num_of_albums1);
    n5=new CString;
    *n5=num_of_albums1;
    SH(Name1,Age1,Nationality1,Group1,num_of_albums1);
    art1=this;
//  memcpy(art1,this,sizeof(this));

    //Name_box.SetWindowText(g);
    //AfxMessageBox( Age );
    //AfxMessageBox( Nationality );
    // TODO: Add your control notification handler code here

}

/*bool artist1::SH()
{
    if(NoShow==false)return true;
    else return false;
}*/
void artist1::OnBnClickedButton2()
{
    //Cooplab1View vm;
    NoShow=false;
    nvalidateRect(NULL,NULL);
    EndDialog(IDD_FORMVIEW);

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

これがクラスアーティストのヘッダーです

class artist1 : public CDialogEx
{
    //DECLARE_DYNAMIC(artist1)

public:
    artist1(CWnd* pParent = NULL);   // standard constructor
    virtual ~artist1();
    bool NoShow;
    bool *address;

    CString Albums[5];

    void OnInsertArtist(artist1 &at);
// Dialog Data
    enum { IDD = IDD_FORMVIEW };
private:
    CString Nm;
    CString Ag;
    CString Nation;
    CString group;
    CString No_of_A;
    CString *nnn;

public:
    // artist1* GetTreeObj();
    //virtual CString ShowDetails(CDC* pDC);
    void SH(CString a,CString b,CString c,CString d,CString e)
{
    Name=a;
    Age=b;
    Nationality=c;
    Group=d;
    num_of_albums=e;
}

protected:
    CString Name,Age,Nationality,Group,num_of_albums;
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    CString Name1,Age1,Nationality1,Group1,num_of_albums1;
    DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnBnClickedButton1();
    virtual CString ShowDetails(CDC* pDC,artist1 & at1);

    afx_msg void OnBnClickedButton2();
};

そして私はCViewクラスのcppファイルからクラスを呼び出します

void Cooplab1View::OnDraw(CDC* pDC)
{
    artist1 art;
    artist1 A1;
    Cooplab1Doc* pDoc = GetDocument();
    //ASSERT_VALID(pDoc);
    //if (!pDoc)
    //  return;



    if (noShow)
    {
        art.OnInsertArtist(art);
        //art.OnBnClickedButton1();
        //art=&obj;
    //  art.GetTreeObj();
        art.ShowDetails(pDC,art);
    }

    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;
    // TODO: add draw code for native data here
}


void Cooplab1View::OnInsertArtist1()
{
    noShow=true;
    InvalidateRect(NULL,NULL);
    //UpdateWindow();
}
4

4 に答える 4

0

クラスは非常に乱雑ですが、ダイアログアイテムからユーザー入力テキストを抽出するだけの場合は、実際には非常に単純です。

void artist1::OnBnClickedButton1()
{
    // Since variables Name,Age,Nationality,Group,num_of_albums are all CString items
    // declare as member variables in the class, 
    // you can just retrieve user entry from the dialog directly into them
    // without calling the "SH(Name1,Age1,Nationality1,Group1,num_of_albums1);"
    GetDlgItemText(IDC_EDIT1, Name);
    GetDlgItemText(IDC_EDIT2, Age);
    GetDlgItemText(IDC_EDIT3, Nationality);
    GetDlgItemText(IDC_EDIT4, Group);
    GetDlgItemText(IDC_EDIT5, num_of_albums);
}
于 2013-03-12T03:23:36.087 に答える
0
  1. 「編集ボックス」に一致する変数を作成し(右クリック-> vs2010で変数を追加)、それらの値を確認する必要があります。
    GetWindowTextではなく「GetDlgItem」を実行しないでください。
  2. UpdateData(TRUE)の最初の行に追加する必要がありますOnBnClickedButton1
  3. 幸運を !
于 2013-03-11T22:50:22.687 に答える
0

エディットコントロールに値を入力する場合は、updatedata(FALSE)を呼び出す必要があります。値を変数に格納する場合は、updatedata(TRUE)を呼び出します。それでおしまい。

于 2013-03-12T10:44:14.680 に答える
0

私はついに問題を解決しました。いくつかのグローバル変数を宣言し、GetDlgItemTextを使用してOnBnClickedButton1()で編集ボックスに入力された値を割り当て、次にOnBnClickedButton2()でグローバル変数をクラスの変数(名前、年齢など)に割り当てました。

于 2013-03-12T20:11:41.127 に答える