0

2 つの MFC アプリケーションがあります。それらの 1 つは、それをサポートするいくつかの機能を備えた単なるダイアログ ボックスであり、もう 1 つはコンソール アプリケーションです。コンソール アプリケーションが他のアプリケーションにあるダイアログ ボックスを開くことができるようにするにはどうすればよいですか?

ダイアログアプリケーションをdllとして構築してインポートしようとしました。また、既存のプロジェクトをコンソール プロジェクトに追加し、そのようにリンクします。リンクがダウンしたと信じていますが、コンソールにダイアログをインスタンス化させることはできません。この部分についても間違った方法で行っている可能性があります。

作成したダイアログをエクスポートして別のプログラムにインポートする簡単な方法はありますか? 「input」という名前のプロジェクトを作成し、inputDlg.h/inputDlg.cpp を作成した場合、それらを別のプロジェクトに移動して、それらから何かを呼び出すことができないのはなぜですか? または、最初のプロジェクトの外部でダイアログを使用することはできませんか?

4

2 に答える 2

0

必要なことを行うには:

  1. Visual Studio で両方のプロジェクトのリソース ファイルを開き、転送したいダイアログをコピーしてリソース ビューに貼り付けただけです。
  2. 次に、すべてを閉じて、コンソール プロジェクトを開きました。転送したダイアログボックスが含まれていました。リソースビューでダブルクリックすると、開きました。
  3. まだクラスが関連付けられていなかったので、フレームをダブルクリックすると、クラス ウィザードが開きました。最初のダイアログ プロジェクトで呼び出されたのと同じ名前を付けました (WhateverDlg.h/WhateverDlg.cpp)。
  4. 次に、コードをコピーして、ダイアログ プロジェクトからコンソール プロジェクトに貼り付けることができました。ラッパー (Whatever.h) を参照する 2 行を削除するだけで済みました。

これにより、WhateverDlg.h をコンソール プログラムにインクルードし、DoModal() を使用できるようになりました。成功!

于 2013-07-10T10:39:31.337 に答える
0

ダイアログ (またはその他の GUI ウィンドウ) にはメッセージ ポンプが必要ですが、通常、コンソール アプリケーションにはメッセージ ポンプがありません。ダイアログが閉じられるまでコンソール アプリを待機させたい場合は、MFC の代わりに Win32 API を使用するのが最も簡単な方法です。DialogBox を呼び出してダイアログを作成するだけです。この API は、独自のメッセージ ループを提供します。

それ以外の場合は、マルチスレッド アプローチを採用し、コンソールをメイン スレッドで実行する必要があります。メッセージ ポンプを含むセカンダリ スレッドを開始し、そのスレッドで CDialog ベースのダイアログを作成します。

于 2013-07-09T03:00:04.707 に答える