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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
1128
チャーくんbgscrのサイズ可変ウィンドウ9解決


チャーくん

リンク

2015/11/28(Sat) 21:17:16|NO.73316

最近スレ立たなくなりましたね…

HSPのbgscrで作成したウィンドウをサイズ可変ウィンドウにするにはどうしたらよいですか?
ウィンドウスタイルでタイトルバーを取り除く方法だと、Windows 10の環境で上部に
白い何かが出てしまい、背景色が黒などの場合目立ってしまいます。

というか、タイトルバーと右上ボタン部分のオーナードローってできないのでしょうか?
Visual Studioとかのタイトルバーみたいにタイトルバー部分に描画したいのですが…

回答よろしくお願いします…



この記事に返信する


Noap

リンク

2015/11/28(Sat) 23:07:59|NO.73324

スレはスペースさんの言葉のスレッドのことですか。そうであれば最近は少ないのは秋で平日で忙しい人が多いからだと思います。
実際土曜日の今日はたくさんスレッドがつくられたようです


#define WS_THICKFRAME $00040000 #define GWL_STYLE $FFFFFFF0 #define WM_NCLBUTTONDOWN $000000A1 #define WM_MOUSEMOVE $00000200 #define HTCAPTION $00000002 #define WM_LBUTTONDOWN $00000201 #uselib "user32.dll" #cfunc GetWindowLong "GetWindowLongA" sptr,int #func SetWindowLong "SetWindowLongA" sptr,int,int bgscr 0, 320, 240 SetWindowLong hwnd, GWL_STYLE, WS_THICKFRAME | GetWindowLong(hwnd,GWL_STYLE) button "おわり", *owari oncmd gosub *on_left_click, WM_LBUTTONDOWN stop *owari end *on_left_click sendmsg hwnd, WM_NCLBUTTONDOWN, HTCAPTION, lparam return 0



Moz

リンク

2015/11/28(Sat) 23:16:48|NO.73326

> HSPのbgscrで作成したウィンドウをサイズ可変ウィンドウにするにはどうしたらよいですか?
こちらが参考になるかと思います。
http://hsp.tv/play/pforum.php?mode=pastwch&num=66999



チャーくん

リンク

2015/11/29(Sun) 12:22:28|NO.73332

>Noap さん
 確かに昨日は増えてますね。
 
 最初はその方法を試していたのですが、Windows 10でウィンドウの上部に白いのが出て、
 黒で塗りつぶすと目立つので、この方法ではダメなようです。

>Moz さん
 過去ログも調べたのですが…調べきれてなかったようです。すみません。
 ちゃんとウィンドウサイズの変更ができるようになりました。

ありがとうございます。



Noap

リンク

2015/11/29(Sun) 15:41:12|NO.73334

ごめんなさい
もう解決したので余計かもしれませんがとんでもないうっかりミスをしていたので訂正します
そのときのわたしの環境ではこうしなくてもうまく動いていたので投稿時には気がつきませんでした
おそらくこのミスが原因です


#define WS_THICKFRAME $00040000 #define GWL_STYLE $FFFFFFF0 #define WM_NCLBUTTONDOWN $000000A1 #define WM_MOUSEMOVE $00000200 #define HTCAPTION $00000002 #define WM_LBUTTONDOWN $00000201 #define SWP_NOSIZE $00000001 #define SWP_NOZORDER $00000004 #define SWP_NOACTIVATE $00000010 #define SWP_NOMOVE $00000002 #define SWP_NOOWNERZORDER $00000200 #define SWP_FRAMECHANGED $00000020 #define SWP_DRAWFRAME SWP_FRAMECHANGED #define WM_NCCALCSIZE $00000083 #uselib "user32.dll" #cfunc GetWindowLong "GetWindowLongA" sptr,int #func SetWindowLong "SetWindowLongA" sptr,int,int #func SetWindowPos "SetWindowPos" sptr,int,int,int,int,int,int bgscr 0, 320, 240 SetWindowLong hwnd, GWL_STYLE, WS_THICKFRAME | GetWindowLong(hwnd,GWL_STYLE) //WM_NCCALCSIZEを送る SetWindowPos hwnd,,,,,,SWP_NOZORDER | SWP_NOMOVE | SWP_DRAWFRAME | SWP_NOACTIVATE | SWP_NOSIZE button "おわり", *owari oncmd gosub *on_left_click, WM_LBUTTONDOWN stop *owari end *on_left_click sendmsg hwnd, WM_NCLBUTTONDOWN, HTCAPTION, lparam return 0



チャーくん

リンク

2015/11/30(Mon) 14:50:50|NO.73345

