• 締切済み

MFCダイアログボックスを最前面に表示

MFCでダイアログを表示するアプリを作成しようとしています。 そこでダイアログボックスを表示させたときに最前面に表示させる方法を教えていただきたいと思ってます。 ボタン押下でダイアログ表示させるのではなく、IPメッセンジャーのようにタスク常駐していてネットワーク上からのトリガーでダイアログを表示させようとしています。 ダイアログが表示されたときに、他のプログラムを起動している場合でも、クリック等をしても、他のウィンドウの下に隠れないようにしたいと思ってるのですが、可能でしょうか。 つまり、そのダイアログが表示されている間は何をしても最前面に表示させておきたいのです。 なにとぞよろしくお願いいたします。 補足が必要でしたら、おっしゃってください。よろしくお願いします。

みんなの回答

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.4

>つまり、そのダイアログが表示されている間は何をしても最前面に表示させておきたいのです。 うぎゃー、ごめんなさいm(..)m IPメッセンジャーみたいでタスクトレイに常駐って書いてあったから、ついタスクトレイのアイコンをクリックしてウィンドウを表示するときにアクティブにする方法を書いてしまいました。 本当は、SetWindowPos()でHWND_TOPMOSTを指定してください。 >別アプリも最前面にでる設定がされていたらどうなるのでしょうね? というパターンは、最前面ウィンドウを取り合う形になります。 あとからアクティブになったウィンドウの勝ちです。

hiko758
質問者

補足

ありがとうございます。 どう説明すればいいかちょっと考えてしまってました。 試してみます。

  • mk1234
  • ベストアンサー率30% (20/65)
回答No.3

別アプリも最前面にでる設定がされていたらどうなるのでしょうね?

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>バージョンはVS6.0SP5、OSはWin2000とXP両方です。 OSがそれですと、フォアグランドに行かずにタスクバー上で点滅するだけの場合があるので、 http://home.att.ne.jp/yellow/hide_n/programming/tips06.html この処理をOnInitDialogで実行してください。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

VisualStudioのバージョンとOSのバージョンは? VS6.0でしたら、リソースエディタでダイアログの プロパティの、その他のスタイルで、「フォアグランドに表示」を指定する

hiko758
質問者

補足

早速ありがとうございます。 バージョンはVS6.0SP5、OSはWin2000とXP両方です。

