ページ 11

タイトルバーに関する情報の取得方法

Posted: 2007年6月21日(木) 09:31
by バグ
Windowの上部にタイトルバーってありますよね?

あの部分のサイズ(幅、高さ、色…etc)を取得したい場合って、どうしたらいいのでしょうか?

MoveWindow関数でサイズを変更しようと思っても、タイトルバー込みの大きさに変更されてしまうので、タイトルバーの高さ分だけ大きくしたいのですが、方法が分からなくて…

ご存知の方がいらっしゃいましたら、ご教授願いますm(_ _)m
環境はVC++6.0で、MFCを使用しています。

Re:タイトルバーに関する情報の取得方法

Posted: 2007年6月21日(木) 10:11
by ま~く
GetSystemMetricsでさまざまな大きさを取得できますよ。

そのほかのやりかたとして・・・

MFCをお使いでしたら
virtual void CalcWindowRect とか

AdjustWindowRect を使うのも手ですね。

Re:タイトルバーに関する情報の取得方法

Posted: 2007年6月21日(木) 10:21
by バグ
返信ありがとうございます(^-^)

今、MSDNを見ていたら、確かにありました!!
GetSystemMetricsの項を開いていたのに、普通に見逃していたようです(^_^;)

GetSystemMetrics(SM_CYCAPTION);

これでタイトルバーの高さが返るんですねぇ…知らなかった。

AdjustWindowはクライアント領域の大きさだけを変更できるんですね。これも全く知りませんでした(苦笑)
便利ですねぇ!!(^o^)

ちなみにこれまでは、使用しないコントロールを1つ貼り付けまして、MoveWindow関数でメインのWindowのクライアント座標(0,0)へ移動させた後に、GetWindowRect関数でそれぞれのスクリーン座標を求めて、その差を利用してタイトルバーの高さを求めていました。

どれだけ、力技なんだと!!(笑)

なんにせよ、助かりました。有難うございます♪(^_^)

Re:タイトルバーに関する情報の取得方法

Posted: 2007年6月21日(木) 10:52
by バグ
うーん、今度はDialogの左右と下部にある枠線が邪魔になったので、結局下記のようにして解決しました(^_^;)
// クライアント領域サイズ設定
	int	nWidth, nHeight;
	CRect	rectDialog, rectClient;

	this->GetWindowRect(&rectDialog);
	this->GetClientRect(&rectClient);
	nWidth = rectDialog.Width() - rectClient.Width();
	nHeight = rectDialog.Height() - rectClient.Height();
	this->SetWindowPos(NULL, 0, 0, CLIENT_WIDTH + nWidth, CLIENT_HEIGHT + nHeight, SWP_NOMOVE);

Re:タイトルバーに関する情報の取得方法

Posted: 2007年6月21日(木) 11:52
by ま~く
あ~ダイアログなんですかー^^;
それじゃーウィンドウを作成する前にAdjustWindowで求めるというのも微妙でしたね。

ところでCLIENT_WIDTHやCLIENT_HEIGHTは定数なのですか?それならリソースで最初からその大きさに
しておけば・・・というのは無しですか?^^;

Re:タイトルバーに関する情報の取得方法

Posted: 2007年6月21日(木) 12:11
by バグ
いえいえ、定数ではないです。(^_^;)
それぞれ、クライアント領域の幅と高さを渡してやるという意味で、ああいう風に書きました。
とりあえず、問題なく動いているのですが、もっと効率の良い方法があればいいんですが…(-_-;)

this->MoveWindow(0, 0, CLIENT_WIDTH + nWidth, CLIENT_HEIGHT + nHeight);

この方法ならば、最後のSetWindowPos関数は上記のようにMoveWindow関数でも良いですよね(^-^)

Re:タイトルバーに関する情報の取得方法

Posted: 2007年6月21日(木) 14:03
by ま~く
そうでしたか^^

>この方法ならば、最後のSetWindowPos関数は上記のようにMoveWindow関数でも良いですよね

そうですね♪

