|
|
2008/2/9(Sat) 19:14:14|NO.13484
ウィンドウ (ListBox) の右側のフレームのみを、
左右に動かせるようにするにはどうすれば良いのですか?
できればご教授ください、お願いします。
// これだと四辺とも動いてしまう
#uselib "user32.dll"
#func SetWindowLong "SetWindowLongA" int,int,int
#cfunc GetWindowLong "GetWindowLongA" int,int
#func MoveWindow "MoveWindow" int,int,int,int,int
objsize 120, 480
listbox a, 20, "a\nb\nc"
hLb = objinfo( stat, 2 )
SetWindowLong hLb, -16, GetWindowLong( hLb, -16 ) || 0x00040000
stop
|
|
2008/2/10(Sun) 20:28:04|NO.13499
こんにちは
#uselib "user32.dll"
#func SetWindowLong "SetWindowLongA" int,int,int
#func PeekMessage "PeekMessageA" var,int,int,int,int
#cfunc GetWindowLong "GetWindowLongA" int,int
#func MoveWindow "MoveWindow" int,int,int,int,int
width ,,0,0
hLb = hwnd
SetWindowLong hLb, -16, GetWindowLong( hLb, -16 ) || 0x00040000
oncmd gosub *cmd,$214
stop
*cmd
dupptr rect,lparam,16
if wparam!2{
rect(0)=0;
rect(1)=0; 強制的に変更する
}
rect(3)=512
return
これはウィンドウに対するメッセージに対応させている形になっています。
これですとウィンドウのサイズ変更に割り込みできます。しかしオブジェクトに対しては割り込みできません);
PeekMessageA を使えばオブジェクトに対するメッセージ処理も何とかなると思うのですが、うまくいきません (涙
一応(期待どうりの動作をしてくれません。)参考までに
#uselib "user32.dll"
#func SetWindowLong "SetWindowLongA" int,int,int
#func PeekMessage "PeekMessageA" var,int,int,int,int
#cfunc GetWindowLong "GetWindowLongA" int,int
#func MoveWindow "MoveWindow" int,int,int,int,int
objsize 120,120
pos ,200
listbox a, 20, "a\nb\nc"
id=stat
hLb = objinfo( stat, 2 )
SetWindowLong hLb, -16, GetWindowLong( hLb, -16 ) || 0x00040000
pos 0,0
while(1)
dim msg,6
PeekMessage msg,hLb,0,0,0
color 255,255,255:boxf:color
pos 0,0
mes msg(0)
mes msg(1)
mes msg(2)
mes msg(3)
mes msg(4)
mes msg(5)
if msg(1)!0:dialog msg(1)
redraw 1
wait 1
redraw 0
wend
stop
どなたかわかる方お願いします。
| |
|
2008/2/10(Sun) 22:41:15|NO.13507
>> begriff さん
ありがとうございます。
上の方のスクリプトをいろいろ弄くってみたところ、うまく動作できました。
ListBox をタイトルバー無しウィンドウに乗っけ、
そのウィンドウの右側フレームだけを触れるようにしてみました。
(下地ウィンドウと同サイズになるよう MoveWindow() で調整)
#uselib "user32.dll"
#func SetWindowLong "SetWindowLongA" int,int,int
#cfunc GetWindowLong "GetWindowLongA" int,int
#func GetClientRect "GetClientRect" int,int
#func GetWindowRect "GetWindowRect" int,int
#func SetParent "SetParent" int,int
#func MoveWindow "MoveWindow" int,int,int,int,int
#ifndef BitOff // ビット倒しマクロ
#define ctype BitOff(%1,%2=0) ( ((%1) && (%2) ^ (%1)) )
#endif
#enum wID_Main =0
#enum wID_LBback
dim hWin, 2
hWin(0) = hwnd
dim Rect, 4
bgscr wID_LBback, ginfo(20), ginfo(21), 2 // 下地となるウィンドウを作成
SetWindowLong hwnd, -20, ( GetWindowLong(hwnd, -20) || 0x0080 ) // タスクバーに表示されないようにする
SetWindowLong hwnd, -16, BitOff( GetWindowLong(hwnd, -16) || 0x00040000 || WS_CHILD, WS_POPUP ) // 子供スタイル
SetParent hwnd, hWin(wID_Main) // 子ウィンドウにする(うまくいっていない気がする……)
hWin(wID_LBback) = hwnd
objsize 120, 489
pos 0, 0 : ListBox a, 0, "" : LbInfo = objinfo(stat, 2), stat
width 125, 460 , 5, 5
gsel wID_LBback, 1
oncmd gosub *cmd, 0x0214
stop
*cmd
gsel wID_LBback
GetWindowRect hwnd, varptr(Rect)
dupptr _rect, lparam, 16
if wparam != 2 {
_rect(0) = Rect(0) ;
_rect(1) = Rect(1) ; 強制的に変更する
}
_rect(3) = Rect(3) // 縦幅固定
if (Rect.2 - Rect.0) != (_rect.2 - _rect.0) {
MoveWindow LbInfo, 0, 0, _rect(2) - _rect(0) -5, _rect(3) - _rect(1)
}
return
| |
|