0

選択可能なサブフォーム ダイアログ ボックスを表示するためのセクションをメイン ダイアログ ボックスにしようとしている MS Visual C++ 2005 プロジェクトがあります。各サブフォームは同じサイズですが、レイアウトが異なります。選択は、コンボ ボックス コントロールを使用して実行されます。この機能を実装する最善の方法を探したところ、メイン ダイアログ内の子ダイアログを処理するために誰かが 1999 年に開発したこのクラスに出会いました。

http://www.codeproject.com/KB/dialog/childdlg.aspx

追加の変更により:

http://www.codeproject.com/KB/dialog/childdlg.aspx?msg=1287#xx1287xx

このコードは、さまざまなサブフォームを選択して表示するのに非常にうまく機能しますが、あるサブフォームから別のサブフォームにデータを渡すことができないようです。具体的には、各サブフォームはいくつかの編集コントロールで構成されています。ユーザーがサブフォーム #1 のエディット コントロールに値を入力できるようにし、この値がサブフォーム #2 のエディット コントロールまたは静的テキスト コントロールに反映されるようにしたいと考えています。

サブフォーム ダイアログ クラス (名前は CSubFormType で、CDialog のサブクラス) のメンバー関数を使用してこれを実装しようとしました。

void CSubFormType::OnEnKillfocusBox1a(){

p2WndControl = (CWnd*)(GetDlgItem(IDC_Box1a));  //Get pointer to the control dialog box for data entry

//Inserted here some specific code used to place data entered into IDC_Box1a into extern wchar_t outstr[32]

SetDlgItemText (IDC_Box1b, outstr);  //Echo data entered in IDC_Box1a to IDC_Box1b on same Subform #1


SetDlgItemText (IDC_Box2, outstr);//Echo data entered in IDC_Box1a to IDC_Box2 on different subform, Subform #2

}

OnEnKillfocusBox1a を直接呼び出すための CSubFormType のメッセージ マップは次のとおりです。

ON_EN_KILLFOCUS(IDC_Box1a, &CSubFormType:: OnEnKillfocusBox1a)

または間接的に:

ON_BN_CLICKED(IDOK, &CSubFormType::OnBnClickedOk) // CSubFormType::OnBnClickedOk は OnEnKillfocusBox1a を呼び出します

私が抱えている問題は次のとおりです。

1) Box1a にデータを入力した後に Enter キーを押しても、ON_BN_CLICKED(IDOK, &CSubFormType::OnBnClickedOk) が呼び出されません。代わりに、メイン ダイアログ ボックスの OnBnClickedOk メンバー関数が呼び出されます。

2) CSubFormType::OnEnKillfocusBox1a が実行されると (別の場所でのマウス クリックによって)、Box1a に入力された値を同じサブフォーム #1 の Box1b にエコーできますが、サブフォーム #2 の Box2 には値をエコーし​​ません。

これらの問題を解決するために何をする必要があるか、または同じ一般的な機能を実装するためのより良いアプローチについてのガイダンスをいただければ幸いです。

使用されているメイン ダイアログ ボックスのコンボ ボックス選択メンバー関数:

void CMain::OnCbnSelchange() { int 選択;

selection = ((CComboBox*)GetDlgItem(IDC_Select))->GetCurSel();

switch(selection)
{
    case 0: // Select Subform 1
        //Do nothing
        break;

    case 1: // Select Subform 2
        SetDlgItemText (IDC_Box2, outstr); //Set Box2 text on Subform #2
        break;
 }

m_SubForms.ShowSubForm(selection);

}

4

1 に答える 1

0

メインのコンボボックスの選択が変更されたときにすべてのフォームを同期します。テキストボックスのテキストが変更されたときにすぐにこれを作成しようとしますが、フォームが 1 つしか表示されないため必要ありません。

于 2010-10-25T15:46:02.947 に答える