[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

[MD:432]menubar and minibuffer.



椿本@シセン堂です。

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>