cdialogから派生したダイアログは、ドコモダル(MFC/C ++)の後に-1を返します

StackOverflow https://stackoverflow.com/questions/4659062

  •  09-10-2019
  •  | 
  •  

質問

私はそれが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ライブラリを初期化します。ダイアログ自体のコントロールではありません。

通常、これをアプリのスタートアップルーチンに入れてから、ウィンドウを上げます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top