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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0209
レノス右だけ可変ウィンドウ2解決


レノス

リンク

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



この記事に返信する


begriff

リンク

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



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