Re:タイトルバーに関する情報の取得方法

Posted: 2007年6月22日(金) 17:39
by バグ
実はシンプルなコラムスを作ってるんですよ。
今回は効果音や音楽も入れてみようかと思っているので、コンソールではありません(笑)

操作はマウス1つで行えるようにする予定です。また完成したら、管理人さんにアップしてもらうかもしれませんので、その時は感想をお願いします(^-^)

Re:タイトルバーに関する情報の取得方法

Posted: 2007年6月23日(土) 02:13
by ま~く
あ~このコラムスの右上にある「次のやつ」表示ウィンドウだったんですね^^

前回のようにソースも一緒にアップしてもらえるんでしょうか?

Re:タイトルバーに関する情報の取得方法

Posted: 2007年6月23日(土) 06:14
by バグ
そうです。全部1つのダイアログに収めるつもりだったのですが、次のを表示してないことに気付いて後付けしました(笑)

モードレスダイアログとして生成して、一切の操作を受け付けないようにしてあります。で、メインのダイアログが移動した場合にのみ、WM_MOVEメッセージを送って、常に一定の位置に表示されるようにしてあります(^-^)

結果的に普通に表示した方が楽だった気がしないでもありませんけど(笑)

ソースはMFCを使っているので、無駄に大きく読みづらいですが、一応、添付できたら良いかな?とは思っていますよ(^^)v

Re:タイトルバーに関する情報の取得方法

Posted: 2007年6月23日(土) 16:56
by ま~く
ふむふむ。
一昔前、MFCを使ってゲームを作ると余計なオーバーヘッドがかかって速度が気になったのですが、今のマシンスペックなら十分ですね。
ゲームなのに無駄にドキュメントビューアーキテクトを利用したりすれば、MFC初心者にはいい参考になるかもですねw
あ~でもフリー版のVCにはMFCがついていないんでしたっけ??^^;

Re:タイトルバーに関する情報の取得方法

Posted: 2007年6月23日(土) 17:23
by 組木紙織
>あ~でもフリー版のVCにはMFCがついていないんでしたっけ??^^;

ついていないですねーVCのExpressだと。

C++/CLIが使えるので、マイクロソフトは、そちらで作って欲しいのかな、と思っています。

CLIで作るといまどきのパソコンでも起動が少し重たいのですが(笑)

Re:タイトルバーに関する情報の取得方法

Posted: 2007年6月23日(土) 20:35
by ま~く
あーやっぱりついていませんでしたね。^^

>C++/CLIが使えるので、マイクロソフトは、そちらで作って欲しいのかな、と思っています。

それは感じますねw

コラムス…その後

Posted: 2007年6月27日(水) 16:49
by バグ
グラフィックを変更してみたりしました。
とりあえず遊べるところまできましたが、まだ音が入ってないのでショボいです(苦笑)

Re:コラムス…その後

Posted: 2007年6月27日(水) 23:04
by ま~く
お~
ちゃくちゃくと完成に近づいていますね!
やはりコンソールに比べるとカラフルでいいですね。
背景のレンガ模様はこのままにするんですか?
このHPの背景のような黒を基調とした感じにすると見やすくなると思うのですがどうでしょう?

Re:タイトルバーに関する情報の取得方法

Posted: 2007年6月27日(水) 23:34
by バグ
グラフィックに関しては、画心のない私にとって、非常に頭が痛いところです…あのレンガ模様も単色よりはマシという程度のものですし…(;^_^A
本当は可愛いイラストなんかを背景に表示したいのですが…普通に無理です(笑)
音楽は知り合いのバンドのCDから借りられる事になったので、何も心配してないのですが、グラフィックに関しては打つ手なし状態です(;´Д`)

コラムスのその後のその後

Posted: 2007年7月04日(水) 17:35
by バグ
うーん、忙しくてなかなか進みません…(-_-;)
ゲームに音を入れるのは初めての事なので、どうしたものか(面倒だなぁ…)と思いつつ、今出来ている部分をチョコチョコといじっています。