関連するQ&A

  • VC++でタスクバーに表示させない方法。(非MFC)

    VC++6.0 で常駐アプリの開発をしているのですが、 MFCを使わずにダイアログを作成し、 タスクトレイにアイコンを表示するのはできたのですが、タスクバーには表示が残ってしまいます。 タスクバーに表示させない方法を教えてください。 よろしくお願いします。

  • ダイアログボックスの表示

    VC++6.0 MFCでプログラミングをしています。 ボタンを押すことによるダイアログの表示ではなく、ループ中である条件を満たしたときにダイアログボックスを表示したいのですが、ループの中でどのように命令すればよいのでしょうか?

  • ダイアログ最前面表示時の後ろの画面操作について

    はじめまして。 お世話になります。 開発環境:WindowsXP VC++6.0 MFC使用 ダイアログベースで画面を作成(A.exe CDialogベース)し、その画面でボタンを押下し 子画面(A_Child)を表示させます。表示方法はDoModal()で。 そのA_ChildはCDialogベースです。 A_Childダイアログが表示されている間(最前面)は、デスクトップ上の操作を 何も出来ない様にしたいのですが、方法はありますでしょうか? (例:スタート→ログオフでダイアログが表示しますよね。 その時ってそのダイアログ以外は触れないですよね。) せめて、自分たちが作成したアプリだけでも操作不可能にしたいのです。 SetWindowPos()、ModifyStyle()、色々試しましたが上手くいきません。 DoModalで表示させるのがそもそもまちがいののでしょうか? 何か方法が有りましたらよろしくお願いします。 説明が下手ですみません。

  • VBAにてメッセージボックスを最前面に表示させる

    エクセルVBAにて、指定時刻になったらメッセージボックスを、最前面に表示させるプログラムを作成中です。 時刻の指定は、ontimeメソッドの使用でできました。 しかし、最前面(他のアプリケーションを開いていても、メッセージボックスが手前に表示される)がどうしてもできません。。 VBだとAPI関数を使って、フォームを常に最前面表示はできました。 メッセージボックスで、このような表示方法は実現可能なのでしょうか? どなたか教えて下さい。よろしくお願いします。

  • VC++ダイアログボックスの表示更新がわかりません

    現在ダイアログボックスにスタティックコントロールを配置し、表示更新する際不明な点があります。VC6.0 MFCです。 1、ダイアログボックス上のコントロールに、作成したビットマップを表示させる際、OnInitDialog関数内で、Bitbiltしていますが、表示されません。 ボタンクリックイベント等で、同様の手順でBitbiltすると表示されます。 これはなぜなのでしょうか? また、ダイアログボックスが表示された際にBitmapを表示するにはどうすればよいでしょうか? 2、また、表示されたBitmapはダイアログボックスを動かしたり、隠れたりすると消えてしまいます。 再表示を自動的にさせるにはどうすればよいでしょうか?(OnDraw関数のようなものがあるのでしょうか?) 初歩的な質問で申し訳ありませんが、よろしくお願いいたします。

  • MFC モーダルダイアログ表示中に

    MFCでプログラムを組んでいます。 以下のような状態なのですが、解決できる方法はありますか? (1) メインアプリケーションクラス(CWinAppクラスの派生クラス)から、フレームウィンドウを表示。 表示方法:CreateNewFrame()実行 → InitialUpdateFrame()実行 (2) (1)で表示されたウィンドウからモーダルダイアログを表示。 表示方法:モーダルダイアログクラスのDoModal()実行。 (3) メインアプリケーションクラスから(1)で表示されたウィンドウに対して、WM_CLOSEをSendMessage()。 (3)の実行後 (1)、(2)で表示された画面は両方とも閉じますが、モーダルダイアログでアサートします。 目的は、両方の画面が表示されている状態でメインアプリケーションを終了するときに、両方の画面をアサートすることなく閉じることです。 そもそもモーダルダイアログを外部から閉じること自体できるのかどうかわからないのですが、 もしできないとしたら、目的を達成するためにはどうすれば良いのでしょうか? よろしくお願いします。

  • 起動時にダイアログボックス表示しないようにしたい

    起動時に、[ネットワーク パスワードの入力]ダイアログボックスを表示しないようにしたいのですがどうすればよいですか。 OSは98です。よろしくお願いします。

  • ダイアログボックスについて

    ワードをファイルから開くときに 「ダイアログボックスが開いているためコマンドを実行することができません。実行するには「OK」ボタンをクリックしてからすべてのダイアログボックスを閉じて下さい」と出てきます。ワードを立ち上げてからファイルを開くとこの表示は出てこないのですが、どうすればこの表示がでなくなりますか?ちなみに他のアプリケーションは何も立ち上がってはいないのですが。

  • Word2013の段落ダイアログボックスの表示

    段落ダイアログボックスを開くと大きすぎてタブとリーダー線を使用しようとしてもPC内に表示しません。段落ダイアログボックスだけでなく他のフォントボックスも同じです。 これらのダイアログボックスの表示を小さくする方法はありますか? ご存知の方のご指導をお願いします。

  • チャイルドダイアログの最前面表示

    現在、MDIフレーム上に、複数のチャイルドスタイルのダイアログが存在するプログラムを改造中です。 その中にMapDKIVの地図を描画しているダイアログがあり、その地図上に縮尺スケールのビットマップを描画しようとしています。(MapDKIVには、その機能がまだ無い為) 縮尺スケールのビットマップを描画する為のダイアログを同様にチャイルドスタイルにし、SetWindowPos()を使って最前面に表示しようとしましたが、地図を描画しているダイアログをクリックすると、後ろへ行ってしまいます。 MSDNのSetWindowPos()の説明には、 「子ウィンドウ、ポップアップウィンドウ、またはトップレベルウィンドウのサイズ、位置、および Z オーダーを変更します。」 と記述されています。 が、あるサイトでは、 「MDI子Formは、子Windowであって、TopLevelWindowではないのですから、SetWindowPosは最前面や最背面設定を受け入れません。」 と記述されています。 縮尺スケールのビットマップを描画する為のダイアログを通常のスタイルにし、「フォアグランド表示する」とすると、メインフレームのサイズを小さくしたり、移動した時に、その場所へ取り残されてしまいます。 何か、方法はないものでしょうか? 開発環境 VisualC++ 6.0 SP6 どなたかお助け下さい!よろしくお願いします。

専門家に質問してみよう