[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 05/09 12:24 / Filesize : 103 KB / Number-of Response : 480
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Win32API質問箱 Build76



446 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 20:26:02 ]
これをwin32の質問と見なして良いかどうか微妙ですが、
考えていると脳みそが沸騰して訳が分からなくなったので質問させていただきます。
質問
・VISTAのAero ON でウィンドウを作成する前にそのサイズを知る方法。
開発環境 SDK/VC++ 2005

問題の解決には、通常GetSystemMetrics()かAdjustWindowRectEx()を使うと思います。
ところが、VISTAのAeroが有効なときは奇妙な現象が起こります。
そこで実験してみました。
dwStyleA = (WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CLIPCHILDREN);
dwStyleB = dwStyleA | WS_THICKFRAME;
の設定で、100,100 (800x600)をAdjustWindowRectEx すると
dwStyleA: 97,76 806x627
border w,h: 3,3
dwStyleB: 92,71 816x637
border w,h: 8,8
という結果が返ります。各borderは、次の式で求めています。
横は(ウィンドウ幅-クライアント幅)/2
縦は(ウィンドウ高-クライアント高-::GetSystemMetrics(SM_CYSMCAPTION))/2
一見して当たり前で、作成されたウィンドウをキャプチャしてサイズを確認した
ところ、確かに2000/Xp/VISTA aero off の時は見た目もこの通りになります。
しかし、VISTAのaeroが有効な環境では、dwStyleAでもdwStyleBでも、
見た目はdwStyleBと同じ(!)になるのです。
しかも、GetSystemMetricsもAdjustWindowRectExもAero on/off で同じ値を返します。
もちろん作成後に GetWindowRect()した場合、AdjustWindowRectEx()と
整合性のある値(つまり見た目とは違った値)を返します。
これがAPIのバグでないとしたら、dwm.exeが独自にウィンドウを装飾している
ものと思われますが、その値を取得する方法がわかりません。

1.Aero on時に見た目通りのウィンドウサイズを取得する方法は?
2.Aero on時のウィンドウサイズは常に thickframeと同じと見なしていいの?
3.2が良いとした場合、Aero on を手軽に知る方法は?






[ 続きを読む ] / [ 携帯版 ]

全部読む 前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<103KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef