コンボボックスのInsertString関数はいつ呼び出せばいいのでしょうか。

[戻る]
はまち 2002/03/13(水) 03:07:25
今、ツールバーのボタンを押すとコンボボックスを持っているダイアログを表示する、というよ
うなプログラムを作っているのですが、このとき、コンボボックスのリストボックスに文字列を
表示させる、InsertString関数はどの時点で呼び出せばいいのでしょうか。CMainFrameクラス
でツールバーのメッセージを受けるハンドラを追加して以下のようにしました。

void CMainFrame::OnAuto() 
{
    CAutoSimulationDialog cas;
    
    cas.m_cParam.InsertString(-1, "Test1");
     cas.m_cParam.InsertString(-1, "Test2");
    cas.m_cParam.InsertString(-1, "Test3");
         
         int iRet;
         iRet = cas.DoModal();
}
ここで、m_cParamはClassWizardのDDXの設定で追加したメンバ変数で、カテゴリを「コントロ
ール」、変数のタイプを「CCombobox」と設定したものです。
プログラムを実行して目的のツールバーのボタンを押すと、Debug Assertion Failed!の表示
が出てきます。

void CMainFrame::OnAuto() 
{
    CAutoSimulationDialog cas;
    
    //cas.m_cParam.InsertString(-1, "Test1");
     //cas.m_cParam.InsertString(-1, "Test2");
    //cas.m_cParam.InsertString(-1, "Test3");
         
         int iRet;
         iRet = cas.DoModal();
}

と、InsertStringをしないようにすると、リストボックスにはもちろん何も表示されませんが
エラー表示が出ず、ダイアログは表示されます。
 ここまでの段階で何か間違っているのでしょうか。みなさん、お忙しいとは思いますが、どん
なことでもいいので、なにかお気づきになった点があれば教えてください。よろしくお願いしま
す。

環境は、Win 98SE, VC++6.0です。
 

TAD [E-Mail] 2002/03/13(水) 04:46:44
CAutoSimulationDialog の DoModal を呼び出すまでは、
ダイアログボックスのウィンドウそのものが生成されていないので、エラーになります。

CAutoSimulationDialog クラスの OnInitDialog に入れるのが普通です。
これは、ダイアログボックスとコントロールがすべて作られた後に呼び出されるハンドラです。
ここに、m_cParam.InsertString(-1, "Test1"); とすれば、文字列を追加できると思いま
す。

はまち 2002/03/14(木) 00:11:29
[[解決]]
TADさん、お返事ありがとうございました。TADさんの言うとうりやってみると、うまく行きま
した。過去ログなどでは多くの人が、OnInitDialogを使っていたので、僕もOnInitDialogを探
していたのですが、WM_INITDIALOGのメッセージから関数を追加するんだったんですね。てっき
り、OnInitDailogという関数があるのかと思って、Classwizardでメッセージを選ぶリストの
上のほうばかりを探していました。
 たすかりました。ありがとうございます。

古いスレッドには追加発言できません。