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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
1124
名無しさんウィンドウ枠の拡張5解決


名無しさん

リンク

2012/11/24(Sat) 11:57:53|NO.50847

HSPで、WindowsVistaのAero有効の場合のAlt+Tabで出るウィンドウや、
サイドバーガジェット選択画面のように、ウィンドウの枠を全面に拡張して、
Aero有効の場合は全面を透かすようなことはできないでしょうか。
調べたのですが分かりませんでした。回答よろしくお願いします。



この記事に返信する


@key

リンク

2012/11/24(Sat) 16:01:10|NO.50851

自分も結構気になる分野だったりするので調べたんですが一向に見つかりません

ただ気になるフリーソフトがあったので載せておきます
ソースコード(おそらくC++かC#)も同時にダウンロードできるので読めるのであれば参考にして下さい

http://aeronotes.codeplex.com/



inovia

リンク

2012/11/24(Sat) 17:12:19|NO.50852

過去ログが参考になるかも?
http://hsp.tv/play/pforum.php?mode=pastwch&num=28280



名無しさん

リンク

2012/11/24(Sat) 18:45:07|NO.50853

@keyさん、inoviaさん、ありがとうございました。
ウィンドウが綺麗です。
解決済みにします。



大富豪A

リンク

2012/11/24(Sat) 20:33:11|NO.50854

すいません;;
inoviaさんの貼っていただいたURLのスクリプトを実行するとどのような感じになるのでしょうか?



inovia

リンク

2012/11/24(Sat) 21:37:03|NO.50855

NO.28291で投稿したスクリプトの挙動にちょっと問題があったので修正&モジュール化。
文字等にアンチエイリアスがかかると輪郭が汚くなるので、素直にGDI+使った方がいいかも。

>inoviaさんの貼っていただいたURLのスクリプトを実行するとどのような感じになるのでしょうか?
こんな感じ
http://twitpic.com/bg0h6a


#module TransparentWindow #uselib "dwmapi.dll" #func DwmExtendFrameIntoClientArea "DwmExtendFrameIntoClientArea" int, var #uselib "user32.dll" #func ClientToScreen "ClientToScreen" int, var #cfunc GetWindowLongA "GetWindowLongA" int, int #func GetWindowRect "GetWindowRect" int, var #func GetClientRect "GetClientRect" int, var #func SetWindowLongA "SetWindowLongA" int, int, int #func SetLayeredWindowAttributes "SetLayeredWindowAttributes" int, int, int, int #func SetParent "SetParent" int, int #func SetWindowPos "SetWindowPos" int, int, int, int, int, int, int #define WM_MOVE 0x0003 #define WM_SIZE 0x0005 #define WM_NCACTIVATE 0x0086 #define WM_ACTIVATE 0x0006 #define WS_EX_NOACTIVATE 0x08000000 #define WS_EX_LAYERED 0x00080000 #define WS_CHILD 0x40000000 #define SWP_NOSIZE 0x0001 #define SWP_NOMOVE 0x0002 #define SWP_NOACTIVATE 0x0010 #define GWL_STYLE (-16) #define GWL_HWNDPARENT (-8) #define GWL_EX_STYLE (-20) #define ctype RGB(%1,%2,%3) (%1 | %2 << 8 | %3 << 16) #define global screen_ex(%1=0,%2=640,%3=480,%4=0,%5=-1,%6=-1,%7=-1,%8=-1) _screen_ex %1, %2, %3, %4, %5, %6, %7, %8 #deffunc tcolor int _r, int _g, int _b r = _r : g = _g : b = _b return #deffunc _screen_ex int _id, int _width, int _height, int _mode, int _posx, int _posy, int _sizex, int _sizey // 外側用のウィンドウ作成 if _sizex == -1 : sizex = _width if _sizey == -1 : sizey = _height screen _id + 1, _width, _height, _mode, _posx, _posy, sizex, sizey : hParent = hwnd // クライアント座標からスクリーン座標に変換 dim point, 4 : ClientToScreen hParent, point // 内側用のウィンドウ作成(描画先) bgscr _id, _width, _height, _mode, point(0), point(1), sizex, sizey : hChild = hwnd SetWindowLongA hChild, GWL_HWNDPARENT, hParent SetWindowLongA hChild, GWL_EX_STYLE, GetWindowLongA(hChild, GWL_EX_STYLE) | WS_EX_LAYERED SetLayeredWindowAttributes hChild, RGB(r, g, b), 0, 1 gsel _id + 1, 0 oncmd gosub *MOVE, WM_MOVE oncmd gosub *SIZE, WM_SIZE oncmd gosub *NCACTIVATE, WM_NCACTIVATE oncmd gosub *ACTIVATE, WM_ACTIVATE // -1 を指定するとウィンドウ全体 margins = -1, 0, 0, 0 DwmExtendFrameIntoClientArea hParent, margins boxf gsel _id, 0 oncmd gosub *NCACTIVATE, WM_NCACTIVATE color r, g, b : boxf return *SIZE // リサイズ時の処理 rect = 0, 0, 0, 0 GetClientRect hParent, rect SetWindowPos hChild, 0, 0, 0, rect.2, rect.3, SWP_NOMOVE | SWP_NOACTIVATE return *MOVE // 移動したときに ID 0 の位置に ID 1のウィンドウを移動させる xPos = (lParam & 0xFFFF) : yPos = (lParam>>16) & 0xFFFF if xPos > (0xFFFF/2) : xPos = xPos - 0xFFFF SetWindowPos hChild, 0, xPos, yPos, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE return *NCACTIVATE fActive = wParam & 0xFFFF // 非アクティブ化されようとしているときは、ウィンドウをチェック if fActive == 0{ if lParam == hChild : return 1 } return *ACTIVATE fActive = wParam & 0xFFFF if fActive == 0{ SetWindowPos hParent, hChild, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE logmes "OFF" }else{ SetWindowPos hParent, hChild, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE logmes "ON" } return #global // 透明にする色を指定します tcolor 254, 254, 254 // Aeroな半透明ウィンドウ化命令 // screen命令と引数が同一ですが、ウィンドウが2つ分消費されます // 第1引数に0を指定した場合は、ID:0とID:1のウィンドウが作成されます // (指定したID+1が使用される) screen_ex 0 // 文字を書いてみる(ID:0) gsel 0, 0 color 255 font "FixedSys", 14 mes "Aeroな半透明ウィンドウ!" color 255 font "メイリオ", 32, 16 mes "アンチエイリアスが有効だと汚くなる\n(GDI+を使った方が良い)" button gosub "ボタン", *btn // title命令を使用する場合は gsel で変更する必要があります(ID:1) gsel 1, 0 : title "Aeroな半透明ウィンドウ" stop *btn dialog "ボタン" return



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