0

CDialogから派生したダイアログを作成しました(MFCはこれを自動的に実行します)がOnInitDialog、ComboBoxの初期化を行うためにメソッドをオーバーライドする必要がありました。

BOOL CLogin::OnInitDialog()
{
 CDialog::OnInitDialog();

 InitCommonControls();

 if ( FillInCombo() != 0 )
  //erro ao tentar ler leitoras
  return TRUE;

 return TRUE;
}

このメソッドFillInComboはPCSCクラスを呼び出して、このコンボを使用可能なすべてのスマートカードリーダーで埋めます。

ただし、デバッグ中に奇妙な動作が発生します。コンボでアイテムを選択しようとすると、自動的に閉じ(実際にはOnCloseイベントが生成されます)、DoModalは-1を返します。

次に、ソリューションをクリーンアップして再度ビルドしない限り、アプリケーションが正しくロードされることはありません。

 CLogin SmartNetData;
 int ret = SmartNetData.DoModal();
 switch ( ret )
 {
    case IDOK:
    break;
    case -1: 
    // strange error
    OnOK();
    return TRUE;
    case IDABORT:
    case IDCANCEL:
    OnOK();
    return TRUE;
 };

これについて可能な限りの助けをありがとう。

後で編集:コンボボックスが原因で問題が発生することに気づきました。理由はわかりません。リストボックスに置き換えましたが、問題は発生していません。

4

2 に答える 2

2

OnInitDialog()で問題が発生していると思われます。

デバッグ手順を実行することをお勧めします。a
)OnInitDialog()でInitCommonControls()を
削除します。b)OnInitDialog()でFillInCombo()を削除します。c)OnInitDialog()で
InitCommonControls()とFillInCombo()を削除します。

1つずつ削除した後、DoModalの戻り値を確認してください。

于 2011-01-12T01:29:28.420 に答える
0

私はあなたが間違った場所でやっていると思います。InitCommonControls()これは、プログラムで1回実行する必要があります。共通コントロールライブラリを初期化します。ダイアログ自体のコントロールではありません。

私は通常、ウィンドウを表示する前に、これをアプリの起動ルーチンに入れます。

于 2011-01-11T16:24:02.520 に答える