cdialogから派生したダイアログは、ドコモダル(MFC/C ++)の後に-1を返します
質問
私はそれがcdialogから派生したダイアログを作成しました(MFCはこれを自動的に行います)が、私はオーバーライドする必要がありました OnInitDialog
コンボボックスの初期化を行う方法:
BOOL CLogin::OnInitDialog()
{
CDialog::OnInitDialog();
InitCommonControls();
if ( FillInCombo() != 0 )
//erro ao tentar ler leitoras
return TRUE;
return TRUE;
}
メソッド FillInCombo
PCSCクラスに電話して、このコンボを利用可能なすべてのスマートカードリーダーで埋めます。
ただし、奇妙な動作のデバッグが行われている間。コンボでアイテムを選択しようとすると、自動的に閉じます(実際にオンクラスイベントが生成されます)、ドコモダルは-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;
};
これについての可能な助けをありがとう。
後で編集:コンボボックスのために問題が発生することに気付きました。理由がわかりません。リストボックスに置き換えましたが、トラブルが発生していません。
解決
OnInitdialog()で何が問題になっているのかと思います。
デバッグステップに行くことをお勧めします。
a)oninitdialog()でinitcommoncontrols()を削除します
b)oninitdialog()でfillincombo()を削除します
c)oninitdialog()でinitcommoncontrols()とfillincombo()を削除します
1つずつ削除した後、Domodal Returns Valueで確認します。
他のヒント
私 考える あなたはやっている InitCommonControls()
間違った場所で。これはプログラムで一度行う必要があります。 Common Controlsライブラリを初期化します。ダイアログ自体のコントロールではありません。
通常、これをアプリのスタートアップルーチンに入れてから、ウィンドウを上げます。