HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0720
OMNI最背面を維持したい。3解決


OMNI

リンク

2009/7/20(Mon) 18:22:46|NO.26516

SetWindowPosで最背面にすることはできたのですが。
ウィンドウ同士が重なっている状態(当アプリは背面)でアクティブにすると上にあったウィンドウが背面にいってしまいます
アクティブになっても背面を維持し続けるにはどうすればいいでしょうか?よろしくお願いします。



この記事に返信する


えく

リンク

2009/7/20(Mon) 21:28:29|NO.26517

調べてみたら二つほど方法があったので、ガリガリとソース書いてみました


#include "user32.as" // 方法が二つある? のでどちらでもー //#define a #ifdef a // これだとタスクバーにウィンドウタイトルが出なくなるー FindWindow 0, "Program Manager" h_desktop_wnd = stat if ( h_desktop_wnd == 0 ) : dialog "失敗" : end SetParent hwnd, h_desktop_wnd #else // ちらついたりするかもしれないですー gosub *onTop oncmd gosub *onTop, 0x0047 stop *onTop SetWindowPos hwnd, 1, 0, 0, 0, 0, 1|2 return 0 #endif

恐らくこれで満足のいく結果になるのでは、と予想しますが果たして…



OMNI

リンク

2009/7/20(Mon) 23:46:37|NO.26518

返信遅くなって済みません。
おかげさまで希望どおりの結果を出すことができました。
上の1つはいまいち分からなかったのですが、下のやつは何となく理解できました。
ありがとうございました。



えく

リンク

2009/7/21(Tue) 02:29:02|NO.26519

おっと、補足をつけ忘れておりました

>上
”Program Manager”はおおよそデスクトップのウィンドウタイトルで、
デスクトップのウィンドウハンドルを所得してHSPのウィンドウをその子ウィンにすることで、
常に背面にあるデスクトップの子ウィンということで常に背面に表示されるようになります
デスクトップウィンドウのハンドルを所得する関数は専用のがありますが、ここはとりあえず邪道な方法で
ただ、子ウィンなのでタスクバーにウィンドウタイトルが表示されないという欠点があります

>下
は「ウィンドウのZオーダーが変更された」瞬間に発生するウィンドウメッセージWM_WINDOWPOSCHANGED
を受け取った際に、またSetWindowPosで一番後ろに戻しています
変更された直後にまた戻すという操作なので、多少のちらつきが存在したりします

こんな感じでしょうか…?



ONION software Copyright 1997-2023(c) All rights reserved.