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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0818
(’’クライアント領域を上に広げたい3解決


(’’

リンク

2013/8/18(Sun) 14:22:59|NO.56498

Firefoxの左上のボタンっぽいのが作りたくて、

ひとまずこのサイト様の「フレームをクライアント領域にする」のをHSPで作ったんですが

#include "gdi32.as"
#include "user32.as" #define WM_NCCALCSIZE $00000083 #define SM_CXSIZEFRAME $00000020 #define SM_CYSIZEFRAME $00000021 GetSystemMetrics(SM_CXSIZEFRAME) : Lx=stat ;左右のウィンドウの幅 GetSystemMetrics(SM_CYSIZEFRAME) : Ly=stat ;下のウィンドウの幅 oncmd gosub *NCCALCSIZE,WM_NCCALCSIZE screen 0 color 255,100,100 : boxf color : pos 0,0 : mes "クライアント原点" stop *NCCALCSIZE if lParam{ dupptr NCCALCSIZE_PARAMS,lParam,16 NCCALCSIZE_PARAMS.0+=Lx //left NCCALCSIZE_PARAMS.1+=0 //top NCCALCSIZE_PARAMS.2-=Lx //right NCCALCSIZE_PARAMS.3-=Ly //bottom } return

サイトのスクショとは違い内側に狭まってしまいます・・・
HSPの仕様が違うのかと思ってtopをマイナスしたりもしたんですが、なんか変にバグります
どうすれば正しい処理になるでしょうか・・・



この記事に返信する


(’’

リンク

2013/8/18(Sun) 14:23:50|NO.56499




cats

リンク

2013/8/18(Sun) 20:39:04|NO.56504

とりあえず作ってみました。
自分の環境では上手くいきましたが他の環境で正確に動くかはわかりません。
ちなみに自分のOSはWindows 7でテーマはWindows 7 ベーシックです。

#uselib "user32.dll" #func SetWindowPos "SetWindowPos" int,int,int,int,int,int,int #func GetSystemMetrics "GetSystemMetrics" sptr #define WM_NCCALCSIZE $00000083 #define SM_CXSIZEFRAME $00000020 #define SM_CYSIZEFRAME $00000021 #uselib "dwmapi.dll" #func DwmExtendFrameIntoClientArea "DwmExtendFrameIntoClientArea" int,int #define ctype GetWinLR ((ginfo(6)-ginfo(4)-ginfo(12))/2) ;左右枠取得 #define ctype GetCaptionSize (ginfo(7)-ginfo(5)-ginfo(13)-GetWinLR()*2) ;タイトルバー高さ取得 //DwmExtendFrameIntoClientAreaの第2パラメータに入れる変数について //p2=a,b,c,d //a...左からの領域 //b...右からの領域 //c...上からの領域 //d...下からの領域 GetSystemMetrics(SM_CXSIZEFRAME):Lx=stat ;左右のウィンドウの幅 GetSystemMetrics(SM_CYSIZEFRAME):Ly=stat ;下のウィンドウの幅 TitY=GetCaptionSize() oncmd gosub *NCCALCSIZE,WM_NCCALCSIZE ;メッセージ監視 drw=lx,lx,TitY,ly ;左右からの領域はLXで下からの領域をLYにする DwmExtendFrameIntoClientArea hwnd,varptr(drw) screen 0,640,480 SetWindowPos hwnd,0,10,10,640,480 ;ウィンドウを再描画 boxf;これが無いと表示されない pos 10,0 ;X座標を0にすると本当に端っこになるのでここらへんがいいです。 objsize 100,18:button "HELLO",*MSG color 255:pos 200,0:mes "タイトルっぽく。" onclick gosub*move ;ウィンドウを移動 stop *MSG dialog "Hello!",0 stop *move if mousey<=TitY:sendmsg hwnd,$a1,2 return *NCCALCSIZE if lParam{ dupptr NCCALCSIZE_PARAMS,lParam,16 NCCALCSIZE_PARAMS.0-=Lx //left NCCALCSIZE_PARAMS.1-=TitY //top NCCALCSIZE_PARAMS.2+=Lx //right NCCALCSIZE_PARAMS.3+=Ly //bottom } return
参考にしたサイト:
http://www.ku6.jp/report/47.html
http://msdn.microsoft.com/ja-jp/library/cc411206.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/aa969512(v=vs.85).aspx
http://ht-deko.minim.ne.jp/tech068.html
http://msdn.microsoft.com/ja-jp/library/cc429812.aspx



(’’

リンク

2013/8/18(Sun) 21:10:48|NO.56506

おおおお

ありがとうございます!お借りします。



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