[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
[MD:432]menubar and minibuffer.
- X-ml-count: 432
- Subject: [MD:432]menubar and minibuffer.
- From: Hiroya Tsubakimoto <zorac@xxxxxxxxxxxx>
- Date: Wed, 14 Jan 1998 15:31:59 +0900 (JST)
- X-mailer: cmail [version 2.59.11]
椿本@シセン堂です。
In message "[MD:429]menubar and minibuffer."
on 98/01/14, Miyashita Hisashi(宮下 尚:HIMI) <himi@xxxxxxxxxxxxxxxxxxxxxxxxx> writes:
>
> ほとんど、ちゃちゃです。
>
> Hiroya Tsubakimoto <zorac@xxxxxxxxxxxx> writes:
>
> > 現在のメニューバーの高さ(pixel数)は次の式で出ます。
> >
> > menuHeight = <Window全体の高さ> - <Client領域の高さ>
> > - GetSystemMetrics(SM_CYFRAME) * 2
> > - GetSystemMetrics(SM_CYCAPTION);
>
> これ、問題がありすぎると思います。
> Non Clinet Areaに何があるか仮定し過ぎです。
そうですね。この部分だけを汎用と考えると問題は出ます。
しかし、ウインドウのスタイルを決定しているのもMeadow内部なので、
アプリケーションの範囲を超えて何かを仮定しているわけではありません。
もう少し汎用にするなら、ウインドウスタイルからmetricsの項目を決定
することになります。
それでもNon Client Areaを自前で書いた場合は使えませんが。^_^
今回の目的に使えるかどうかは判りませんが、目的が、「メニューバーの
高さを求める」ではなく、「メニューバーの高さに依存せずウインドウの高さを
調整する」ことでしたら、
WM_WINDOWPOSCHANGED(もしくはWM_SIZE)メッセージ処理で、
<現在のWindow全体の高さ> - <現在のClient領域の高さ>
+ <調整後のClient領域の高さ>
によりWindowの高さを再調整する方法があります。
この方法は「Non Client Areaの高さはClient Areaの高さに依存しない」
ことを前提とします。
横幅の調整が入った場合でも、1回目の調整で横幅が確定しますので、
WM_WINDOWPOSCHANGED処理の再帰は最大2回で終結します。
もちろん、高さ(幅)が目的の条件を満たしている場合(今回は文字サイズの
整数倍?)はサイズを変更しない、という条件は必要です。^_^
--
椿本 浩也 (Hiroya Tsubakimoto)
Office: <zorac@xxxxxxxxxxxx> 有限会社シセン堂
Home: <zorac@xxxxxxxxxxxxxxxxxxxxx>