> Noap さん
 WM_NCCALCSIZE……?と思い調べたところ、クライアント領域関係ですね。
 screenにこれを使った時は普通にできたのですが、
 bgscr+THICKFRAMEに使うと非アクティブになった時に謎の白いやつの幽霊が…
 
 う〜ん…
 なんでWindows 10は白いのが出るんだろ…



774

リンク

2015/11/30(Mon) 17:44:11|NO.73347

「枠は無いけど、ドラッグで可変する枠だよ!」となっている為、
システムの描画で齟齬が生じるのかと…

WM_Size & WM_NCHitTest のメッセージ処理が無難だと思いますよ。

一応、非クライアント部分も描画出来なくは無いというサンプルです。

#module #uselib "user32.dll" #cfunc _GetWindowDC "GetWindowDC" sptr #func _ReleaseDC "ReleaseDC" sptr, sptr #cfunc _DefWindowProc "DefWindowProcA" sptr,int,int,int #uselib "gdi32.dll" #func _BitBlt "BitBlt" sptr,int,int,int,int,sptr,int,int,int #deffunc NC_BitBlt int p0, int p1, int p2, int p3, int p4, int p5, int p6, local a a.1=_DefWindowProc(hWnd,iParam,wParam,lParam) a=_GetWindowDC(hWnd) :_BitBlt a,p1,p2,p5,p6,p0,p3,p4,$cc0020 :_ReleaseDC hWnd,a Return a.1 #global *start Screen 1,640,480,2,,,320,240 onCmd gosub *nc_paint,$0005 ;WM_Size onCmd gosub *nc_paint,$0085 ;WM_NCPaint onCmd gosub *nc_paint,$0086 ;WM_NCActivate Buffer 0,1280,960 :ii=hDC GradF 0,0,800,600,1,$ff0000,$ffff00 gSel 1,1 Stop *nc_paint NC_BitBlt ii,0,0,0,0,800,600 Return stat



Noap

リンク

2015/11/30(Mon) 18:30:48|NO.73350

WM_POPUPとWM_THICKFRAMEは共存できないのでしょうか
MSDNにはそのような記載はさいので一緒に使って問題ないと思っていました
https://msdn.microsoft.com/en-us/library/windows/desktop/ms632600.aspx



774

リンク

2015/11/30(Mon) 19:18:27|NO.73352

一緒に使うこと自体は問題ないと思いますよ。

WS_ThickFrame自体は、枠線部分でサイズ調整できるかのフラグであって
枠線の有無とは別物なんじゃないかという憶測です。

で、WS_Borderが無いと枠が存在しないと見なされて
その部分が描画されないケースがWindow10ではあるんじゃないかな、と思っただけです。


雑談失礼致しました。



Noap

リンク

2015/11/30(Mon) 21:20:17|NO.73354

今MSDNを探してみると日本語版を見つけたので一応そのURLを書きます
ただ英語版のほうが定数の値ものっていて詳しいので英語版も見るといいと思います
https://msdn.microsoft.com/ja-jp/library/czada357.aspx

とりあえずWS_BORDERをたしてみました
やはりパソコンはむずかしいです


#define GWL_STYLE $FFFFFFF0 #define WS_BORDER $00800000 #define WS_POPUP $80000000 #define WS_CAPTION $00C00000 #define WS_DISABLED $08000000 #define WS_THICKFRAME $00040000 #define WS_HSCROLL $00100000 #define WS_VSCROLL $00200000 #define WS_MAXIMIZE $01000000 #define WS_MAXIMIZEBOX $00010000 #define WS_MINIMIZE $20000000 #define WS_MINIMIZEBOX $00020000 #define WS_DLGFRAME $00400000 #define WS_SIZEBOX WS_THICKFRAME #define WS_CHILD $40000000 #define WS_SYSMENU $00080000 #define WS_VISIBLE $10000000 #define WM_NCLBUTTONDOWN $000000A1 #define WM_MOUSEMOVE $00000200 #define WM_LBUTTONDOWN $00000201 #define HTCAPTION $00000002 #uselib "user32.dll" #cfunc GetWindowLong "GetWindowLongA" sptr,int #func SetWindowLong "SetWindowLongA" sptr,int,int #func MoveWindow "MoveWindow" sptr,int,int,int,int,int bgscr 0, ginfo_dispx, ginfo_dispy,screen_hide SetWindowLong hwnd, GWL_STYLE, WS_THICKFRAME | GetWindowLong(hwnd,GWL_STYLE) | WS_BORDER MoveWindow hwnd, ginfo_wx1, ginfo_wy1, 300, 300, 1 button "おわり", *owari oncmd gosub *on_LBUTTONDOWN, WM_LBUTTONDOWN gsel 0,1 stop *owari end *on_LBUTTONDOWN sendmsg hwnd, WM_NCLBUTTONDOWN, HTCAPTION, lparam return 0



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