HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0302
tnrウィンドウサイズを…8解決


tnr

リンク

2007/3/2(Fri) 14:05:54|NO.5961

はじめまして。
さっそく質問させていただきますm(__)m


WIN32APIを使って、ウィンドウに、メューバーとステータスバーを付けました。

その際、クライアントエリアを640x480にしたいので、
初期ウィンドウサイズを計って640x519にしました。
友人に頼んで、色々な環境で試したところ
Windows98では、サイズが合わないみたいで、
y軸が、480の確保したいエリアと、
ステータスバーとの間に隙間が出来てしまいます。

この問題はどう対応すればいいのでしょうか?

よろしくお願いします。

(現在、ネット環境がないので携帯からの投稿、申し訳ありません)



この記事に返信する


pizza

リンク

2007/3/3(Sat) 02:52:06|NO.5977

AdjustWindowRectEx()を使って計算してください。
(Windows98が無いので確認できませんが...)

#include "user32.as"
#include "comctl32.as"
#define GWL_STYLE -16
#define GWL_EXSTYLE -20
#define SWP_NOMOVE 2
#define SWP_NOZORDER 4
#define WM_SIZE 5

; 大きめに初期化
screen 0, ginfo_dispx, ginfo_dispy, 2, 0, 0
; 適当に作成
CreateMenu : hMenu = stat
AppendMenu hMenu, 0, 0, "test"
SetMenu hwnd, hMenu
DrawMenuBar hwnd
CreateStatusWindow 0x50000000, "test", hwnd, 0
hStatus = stat

dim rcStatus, 4
GetWindowRect hStatus, varptr(rcStatus)

GetWindowLong hwnd, GWL_STYLE
style = stat
GetWindowLong hwnd, GWL_EXSTYLE
exStyle = stat

bMenu = 1; ウィンドウメニューがあるなら1無ければ0
// ステータスバーはクライアントエリア上に置かれるので高さを足しておく
rect = 0, 0, 640, 480+(rcStatus(3)-rcStatus(1))
AdjustWindowRectEx varptr(rect), style, bMenu, exStyle
SetWindowPos hwnd, 0, 0, 0, rect(2)-rect(0), rect(3)-rect(1), SWP_NOMOVE|SWP_NOZORDER
sendmsg hStatus, WM_SIZE, rect(2)-rect(0), rect(3)-rect(1)

gsel 0,1
;確認
color 255 : boxf
color : boxf 0, 0, 640, 479

stop



だらみ

リンク

2007/3/3(Sat) 12:32:49|NO.5978

生でスクリプトをコピペするな。



tnr

リンク

2007/3/3(Sat) 13:03:11|NO.5981

>pizza様

ご説明、サンプルスクリプト、どうもありがとうございます。
参考にさせていただきますm(__)m

今、私の元にも98がないので試すことができません。
友人に頼みまして、今週中には結果が分かると思います。

必ず、ご報告させていただきます。

どうもありがとうございました。
それまでは、このスクリプトを調べて理解したいと思います。

>だらみ様

スクリプトを検証する際に、コピペをしたいのですが
他の方のスクリプトをそのまま使用するのは
やっぱりまずいのでしょうか?



pizza

リンク

2007/3/3(Sat) 19:47:47|NO.5988

>生でスクリプトをコピペするな

preタグで囲んで無いってことでしょうか?
すみません、忘れていました。

>スクリプトを検証する際に、コピペをしたいのですが
>他の方のスクリプトをそのまま使用するのは
>やっぱりまずいのでしょうか?

コピペで試せるように書いたサンプルなので、ご自由にどうぞ。



pizza

リンク

2007/3/4(Sun) 00:53:19|NO.5996

これでもいけるかも。


beforeHeight = ginfo_winy //メニュー割り当て前のクライアントエリアの高さ sh = ステータスバーの高さ // ここでメニューを割り当てる //480+減った分+ステータスバーの高さ width 640, 480+(beforeHeight-ginfo_winy)+sh



tnr

リンク

2007/3/11(Sun) 12:44:06|NO.6207

pizza様

実際に試してみたところ、
98,SE,ME,XPで正常動作を確認致しました!

感謝しています
ありがとうございましたm(__)m

一つ疑問なのですが、
最後のsendmsgはなんの為なのでしょうか?

ステータスバーのサイズを再設定しているようですが…



pizza

リンク

2007/3/11(Sun) 17:52:27|NO.6209

>最後のsendmsgはなんの為なのでしょうか?

ステータスバーのリサイズです。
今試してみたらwParamとlParamは0でいいみたいです。
(そういえば、wParamはリサイズタイプでした)

親ウィンドウのサイズが変更された時、
ステータスバーにWM_SIZEを送ると勝手にリサイズしてくれます。

↓こんな感じにしておく


oncmd gosub *lb_OnSize, WM_SIZE stop *lb_OnSize sendmsg hStatus, WM_SIZE, 0, 0 return



tnr

リンク

2007/3/14(Wed) 18:33:51|NO.6290

なるほど、
よく分かりました。

変更された時のことを考えてなかったです(^^;

明確なご説明、
どうもありがとうございました!



ONION software Copyright 1997-2021(c) All rights reserved.