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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0826
774ボタン無し、リサイズ不可なウィンドウ4解決


774

リンク

2009/8/26(Wed) 00:17:34|NO.27308

いろいろなウェブページを見て、
ボタン無し、リサイズ不可なウィンドウ
を作成するために、以下のようなコードを書いてみたのですが、
ボタン無し、リサイズ不可なウィンドウ として動作してくれるものの
ウィンドウの周囲部にゴミのような物が表示され困っています。
オプション画面を表示した後で、メイン画面とオプション画面を交互に切り替えると
オプション画面の方にゴミが表示されます。
SetWindowLong と言う単語でサーチエンジンで調べてみたのですが
いまいち理解できないので、どなたか適切な方法を教えて下さい。


#include "user32.as" screen 0 title "メイン画面" objsize 100,30 button gosub "オプション画面表示", *L1 screen 2,630,400,0+2 // +2 で非表示な窓 GetWindowLong hwnd, -16 SetWindowLong hwnd, -16, stat + $40000 // ボタン無し、リサイズ不可 title "オプション画面" stop *L1 gsel 2,1 // screen 2 をアクティブに return



この記事に返信する


たこ

リンク

2009/8/26(Wed) 01:19:40|NO.27316

Vistaですが774さんのいう『ごみ』を表示されませんでしたよ。



ANTARES

リンク

2009/8/26(Wed) 01:22:19|NO.27317

 関連する定数は以下の4つですね。

#define WS_MAXIMIZEBOX 0x10000 最大化ボタン
#define WS_MINIMIZEBOX 0x20000 最小化ボタン
#define WS_SIZEBOX 0x40000 リサイズ可能
#define WS_SYSMENU 0x80000 閉じるボタン(+システムメニュー)

 これらのビットを0にしたいわけですが、他の条件を
変えないようにするには、他のビットは影響を受けず、
これらのビットのみ0にする演算を考えなければなりません。
 結論を言うと、これらのビットを0にして他のビットを
1にした値とANDをとります。
 これらのビットを0にして他のビットを1にした値は
HSPで以下のようにして求められます。

mes strf("%X",$FFFFFFFF ^ ($10000 | $20000 | $40000 | $80000))

 したがって、次のようにすればいいことになります。

GetWindowLong hwnd, -16
SetWindowLong hwnd, -16, stat & $FFF0FFFF// ボタン無し、リサイズ不可



ANTARES

リンク

2009/8/26(Wed) 01:32:51|NO.27318

 774さんの行なった演算を検証してみます。

GetWindowLong hwnd, -16: rt=stat
mes strf("%X",rt)

とすると、16CE0000と表示されました。
これに0x40000を加えると16D20000となります。
したがって、$100000のビットが立ち、
$80000, $40000のビットがクリアされました。

#define WS_HSCROLL 0x100000

ですから、水平スクロールバーが表示されました。



774

リンク

2009/8/26(Wed) 18:43:41|NO.27334

ANTARES さん、非常に詳細な説明、ありがとうございます。
and と or を使った論理演算や
strf で調べたい数値を 16進数で表示する方法など
勉強になりました。
SetWindowLong の stat の部分を闇雲に足したり引いたりしていたのですが
今回の説明でバッチリ理解できました。
あと、たこさんも Vista の件、調べて頂いてありがとうございました。
環境による所も有るみたいですね。



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