【100ポイント】 Windowsプログラミングに関する質問です。最も参考になる回答をしてくださった方(1名様)に100ポイントを進呈します。


Visual Studio 2005(C++)でWin32のプログラムを実装しています。以下の2つの実装方法を教えてください。

1.アプリケーションのタイトルバーの縦幅を取得する方法。
2.タイトルバーの右側に何個のアイコンがあるかを知る方法。(通常は、最小化・最大化・削除の3つ)

サンプルコードが解説されているサイト、もしくはサンプルコードそのものを教えていただければと思います。

両方セットでの回答と、C++のサンプルであることを条件とさせていただきます。

以上宜しくお願い致します。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2006/07/30 17:29:42
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Kumappus No.1

回答回数3784ベストアンサー獲得回数185

ポイント100pt

1.アプリケーションのタイトルバーの縦幅を取得する方法。

http://www.geocities.co.jp/SiliconValley-Bay/4543/Osero/Window/W...

タイトルバー(キャプション)の高さを求めるには、GetSystemMetrics関数にint SM_CYCAPTION を与えればいいです。

2.タイトルバーの右側に何個のアイコンがあるかを知る方法。(通常は、最小化・最大化・削除の3つ)

こちらはちょっとややこしいですが、まず

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja...

::GetWindowLong関数でGWL_STYLEを引数に与えて返ってくるlongの値のビット単位の&を取ればいいです。

http://yokohama.cool.ne.jp/chokuto/urawaza/prm/window_style.html

http://www.functionx.com/visualc/applications/WakeMeUp.htm

あたりを見てください。

ざっと書くと

LONG styles = GetWindowLong(this->m_hWnd, GWL_STYLE);

int buttons = 1; // 最低でも1。

if (styles & WS_MINIMIZEBOX) buttons++; // 最小化があるか

if (styles & WS_MAXIMIZEBOX) buttons++; // 最大化があるか

クローズボックス(削除:右隅のX)を消すことは普通のウィンドウスタイルではできないので答えは1,2,3のどれかになります。

(押しても無効、というのはできますが…)

id:er7

回答ありがとうございます。今日、動作確認をしたので返事が遅くなって申し訳ありません。

2番のアイコンの数を確認する方法は上手く動きました。

1番のタイトルバーの縦幅を取得する方法ですが、HWNDから取得する方法はないのでしょうか?

【追記】

とりあえずクローズします。ありがとうございました。また何か分かりましたら御願いします。

2006/07/30 17:27:48

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません