超初心者的な質問で申し訳ないのですが・・
MFCのダイアログベースで関数を追加すると例えばButtonをクリックしたときに実行する とした場合
void CMyDlg::OnButton1()
{
}
な感じの始まりになりますよね。この関数の結果を返したいんですがこの型はvoidで戻り値を設定できないです。
どういじくれば戻り値を設定できるのか教えて下さい。
MFC
Re:MFC
誰がそれらを呼ぶのでしょうか?
ふつうはWindowsのメッセージループから呼ばれる関数ですし。
どちらかのボタンを押したという情報を持ちたいのであればメンバ変数か何かを使ってみては。
そうではなくて、WM_COMMANDメッセージ以外ではなく明に呼ぶのであれば、戻り値を返す関数を
新たに作って、OnButton1ではそれを呼ぶような仕組みにしましょう。
ふつうはWindowsのメッセージループから呼ばれる関数ですし。
どちらかのボタンを押したという情報を持ちたいのであればメンバ変数か何かを使ってみては。
そうではなくて、WM_COMMANDメッセージ以外ではなく明に呼ぶのであれば、戻り値を返す関数を
新たに作って、OnButton1ではそれを呼ぶような仕組みにしましょう。
void CMyDlg::OnButton1() { this->funcButton1(); } int CMyDlg::funcButton1() { int hoge; // 処理 return hoge; }
Re:MFC
ほんとはちょっと違う感じだったんですがわかりやすい質問にする為ちょっとかえてました。
void CMyDlg::OnDropdownCombo1
{
CString a1;
a1->hantei;
}
void CMyDlg::OnDropdownCombo2
{
CSrting a2;
a2->hantei;
}
void CMyDlg::OnDropdownCombo3
{
CString a3;
a3->hantei
}
int hantei{
実行文
}
というような感じでしょうか?ちょっと試したらCStringにはoperator->がありませんとか言われてしました。
void CMyDlg::OnDropdownCombo1 { CComboBox *p1; p1=(CComboBox *)GetDlgItem(IDC_COMBO1); CString a1; p1->GetWindowText(a1); } void CMyDlg::OnDropdownCombo2 { CComboBox *p2; p2=(CComboBox *)GetDlgItem(IDC_COMBO2); CString a2; p2->GetWindowText(a2); } void CMyDlg::OnDropdownCombo3 { CComboBox *p3; p3=(CComboBox *)GetDlgItem(IDC_COMBO3); CString a3; p3->GetWindowText(a3); }で3つの関数が同じ結果(a1とa2とa3が同じ値)を返した場合、実行する文がほしいんですね。
void CMyDlg::OnDropdownCombo1
{
CString a1;
a1->hantei;
}
void CMyDlg::OnDropdownCombo2
{
CSrting a2;
a2->hantei;
}
void CMyDlg::OnDropdownCombo3
{
CString a3;
a3->hantei
}
int hantei{
実行文
}
というような感じでしょうか?ちょっと試したらCStringにはoperator->がありませんとか言われてしました。
Re:MFC
1つのコンボボックスの処理が他の2つのコンボボックスの選択状態によって変わるということでしょうか?
戻り値があったところでどこにも格納できないわけですので、
前述通り、メンバ変数を使うか、逐一GetDlgItemで3つの値を取得するかどちらかでしょう。
アロー演算子(->)は通常はポインタ変数に対して使うものですが、
そこらへんの基礎知識は大丈夫でしょうか?
CString a;
の場合、ポインタ変数ではないので、「.」でメンバ関数を呼び出します。
(何でもかんでも->ではない)
また、CStringにhanteiというメンバ関数はないのでどっちにせよコンパイルエラーでしょう。
ダイアログのメンバ関数であれば this->hantei または単に hantei で呼び出せます。
(ダイアログの値に依存するのでメンバ関数にするのが普通でしょう。)
戻り値があったところでどこにも格納できないわけですので、
前述通り、メンバ変数を使うか、逐一GetDlgItemで3つの値を取得するかどちらかでしょう。
アロー演算子(->)は通常はポインタ変数に対して使うものですが、
そこらへんの基礎知識は大丈夫でしょうか?
CString a;
の場合、ポインタ変数ではないので、「.」でメンバ関数を呼び出します。
(何でもかんでも->ではない)
また、CStringにhanteiというメンバ関数はないのでどっちにせよコンパイルエラーでしょう。
ダイアログのメンバ関数であれば this->hantei または単に hantei で呼び出せます。
(ダイアログの値に依存するのでメンバ関数にするのが普通でしょう。)
Re:MFC
void CMyDlg::OnDropdownCombo1 { CComboBox *p1; p1=(CComboBox *)GetDlgItem(IDC_COMBO1); CString a1; p1->GetWindowText(a1); } void CMyDlg::OnDropdownCombo2 { CComboBox *p2; p2=(CComboBox *)GetDlgItem(IDC_COMBO2); CString a2; p2->GetWindowText(a2); } void CMyDlg::OnDropdownCombo3 { CComboBox *p3; p3=(CComboBox *)GetDlgItem(IDC_COMBO3); CString a3; p3->GetWindowText(a3); } //メンバ関数を追加。 void CMyDlg::hantei(CString a1,CString a2, CString a3) { if(strcmp(a1,"文字列")==0){ if(strcmp(a2,"文字列")==0) if(strcmp(a3,"文字列")==0){ 実行文; }としましてエラーはでないのですが判定の方ができてないです。
間違っている点をご指摘お願いします。
Re:MFC
これはどうですか?
void CMyDlg::OnDropdownCombo1 { hantei(); } void CMyDlg::OnDropdownCombo2 { hantei(); } void CMyDlg::OnDropdownCombo3 { hantei(); } void CMyDlg::hantei() { CComboBox *p1 = (CComboBox *)GetDlgItem(IDC_COMBO1); CComboBox *p2 = (CComboBox *)GetDlgItem(IDC_COMBO2); CComboBox *p3 = (CComboBox *)GetDlgItem(IDC_COMBO3); CString a1, a2, a3; p1->GetWindowText(a1); p2->GetWindowText(a2); p3->GetWindowText(a3); if(strcmp(a1,"文字列")==0) if(strcmp(a2,"文字列")==0) if(strcmp(a3,"文字列")==0){ 実行文; } }