ページ 11

ウィンドウの手前化

Posted: 2012年5月27日(日) 10:00
by だんごさん
DxLibの機能でウィンドウを常に手前に表示することができるかとどうかということで質問させていただきました。
検索しても当たり所が悪く目的の結果が返ってきませんでした。
また常に手前に表示するという関数があったとして、それがDxLibが初期化された後でも何度でも変更できるのでしょうか?
よろしくお願いしますm(__)m

Re: ウィンドウの手前化

Posted: 2012年5月27日(日) 10:37
by softya(ソフト屋)
DXライブラリのウィンドウハンドルを使えばWin32APIで手前にすることが出来ます。
extern HWND GetMainWindowHandle( void ) ; ← ハンドルを得る。

で手前にするのがSetWindowPos()関数でHWND_TOPMOSTにしましょう。

参考。移動せず、サイズも変えず、TOPMOSTにだけする。
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

[補足]
解除はHWND_NOTOPMOSTです。

Re: ウィンドウの手前化

Posted: 2012年5月27日(日) 11:22
by だんごさん
その関数を使用してみることにしましたが、ウィンドウハンドルを得なければならないのでFindWindow関数で習得しようとしました。Winに触れたことが少ない身ですのでネットで色々探しましたが、FindWindowの引数の第二引数にそのウィンドウの名前を入力しますよね?それって、DxLib側で名前を指定していなけば”DxLib”で、指定していて”テスト”だったらFindWindowにも”テスト”と入れるだけで感知してくれるのでしょうか?それともそこは別の名前が入るのでしょうか?
第一引数はNULLでも問題ないですか?試してみましたが手前に表示されず困っています。エラーは出ません。

Re: ウィンドウの手前化

Posted: 2012年5月27日(日) 11:30
by softya(ソフト屋)
だんごさん さんが書きました:その関数を使用してみることにしましたが、ウィンドウハンドルを得なければならないのでFindWindow関数で習得しようとしました。Winに触れたことが少ない身ですのでネットで色々探しましたが、FindWindowの引数の第二引数にそのウィンドウの名前を入力しますよね?それって、DxLib側で名前を指定していなけば”DxLib”で、指定していて”テスト”だったらFindWindowにも”テスト”と入れるだけで感知してくれるのでしょうか?それともそこは別の名前が入るのでしょうか?
第一引数はNULLでも問題ないですか?試してみましたが手前に表示されず困っています。エラーは出ません。
ごめんなさい。FindWindow()が出てくる意味がわかりません。
GetMainWindowHandle()でダメな理由を教えて下さい。

Re: ウィンドウの手前化

Posted: 2012年5月27日(日) 11:42
by だんごさん
ごめんなさい、勘違いしていました;;
もう一度試してみます・・・

Re: ウィンドウの手前化

Posted: 2012年5月27日(日) 12:18
by naohiro19
だんごさん さんが書きました:ごめんなさい、勘違いしていました;;
もう一度試してみます・・・
答えになっていません。

Re: ウィンドウの手前化

Posted: 2012年5月28日(月) 01:03
by だんごさん
naohiro19 さんが書きました:答えになっていません。
これはsoftyaさんの解答に対して、私の勘違いというか見落としていたので、再度正しい(softyaさんの解答の)方法で試してみますね、という意味であり答えていたわけではございません。あやふやな返信をしてしまい申し訳ございませんでした。

現在、オーバーロード~~というエラーが出ているので、自己解決を目指しているところでございます。もし自己解決が難しそうであれば、再度質問させていただきます。

Re: ウィンドウの手前化

Posted: 2012年5月28日(月) 01:31
by だんごさん
自己解決しました。
softya(ソフト屋) さんが書きました:DXライブラリのウィンドウハンドルを使えばWin32APIで手前にすることが出来ます。extern HWND GetMainWindowHandle( void ) ; ← ハンドルを得る。で手前にするのがSetWindowPos()関数でHWND_TOPMOSTにしましょう。参考。移動せず、サイズも変えず、TOPMOSTにだけする。SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);[補足]解除はHWND_NOTOPMOSTです。
を参考にプログラムを組み、無事手前に表示させることができました。
お騒がせしてすみませんでした。