DxLibの機能でウィンドウを常に手前に表示することができるかとどうかということで質問させていただきました。
検索しても当たり所が悪く目的の結果が返ってきませんでした。
また常に手前に表示するという関数があったとして、それがDxLibが初期化された後でも何度でも変更できるのでしょうか?
よろしくお願いしますm(__)m
ウィンドウの手前化
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: ウィンドウの手前化
DXライブラリのウィンドウハンドルを使えばWin32APIで手前にすることが出来ます。
extern HWND GetMainWindowHandle( void ) ; ← ハンドルを得る。
で手前にするのがSetWindowPos()関数でHWND_TOPMOSTにしましょう。
参考。移動せず、サイズも変えず、TOPMOSTにだけする。
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
[補足]
解除はHWND_NOTOPMOSTです。
extern HWND GetMainWindowHandle( void ) ; ← ハンドルを得る。
で手前にするのがSetWindowPos()関数でHWND_TOPMOSTにしましょう。
参考。移動せず、サイズも変えず、TOPMOSTにだけする。
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
[補足]
解除はHWND_NOTOPMOSTです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: ウィンドウの手前化
その関数を使用してみることにしましたが、ウィンドウハンドルを得なければならないのでFindWindow関数で習得しようとしました。Winに触れたことが少ない身ですのでネットで色々探しましたが、FindWindowの引数の第二引数にそのウィンドウの名前を入力しますよね?それって、DxLib側で名前を指定していなけば”DxLib”で、指定していて”テスト”だったらFindWindowにも”テスト”と入れるだけで感知してくれるのでしょうか?それともそこは別の名前が入るのでしょうか?
第一引数はNULLでも問題ないですか?試してみましたが手前に表示されず困っています。エラーは出ません。
第一引数はNULLでも問題ないですか?試してみましたが手前に表示されず困っています。エラーは出ません。
Dango San
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: ウィンドウの手前化
ごめんなさい。FindWindow()が出てくる意味がわかりません。だんごさん さんが書きました:その関数を使用してみることにしましたが、ウィンドウハンドルを得なければならないのでFindWindow関数で習得しようとしました。Winに触れたことが少ない身ですのでネットで色々探しましたが、FindWindowの引数の第二引数にそのウィンドウの名前を入力しますよね?それって、DxLib側で名前を指定していなけば”DxLib”で、指定していて”テスト”だったらFindWindowにも”テスト”と入れるだけで感知してくれるのでしょうか?それともそこは別の名前が入るのでしょうか?
第一引数はNULLでも問題ないですか?試してみましたが手前に表示されず困っています。エラーは出ません。
GetMainWindowHandle()でダメな理由を教えて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: ウィンドウの手前化
答えになっていません。だんごさん さんが書きました:ごめんなさい、勘違いしていました;;
もう一度試してみます・・・
Re: ウィンドウの手前化
これはsoftyaさんの解答に対して、私の勘違いというか見落としていたので、再度正しい(softyaさんの解答の)方法で試してみますね、という意味であり答えていたわけではございません。あやふやな返信をしてしまい申し訳ございませんでした。naohiro19 さんが書きました:答えになっていません。
現在、オーバーロード~~というエラーが出ているので、自己解決を目指しているところでございます。もし自己解決が難しそうであれば、再度質問させていただきます。
Dango San
Re: ウィンドウの手前化
自己解決しました。
お騒がせしてすみませんでした。
を参考にプログラムを組み、無事手前に表示させることができました。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です。
お騒がせしてすみませんでした。
Dango San