コントロールボックスについて
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: コントロールボックスについて
ウィンドウハンドルを得て、スタイル変更すれば出来るんですが、閉じるまで無くすと不便では?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: コントロールボックスについて
DXライブラリには
int SetWindowStyleMode( int Mode );
なんてのもありますよ。
Modeに1か2か4を指定すれば一応、最小化、最大化、閉じるボタンは消えます。(タイトルバーごとですが)
引数による変化をまとめたものも貼っておくので、よろしければ参考にしてください。
余談ですが、私は最小化や閉じるボタンは無効にするとユーザーに嫌われると思っています。
理由は、私がゲームをやるときに、それらが無効だと私自身がイライラするからです。
マウスを使ったアクションゲームでカーソルが画面外に出て行って誤クリックが頻発するなど、
無効にする理由がはっきりしているゲームなら話は別ですが、それでも環境設定で有効無効を選択できるようにして欲しいです。
int SetWindowStyleMode( int Mode );
なんてのもありますよ。
Modeに1か2か4を指定すれば一応、最小化、最大化、閉じるボタンは消えます。(タイトルバーごとですが)
引数による変化をまとめたものも貼っておくので、よろしければ参考にしてください。
/*--------------------------------------------------
int SetWindowStyleMode( int Mode ); のMode ※Win7環境
縁 タイトル 最小化 最大化 閉じる
0 太 ○ ○ 無 ○
1 太 ‐ ‐ ‐ ‐
2 細 ‐ ‐ ‐ ‐
3 特 特 ‐ ‐ 特 ※全体的に角張っており、タスクバーに表示されない。
4 細 ‐ ‐ ‐ ‐ ※タスクバーに表示されない
5 細 ○ ‐ ‐ ○
6 太 ○ ○ 無 ○
7 太 ○ ○ ○ ○
8 太 ○ ○ ○ ○ ※最大状態から始まる
9 細 ○ ○ 無 ○
10 細 ○ ○ ○ ○ ※最大状態から始まる
無・・・表示されているが無効状態
‐・・・表示もされていない
--------------------------------------------------*/
理由は、私がゲームをやるときに、それらが無効だと私自身がイライラするからです。
マウスを使ったアクションゲームでカーソルが画面外に出て行って誤クリックが頻発するなど、
無効にする理由がはっきりしているゲームなら話は別ですが、それでも環境設定で有効無効を選択できるようにして欲しいです。
Re: コントロールボックスについて
一応ソフト屋さんの通りにやってみましたがSetWindowStyleModeを消さないと反映されないみたいなので縁の太さが最初は細の9を指定していたのですが標準に戻ってしまいます。どうすればいいでしょうか?
>私は最小化や閉じるボタンは無効にするとユーザーに嫌われると思っています。
私もあまり好きではないのですが、絶対に消えては困るウインドウなのでしょうがなくやっています。
でももう一つのソフトで閉じることができるようになっていますので大丈夫だと思います。
>私は最小化や閉じるボタンは無効にするとユーザーに嫌われると思っています。
私もあまり好きではないのですが、絶対に消えては困るウインドウなのでしょうがなくやっています。
でももう一つのソフトで閉じることができるようになっていますので大丈夫だと思います。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: コントロールボックスについて
DxLib_Init()後じゃないと私のはダメですがどうでしょうか?
SetWindowStyleMode()は前なのかな?(未検証)
SetWindowStyleMode()は前なのかな?(未検証)
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: コントロールボックスについて
どちらをどうしたか書き残してくださいね。源流 さんが書きました:すいません。
できていました。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: コントロールボックスについて
すいません。まだ終わってませんでした。
実際にコンパイルしたときは良かったのですが、exeをダブルクリックして開いた時コントーロールボックスが表示されてしましました。
しかし他のウインドウをアクティブにしてから今開いたウインドウをアクティブにすると消えます。最初から消しておくことはできないのでしょうか。
実際にコンパイルしたときは良かったのですが、exeをダブルクリックして開いた時コントーロールボックスが表示されてしましました。
しかし他のウインドウをアクティブにしてから今開いたウインドウをアクティブにすると消えます。最初から消しておくことはできないのでしょうか。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: コントロールボックスについて
コードの流れが見えませんので回答が困難です。
現在のコードを説明してください。
現在のコードを説明してください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: コントロールボックスについて
プログラムが長いのでウインドウの設定をDXライブラリの初期化の部分だけ載せます。
コンパイルしたソフトを起動して非アクティブにしてからじゃないとコントロールボックスが消えないのです。
コンパイルしたソフトを起動して非アクティブにしてからじゃないとコントロールボックスが消えないのです。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: コントロールボックスについて
両方書いたんですね。片方だけにしたらどうなりますか?
ちなみに私のやつは試した時に一拍遅れて反応してました。
ちなみに私のやつは試した時に一拍遅れて反応してました。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: コントロールボックスについて
なるほど、もう一つのソフトというのに若干の違和感を感じますが2つのウィンドウを持つゲームなんですね。源流 さんが書きました:私もあまり好きではないのですが、絶対に消えては困るウインドウなのでしょうがなくやっています。
でももう一つのソフトで閉じることができるようになっていますので大丈夫だと思います。
それならひとつのウィンドウの閉じるボタンが無効なのも納得です。
SetWindowStyleMode()はDxLib_Init()の前でも後でもいけるはずです。softya(ソフト屋) さんが書きました:SetWindowStyleMode()は前なのかな?(未検証)
ソフト屋さんの方法とSetWindowStyleMode()を組み合わせる場合は、
「SetWindowStyleMode()→DxLib_Init()→SetWindowLong()」でうまいこと行くようです。
DxLib_Init()からSetWindowLong()まではタイムラグがあるので、一瞬だけ各ボタンやコントロールボックスが表示されますがそのことでしょうか?源流 さんが書きました:exeをダブルクリックして開いた時コントーロールボックスが表示されてしましました。
もしそれのことでしたら、残念ながら自前のウィンドウを用意するしか方法はないように思います。
ちなみに、一瞬表示されるボタンは多分押せない(カーソルが砂時計状態になる)ので、見えてても効果はないはずです。
追記:
書き込みが前後してしまいました。申し訳ない・・・
とりあえずソフト屋さんの質問に対する回答を待ちます。
Re: コントロールボックスについて
ソフト屋さん
私の場合は一泊じゃなくて他のウインドウをアクティブにしないと何時まで経っても変わりません。
ボタンは無効化しているのですが、非表示になっていません。
どちらも片方ずつやってみましたがダメでした。
私の環境はwindows7でスタイルはクラシックです。
最初から消えてないと見た目がどうも納得いきません。
テラスさん
他のウインドウをアクティブにしないと何時まで経っても変わりません。
どうしてでしょうか。
私のパソコンが変なのでしょうか?
私の場合は一泊じゃなくて他のウインドウをアクティブにしないと何時まで経っても変わりません。
ボタンは無効化しているのですが、非表示になっていません。
どちらも片方ずつやってみましたがダメでした。
私の環境はwindows7でスタイルはクラシックです。
最初から消えてないと見た目がどうも納得いきません。
テラスさん
他のウインドウをアクティブにしないと何時まで経っても変わりません。
どうしてでしょうか。
私のパソコンが変なのでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: コントロールボックスについて
アクティブなウィンドウしかボタンは消えないと思いますが、そういう状況でしょうか?
2つのウィンドウがどういう関係に成っているか分からないので曖昧な答えしか返答できませんが、2つウィンドウが有るのが原因ではないかと思います。
【補足】やめろとかそんな話じゃなくて、発生の条件を確定してほしいのです。
2つのウィンドウがどういう関係に成っているか分からないので曖昧な答えしか返答できませんが、2つウィンドウが有るのが原因ではないかと思います。
【補足】やめろとかそんな話じゃなくて、発生の条件を確定してほしいのです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: コントロールボックスについて
SetWindowLongでウィンドウスタイルを変更したあとは、SetWindowPosを使ってフレームの再描画をリクエストする必要があると思います。
SetWindowLongの直後に
SetWindowPos(hwnd, NULL, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED | SWP_DRAWFRAME);
を入れてみてください。
ちなみにボタンを無くしてもユーザー操作できないようになるだけです。
機能そのものが無くなるわけではないので、対策しなくても良いということにはなりません。
SetWindowLongの直後に
SetWindowPos(hwnd, NULL, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED | SWP_DRAWFRAME);
を入れてみてください。
ちなみにボタンを無くしてもユーザー操作できないようになるだけです。
機能そのものが無くなるわけではないので、対策しなくても良いということにはなりません。
Re: コントロールボックスについて
ISLeさん
ありがとうございました!!
出来ました!!
完成したプログラムです。(コントロール非表示のみ)
ソフト屋さん
とりあえずなんでもいいので最小化でもいいので非アクティブにしないとコントロールが非表示にならないということでした。
皆さん有難う御座いました。
最後になんですけど、SetWindowLongとかSetWindowPosとかは皆さんはどのように習得したのでしょうか。
ネットで探してもなかなか見つからないと思うのですが・・・私はなかなか見つけられなかった。
何か良いサイトでもあるのでしょか?
ありがとうございました!!
出来ました!!
完成したプログラムです。(コントロール非表示のみ)
// ウインドウモードで起動
ChangeWindowMode( TRUE );
SetWindowStyleMode( 9 ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1;
// 最大・最小・閉じるを無くす。
HWND hwnd = GetMainWindowHandle();
DWORD style = GetWindowLong(hwnd, GWL_STYLE);
SetWindowLong(hwnd, GWL_STYLE, style & ~WS_SYSMENU );
SetWindowPos(hwnd, NULL, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED | SWP_DRAWFRAME);
とりあえずなんでもいいので最小化でもいいので非アクティブにしないとコントロールが非表示にならないということでした。
皆さん有難う御座いました。
最後になんですけど、SetWindowLongとかSetWindowPosとかは皆さんはどのように習得したのでしょうか。
ネットで探してもなかなか見つからないと思うのですが・・・私はなかなか見つけられなかった。
何か良いサイトでもあるのでしょか?
- spaaaark・∀・
- 記事: 66
- 登録日時: 12年前
- 住所: 埼玉
- 連絡を取る:
Re: コントロールボックスについて
横入り失礼しますorz
DxLibにはリファレンスに載っている関数以外にも大量の関数が用意されています。
DxLibの場合、これらの関数はDxLib.hファイルからこれらの関数、#defineマクロを直接確認することが可能です。
各関数にはコメントが割り振られていますので、検索機能で目的を検索し、関数を探すことも可能だったりします。
さて、そのDxLib.hですが、VC++の場合であればライブラリの関数上でF12を押していただければ、すぐ出てきますよ。
今まで知らなかった機能もあると思うので、ぜひ一度ご覧になってみてはどうでしょうか。
DxLibにはリファレンスに載っている関数以外にも大量の関数が用意されています。
DxLibの場合、これらの関数はDxLib.hファイルからこれらの関数、#defineマクロを直接確認することが可能です。
各関数にはコメントが割り振られていますので、検索機能で目的を検索し、関数を探すことも可能だったりします。
さて、そのDxLib.hですが、VC++の場合であればライブラリの関数上でF12を押していただければ、すぐ出てきますよ。
今まで知らなかった機能もあると思うので、ぜひ一度ご覧になってみてはどうでしょうか。
クリエイティブな生活で刺激的な毎日を!
Re: コントロールボックスについて
「ウィンドウスタイル 変更」でググるといっぱい見付かります。源流 さんが書きました:最後になんですけど、SetWindowLongとかSetWindowPosとかは皆さんはどのように習得したのでしょうか。
ネットで探してもなかなか見つからないと思うのですが・・・私はなかなか見つけられなかった。
何か良いサイトでもあるのでしょか?
Re: コントロールボックスについて
クラシックなんですね。それだと確かに、私の環境でもアクティブを移さないとボタンは消えませんでした。
これについてはISLeさんの方法で改善できると思いますが、どうしてもボタンは一瞬表示されてしまいます。
最初から消えていないと納得できないのでしたら、ウィンドウの作成をDXライブラリに任せるのではなく、自前のウィンドウとメッセージ処理を用意して
int SetUserWindow( HWND WindowHandle ) ;
を利用するのが一番はやいのではないでしょうか。
SetUserWindow()についての参考になりそうなURLも貼っておきます。
DXライブラリプログラム&プログラム質問掲示板:子ウインドウでDxLibを…
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=1556
P.S.
このレスを書いている途中で解決されたようですね。
無事に解決できて何よりなんですが、せっかく書いたので投稿させていただきます。
これについてはISLeさんの方法で改善できると思いますが、どうしてもボタンは一瞬表示されてしまいます。
最初から消えていないと納得できないのでしたら、ウィンドウの作成をDXライブラリに任せるのではなく、自前のウィンドウとメッセージ処理を用意して
int SetUserWindow( HWND WindowHandle ) ;
を利用するのが一番はやいのではないでしょうか。
SetUserWindow()についての参考になりそうなURLも貼っておきます。
DXライブラリプログラム&プログラム質問掲示板:子ウインドウでDxLibを…
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=1556
P.S.
このレスを書いている途中で解決されたようですね。
無事に解決できて何よりなんですが、せっかく書いたので投稿させていただきます。
最後に編集したユーザー てらす on 2013年8月02日(金) 22:53 [ 編集 1 回目 ]
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: コントロールボックスについて
SetWindowLongとかSetWindowPosはWindowsAPIの関数ですね。
DXLIB内部では、WindowsAPIとDirectXが動作していますので内部の動作まで手を出すと知識が必要になります。
あれ?遅かったですか。
DXLIB内部では、WindowsAPIとDirectXが動作していますので内部の動作まで手を出すと知識が必要になります。
あれ?遅かったですか。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。