0

まず、ここで何をしたいのかを説明します。フレームを表示しているダイアログボックスがあります。このダイアログのメニューを使用して、最初のダイアログのマクログリッドブロック情報を表示する別のダイアログボックスを開きます。したがって、2番目のダイアログボックスを表示するために、関数を使用しています:DialogBox(hInst、MAKEINTRESOURCE(IDD_DIALOG1)、NULL、DialogProc); ただし、これによりプログラムの実行が新しいダイアログボックスに転送され、新しいダイアログボックスを閉じない限り、最初のダイアログでそれ以上のメッセージを処理できません。

誰かがこの問題を解決する方法を教えてもらえますか?モーダルvsモードレスダイアログボックスと同じですか?

誰かが私にこの目的のためにBackgroundWorkerスレッドを使用するように提案しました。しかし、私がそれについて研究しようとしたとき、私はそれがwin32プログラミングでは機能しないことを多くの場所で読みました。代わりに、いくつかのフォーラムで、同じ目的でPostMessage関数を使用する方法について読みました。誰かがこの問題を処理するための最良のアプローチを決定するのを手伝ってもらえますか?誰かがそれを詳細に説明してくれたら本当にありがたいです。

どうもありがとう。

4

1 に答える 1

1

いいえ、BackgroundWorkerコンポーネントは.NETプロジェクト用であり、Win32アプリケーション用ではありません。また、バックグラウンドスレッドで非GUI操作を実行するように設計されています。.NETアプリケーションであっても、すべてのGUI操作を単一のスレッドに制限する必要があります。

しかし、あなたが言ったように、ここでの問題は、モーダルダイアログを作成していることです。これにより、そのダイアログが閉じられるまで、ユーザーはプログラム内の他のものと対話できなくなります。このDialogBox関数は常にモーダルダイアログを作成します。

モードレスダイアログが必要な場合は、代わりにCreateDialog関数を呼び出します。モードレスダイアログは、閉じられるまで実行をブロックしません。で行ったのと同じダイアログテンプレートをこの関数で再利用できますDialogBox

于 2012-08-02T07:05:19.440 に答える