tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル親画面より常に前に表示。
記事No13144
投稿日: 2008/10/17(Fri) 15:52
投稿者あいよ
親画面側:
'■子画面の作成
Set objFrm = New frmChild
objFrm.Visible = True

子画面側:
''■親ウインドウを使用不可にします
If IsWindowEnabled(frmMDIMain.hwnd) <> False Then
  lngRet = EnableWindow(frmMDIMain.hwnd, False)
  lngRet = EnableWindow(Me.hwnd, True)
End If
'■画面を中央に設定します
mobjFormEx.CenterForm

システム「A」の中で上記のようなコードを使用して親画面から子画面を開いています。
その時にAlt + Tab やタスクバーから別のアプリケーションや
別のフォルダ等を開いた後で、「A」に戻ると子画面が親画面の裏に隠れてしまいます。
別アプリやフォルダから戻ってきた後も常に子画面が前面に表示されるようにしたいです。
Showメソッドを使用せずに行いたいのですが、方法がありましたらご教授願います。

開発環境:VB6.0

[ツリー表示へ]
タイトルRe: 親画面より常に前に表示。
記事No13145
投稿日: 2008/10/17(Fri) 17:32
投稿者カムリン
Show使えるなら、
子画面.Show vbModal, 親画面
で、できると思うのですが、
なぜに、Showはダメ?

(Showがダメなら、APIに出来そうなのが有った気がするので、
検索してみてはどうでしょうか?)

[ツリー表示へ]
タイトルRe^2: 親画面より常に前に表示。
記事No13146
投稿日: 2008/10/17(Fri) 17:45
投稿者あいよ
ご返答ありがとうございます。

showを使用したかったのですが・・・
次画面に持たせるプロパティの量が多いうのと・・・
showを使用すると、どういう内容のインスタンスがどのように作られるか。
また、Hide時に破棄はどのようにして行われているのかが、作成者側からは
わかりにくいので、今作成しているアプリケーションはshowを使用していないのです。

(現在はアプリケーションを閉じるときに全てNothingしています)

SetWindowPosを使用してみたのですが、それだと他のアプリケーションを無視して
常に最前面に表示されてしまいます。ちなみに画面構成は・・・

MDI親→MDI子→A です。

今APIという事を聞いてふと思ったのですが・・・
MDI子のハンドルを取得してAのフォアグランドに指定するなんてできるのでしょうか?

それともやはりshowを使うか、別exeを作成して呼び出すほうがいいのでしょうか。

[ツリー表示へ]
タイトルRe^3: 親画面より常に前に表示。
記事No13147
投稿日: 2008/10/17(Fri) 23:49
投稿者Starfish
参考までに、APIで前面に表示する方法

Form2をForm1の手前に表示する例です。

Form2に以下のコードを記入してください。

Option Explicit
Dim mlngOrgHwndParent As Long

Private Sub Form_Load()
    mlngOrgHwndParent = SetWindowLong(Me.hwnd, GWL_HWNDPARENT, Form1.hwnd)
    
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim lngReturnValue As Long
    lngReturnValue = SetWindowLong(Me.hwnd, GWL_HWNDPARENT, mlngOrgHwndParent)

End Sub

APIの定義は、APIビューワからコピーしてください。

尚、SDKのドキュメントにあるようにこのような使い方は、勧められません。
VBのshowメソッドをお勧めします。

http://msdn.microsoft.com/ja-jp/library/cc411203.aspx

子ウィンドウの親を変更するときは、GWL_HWNDPARENT インデックスを指定して SetWindowLong 関数を呼び出すのではなく、SetParent 関数を使ってください。

[ツリー表示へ]
タイトルRe^4: 親画面より常に前に表示。
記事No13158
投稿日: 2008/10/20(Mon) 08:04
投稿者あいよ
お礼が遅くなり申し訳ございません。
やはり推奨されるやり方ではないですよね。

記述いただいたコードでうまく動作いたしました。
ありがとうございます。

[ツリー表示へ]