人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

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

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

●質問者: er7
●カテゴリ:コンピュータ インターネット
✍キーワード:C++ Visual Studio Win32 Windows いただきます
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● くまっぷす
●100ポイント ベストアンサー

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のどれかになります。

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

◎質問者からの返答

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

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

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

【追記】

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