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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0913
bVisualStdioとかOffice 2013のウインドウの光を再現してみた8解決


b

リンク

2015/9/13(Sun) 22:30:04|NO.71654

数分で作ったので手抜き。
レイヤーモジュール
[ placeark ]
by natade
url http://www.placeark.com/


明日モジュール化します。

#ifndef LayeredWindowModule_destructor #module LayeredWindowModule ;┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ;┃ [ レイヤーウィンドウモジュール2 ] ;┃ ;┃現在の描画指定先のウィンドウを、簡単に半透明なウィンドウに切り替えます。 ;┃レイヤーウィンドウモジュール1を最適化して使いやすくなっています。 ;┃レイヤーウィンドウモジュール1と命令の互換性はありません。 ;┃このモジュールは、NYSLです。 ;┃Windows 2000/XP以上の環境で動作します。 ;┃ ;┃ ;┃命令はシンプル! ;┃ ;┃ ;┃アルファブレンド系命令 3種類 ;┃ ;┃・enableAlphaBlendWindow p1 ;┃p1 … アルファ値を示したウィンドウID ;┃p1 のウィンドウのRの値が、ウィンドウのブレンド率となります。 ;┃ ;┃・enableAlphaBlendWindowRGB p1 ;┃p1 … アルファ値を示したウィンドウID ;┃p1 のウィンドウの各色の値が、ウィンドウのブレンド率となります。 ;┃ ;┃・disableAlphaBlendWindow ;┃現在のウィンドウのレイヤードウィンドウを解除する ;┃ ;┃現在のウィンドウを、アルファ値を利用したウィンドウに変更します。 ;┃2回目から前回と同じ大きさのウィンドウに実行すると、メモリの再確保を行わないため高速化します。 ;┃なおウィンドウにした場合、mesboxなどオブジェクト系は一般に利用できなくなります。 ;┃p1はメインウィンドウと同じ大きさのウィンドウを用意してください。 ;┃ ;┃ ;┃ ;┃クロマキー系命令 2種類 ;┃ ;┃・enableChromaKey p1 ;┃p1 … クロマキーに指定する色 ;┃ ;┃・disableChromaKey ;┃現在のウィンドウのレイヤードウィンドウを解除する ;┃ ;┃ ;┃ ;┃ 2008 3/20 レイヤーウィンドウモジュール1 公開 ;┃ 2013 4/28 レイヤーウィンドウモジュール2 公開 ;┃ ;┃[ placeark ] ;┃ by natade ;┃ url http://www.placeark.com/ ;┃ ;┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #uselib "kernel32.dll" #func VirtualAllocLayeredWindowModule "VirtualAlloc" int, int, int, int #func VirtualFreeLayeredWindowModule "VirtualFree" int, int, int #define NULL 0x00000000 #define PAGE_EXECUTE_READWRITE 0x00000040 #define MEM_COMMIT 0x00001000 #define MEM_RESERVE 0x00002000 #define MEM_DECOMMIT 0x00004000 #define MEM_RELEASE 0x00008000 #deffunc LayeredWindowModule_destructor onexit if(NULL != make32bitdib_ptr) { VirtualFreeLayeredWindowModule make32bitdib_ptr, 424, MEM_DECOMMIT VirtualFreeLayeredWindowModule make32bitdib_ptr, 0, MEM_RELEASE make32bitdib_ptr = NULL } if(NULL != make32bitdib_fast_ptr) { VirtualFreeLayeredWindowModule make32bitdib_fast_ptr, 348, MEM_DECOMMIT VirtualFreeLayeredWindowModule make32bitdib_fast_ptr, 0, MEM_RELEASE make32bitdib_fast_ptr = NULL } return #deffunc LayeredWindowModule_constructor VirtualAllocLayeredWindowModule NULL, 424, MEM_RESERVE, PAGE_EXECUTE_READWRITE VirtualAllocLayeredWindowModule stat, 424, MEM_COMMIT, PAGE_EXECUTE_READWRITE make32bitdib_ptr = stat dupptr make32bitdib_bin, stat, 424, vartype("int") make32bitdib_bin( 0) = $0824548B, $8320EC83, $840F003A, $0000018E, $2C244C8B, $0F003983, $00018184, $7A8B5700 make32bitdib_bin( 8) = $247C8904, $04793B18, $0166850F, $428B0000, $08413B08, $015A850F, $7A830000, $850F000C make32bitdib_bin( 16) = $00000146, $000C7983, $013C850F, $8B550000, $518B146A, $748D5614, $E683037F, $246C89FC make32bitdib_bin( 24) = $24548910, $24748928, $0FC08524, $0001108E, $5C8B5300, $C9333424, $1C244C89, $38245C89 make32bitdib_bin( 32) = $20244489, $FF85D98B, $00D78E0F, $748B0000, $C58B3824, $C22BCA03, $10244489, $18247C89 make32bitdib_bin( 40) = $0241B60F, $0151B60F, $0339B60F, $3DC703C2, $000002FD, $448B2675, $B60F1024, $16890814 make32bitdib_bin( 48) = $2B44B60F, $08E0C101, $0689C20B, $2B54B60F, $00CA8102, $C1FFFFFF, $62EB10E2, $0475C085 make32bitdib_bin( 56) = $5EEB0689, $027DFA3B, $B60FFA8B, $F83B0241, $F88B027D, $1024448B, $0814B60F, $0F01B60F make32bitdib_bin( 64) = $FAC1D0AF, $0F168908, $012B44B6, $0169B60F, $25C5AF0F, $0000FF00, $548BC20B, $06891424 make32bitdib_bin( 72) = $1354B60F, $69B60F02, $D5AF0F02, $14246C8B, $FF00E281, $E7C10000, $C1D70B10, $D00B08E2 make32bitdib_bin( 80) = $C6831689, $03C38304, $FF03C183, $0F18244C, $FFFF4B85, $247C8BFF, $24748B24, $24548B28 make32bitdib_bin( 88) = $244C8B2C, $BD048D1C, $00000000, $38244401, $4CFFCE03, $4C892024, $850F1C24, $FFFFFF04 make32bitdib_bin( 96) = $335D5E5B, $C4835FC0, $03B8C320, $5F000000, $C320C483, $000002B8, $C4835F00, $01B8C320 make32bitdib_bin(104) = $83000000, $00C320C4 VirtualAllocLayeredWindowModule NULL, 348, MEM_RESERVE, PAGE_EXECUTE_READWRITE VirtualAllocLayeredWindowModule stat, 348, MEM_COMMIT, PAGE_EXECUTE_READWRITE make32bitdib_fast_ptr = stat dupptr make32bitdib_fast_bin, stat, 348, vartype("int") make32bitdib_fast_bin( 0) = $08244C8B, $8310EC83, $840F0039, $00000140, $1C24548B, $0F003A83, $00013384, $598B5300 make32bitdib_fast_bin( 8) = $045A3B04, $011C850F, $418B0000, $08423B08, $0110850F, $79830000, $850F000C, $000000FC make32bitdib_fast_bin(16) = $000C7A83, $00F2850F, $498B0000, $14528B14, $5B6C8D55, $FCE58303, $14246C89, $8E0FC085 make32bitdib_fast_bin(24) = $000000D0, $24748B56, $24748920, $02728D24, $244C8957, $24748910, $24448914, $00498D18 make32bitdib_fast_bin(32) = $8E0FDB85, $00000081, $2824448B, $FF8BFB8B, $8316B60F, $FA8103C6, $000000FF, $B60F2275 make32bitdib_fast_bin(40) = $0F108911, $C10151B6, $100908E2, $0251B60F, $0910E2C1, $03C18310, $00000881, $43EBFF00 make32bitdib_fast_bin(48) = $0775D285, $C1831089, $0F38EB03, $AF0F29B6, $08FDC1EA, $B60F2889, $AF0F0169, $00E581EA make32bitdib_fast_bin(56) = $090000FF, $69B60F28, $EAAF0F02, $FF00E581, $E5C10000, $8B280908, $C11C246C, $C18318E2 make32bitdib_fast_bin(64) = $83100903, $754F04C0, $244C8B87, $24748B10, $9D048D14, $00000000, $28244401, $F503CD03 make32bitdib_fast_bin(72) = $18244CFF, $10244C89, $14247489, $FF4E850F, $5E5FFFFF, $5BC0335D, $C310C483, $000003B8 make32bitdib_fast_bin(80) = $C4835B00, $02B8C310, $5B000000, $C310C483, $000001B8, $10C48300, $000000C3 return #define make32bitdib(%1, %2, %3) \ prm@LayeredWindowModule = varptr(%1), varptr(%2), varptr(%3):\ mref value@LayeredWindowModule, 64:\ value@LayeredWindowModule = callfunc(prm@LayeredWindowModule, make32bitdib_ptr@LayeredWindowModule, 3) #define make32bitdib_fast(%1, %2, %3) \ prm@LayeredWindowModule = varptr(%1), varptr(%2), varptr(%3):\ mref value@LayeredWindowModule, 64:\ value@LayeredWindowModule = callfunc(prm@LayeredWindowModule, make32bitdib_fast_ptr@LayeredWindowModule, 3) #uselib "USER32.dll" #func ReleaseDC "ReleaseDC" sptr,sptr #cfunc GetDC "GetDC" sptr #func GetWindowLong "GetWindowLongA" int,int #func SetWindowLong "SetWindowLongA" int,int,int #func SetLayeredWindowAttributes "SetLayeredWindowAttributes" int,int,int,int #func UpdateLayeredWindow "UpdateLayeredWindow" int,int,int,int,int,int,int,int,int #define LWA_COLORKEY 0x00000001 #define LWA_ALPHA 0x00000002 #define WS_EX_LAYERED 0x00080000 #define ULW_COLORKEY 0x00000001 #define ULW_ALPHA 0x00000002 #define ULW_OPAQUE 0x00000004 #define AC_SRC_OVER 0x00000000 #define AC_SRC_ALPHA 0x00000001 #uselib "GDI32.dll" #cfunc CreateCompatibleDC "CreateCompatibleDC" sptr #cfunc CreateCompatibleBitmap "CreateCompatibleBitmap" sptr,sptr,sptr #func SelectObject "SelectObject" sptr,sptr #func DeleteObject "DeleteObject" sptr #func DeleteDC "DeleteDC" sptr #func StretchDIBits "StretchDIBits" sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr #define DIB_RGB_COLORS 0x0 #define SRCCOPY 0x00CC0020 #deffunc disableAlphaBlendWindow GetWindowLong hwnd, -20 if (stat & WS_EX_LAYERED){ SetWindowLong hwnd,-20,stat^WS_EX_LAYERED } return #deffunc _enableAlphaBlendWindowRGB int lwaAlpha, int type,local ColorBMSCR,local AlphaBMSCR,local hdc_,local hMemDC,local hBitmap GetWindowLong hwnd, -20 if((stat & WS_EX_LAYERED) == 0) { SetWindowLong hwnd,-20, stat | WS_EX_LAYERED } if((biWidth != ginfo_sx)||(biHeight != ginfo_sy)) { biWidth = ginfo_sx biHeight = ginfo_sy // BITMAPINFOHEADER構造体 dim BITMAPINFOHEADER, 10 BITMAPINFOHEADER(0) = 40 // biSize BITMAPINFOHEADER(1) = biWidth // biWidth BITMAPINFOHEADER(2) = biHeight // biHeight BITMAPINFOHEADER(3) = 1 | (32 << 16) // biPlanes & biBitCount BITMAPINFOHEADER(4) = BI_RGB // biCompression // BITMAPINFO構造体 dim BITMAPINFO, 2 BITMAPINFO(0) = varptr(BITMAPINFOHEADER) //メンバをもつ // 32bitDIBの準備 dim lpPixel, biWidth * biHeight // psize dim psize,2 psize(0) = ginfo(26) psize(1) = ginfo(27) // pptSrc dim pptSrc,2 pptSrc(0) = 0 pptSrc(1) = 0 // pblend sdim pblend, 4 poke pblend, 0, AC_SRC_OVER poke pblend, 1, 0 poke pblend, 2, 255 poke pblend, 3, AC_SRC_ALPHA } ;32bitDIBの準備 mref ColorBMSCR, 67 mref AlphaBMSCR, 96 + lwaAlpha if(type == 0) { make32bitdib lpPixel, ColorBMSCR, AlphaBMSCR } else { make32bitdib_fast lpPixel, ColorBMSCR, AlphaBMSCR } if(stat){ return } hdc_ = GetDC(hWnd) hMemDC = CreateCompatibleDC(hdc_) hBitmap = CreateCompatibleBitmap(hdc_, biWidth, biHeight) ReleaseDC hWnd,hdc_ SelectObject hMemDC,hBitmap StretchDIBits hMemDC, 0, 0, biWidth, biHeight, 0, 0, biWidth, biHeight, varptr(lpPixel), BITMAPINFO, DIB_RGB_COLORS, SRCCOPY UpdateLayeredWindow hwnd, hdc, 0, varptr(psize), hMemDC, varptr(pptSrc), 0, varptr(pblend), ULW_ALPHA DeleteObject hBitmap DeleteDC hMemDC return #define global enableAlphaBlendWindowRGB(%1) _enableAlphaBlendWindowRGB %1, 0 #define global enableAlphaBlendWindow(%1) _enableAlphaBlendWindowRGB %1, 1 #define global disableChromaKey disableAlphaBlendWindow #deffunc _enableChromaKey int lwkColor,double lwkAlpha GetWindowLong hwnd,-20 if((stat&WS_EX_LAYERED)=0){ SetWindowLong hwnd,-20,stat|WS_EX_LAYERED } if(lwkAlpha==0){ if(lwkColor==0xFFFFFFFF){ disableChromaKey }else{ SetLayeredWindowAttributes hwnd,lwkColor,0,LWA_COLORKEY } }else{ if(lwkColor==0xFFFFFFFF){ SetLayeredWindowAttributes hwnd,0,int(255.0*(100.0-lwkAlpha)/100),LWA_ALPHA }else{ SetLayeredWindowAttributes hwnd,lwkColor,int(255.0*(100.0-lwkAlpha)/100),LWA_COLORKEY|LWA_ALPHA } } return #define global enableChromaKey(%1=0xFFFFFFFF,%2=0) _enableChromaKey %1,limitf(%2,0,100) #global LayeredWindowModule_constructor #endif #uselib "user32.dll" #func SetTimer "SetTimer" int,int,int,sptr #func KillTimer "KillTimer" int,int #func MoveWindow "MoveWindow" int,int,int,int,int,int #define WM_TIMER 0x0113 #define timerID 100 #define WM_NCLBUTTONDOWN $000000A1 #define HTCAPTION 2 x = 600 y = 300 //メインウィンドウ(メイン) buffer 0,x,y gsel 0,2 color $FF,$00,$00 //赤色 boxf //白色の文字が入ったウィンドウ buffer 2,x,y color boxf color $FF,$FF,$FF lu_x = 0 ;左上x lu_y = 0;左上y rd_x = ginfo_winx;右下x rd_y = ginfo_winy ;右下y color 255,, repeat 5 lu_x++ lu_y++ rd_x-- rd_y-- line lu_x, lu_y, rd_x, lu_y line lu_x, lu_y, lu_x, rd_y line rd_x, lu_y, rd_x, rd_y line lu_x, rd_y, rd_x, rd_y loop R=255 R1=R //グラデーション用のウィンドウ buffer 3,600,300 lu_x = 0 ;左上x lu_y = 0;左上y rd_x = ginfo_winx;右下x rd_y = ginfo_winy ;右下y repeat 5 color R,255,255 lu_x++ lu_y++ rd_x-- rd_y-- line lu_x, lu_y, rd_x, lu_y line lu_x, lu_y, lu_x, rd_y line rd_x, lu_y, rd_x, rd_y line lu_x, rd_y, rd_x, rd_y r-15 loop buffer 4,x,y i+=30 //アルファブレンド用の画像を作成 gsel 4 redraw 0 gmode 0,x,y pos 0,0 gcopy 2 //さっき作った文字をコピー gmode 6,x,y,255 pos 0,0 gcopy 3 //グラデーション用ウィンドウを減算 redraw 1 //メインウィンドウ gsel 0 // 各RGBのブレンド率が入ったウィンドウIDを指定する // ウィンドウは同じ大きさのウィンドウを用意しておく enableAlphaBlendWindow 4 hw=hwnd bgscr 10,x-11,y-11 MoveWindow hw,ginfo_mx-omx-6,ginfo_my-omy-6,x+6,y+6 MoveWindow hwnd,ginfo_mx-omx,ginfo_my-omy,ginfo_winx,ginfo_winy lu_x = 0 ;左上x lu_y = 0;左上y rd_x = ginfo_winx-1;右下x rd_y = ginfo_winy-1 ;右下y color 200,0,0 line lu_x, lu_y, rd_x, lu_y line lu_x, lu_y, lu_x, rd_y line rd_x, lu_y, rd_x, rd_y line lu_x, rd_y, rd_x, rd_y repeat getkey click,1 if(clicko==0 && click==1){ omx=mousex omy=mousey } if(click==1){ MoveWindow hw,ginfo_mx-omx-6,ginfo_my-omy-6,x+6,y+6 MoveWindow hwnd,ginfo_mx-omx,ginfo_my-omy,ginfo_winx,ginfo_winy } clicko=click await loop stop



この記事に返信する


スペース

リンク

2015/9/13(Sun) 22:34:36|NO.71655

面白いプログラムですね。
ただ、ウィンドウの移動はginfo_actで自ウィンドウがアクティブか否かを判定してから、
移動処理に入ったほうが良いと思います。



b

リンク

2015/9/15(Tue) 21:49:30|NO.71712

モジュール化
手抜きですがやってることは簡単なので...

#ifndef LayeredWindowModule_destructor #module LayeredWindowModule ;┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ;┃ [ レイヤーウィンドウモジュール2 引用 ] ;┃ [ placeark ] ;┃ by natade ;┃ url http://www.placeark.com/ ;┃ ;┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #uselib "kernel32.dll" #func VirtualAllocLayeredWindowModule "VirtualAlloc" int, int, int, int #define NULL 0x00000000 #define PAGE_EXECUTE_READWRITE 0x00000040 #define MEM_COMMIT 0x00001000 #define MEM_RESERVE 0x00002000 #define MEM_DECOMMIT 0x00004000 #define MEM_RELEASE 0x00008000 #deffunc LayeredWindowModule_constructor VirtualAllocLayeredWindowModule NULL, 424, MEM_RESERVE, PAGE_EXECUTE_READWRITE VirtualAllocLayeredWindowModule stat, 424, MEM_COMMIT, PAGE_EXECUTE_READWRITE make32bitdib_ptr = stat dupptr make32bitdib_bin, stat, 424, vartype("int") make32bitdib_bin( 0) = $0824548B, $8320EC83, $840F003A, $0000018E, $2C244C8B, $0F003983, $00018184, $7A8B5700 make32bitdib_bin( 8) = $247C8904, $04793B18, $0166850F, $428B0000, $08413B08, $015A850F, $7A830000, $850F000C make32bitdib_bin( 16) = $00000146, $000C7983, $013C850F, $8B550000, $518B146A, $748D5614, $E683037F, $246C89FC make32bitdib_bin( 24) = $24548910, $24748928, $0FC08524, $0001108E, $5C8B5300, $C9333424, $1C244C89, $38245C89 make32bitdib_bin( 32) = $20244489, $FF85D98B, $00D78E0F, $748B0000, $C58B3824, $C22BCA03, $10244489, $18247C89 make32bitdib_bin( 40) = $0241B60F, $0151B60F, $0339B60F, $3DC703C2, $000002FD, $448B2675, $B60F1024, $16890814 make32bitdib_bin( 48) = $2B44B60F, $08E0C101, $0689C20B, $2B54B60F, $00CA8102, $C1FFFFFF, $62EB10E2, $0475C085 make32bitdib_bin( 56) = $5EEB0689, $027DFA3B, $B60FFA8B, $F83B0241, $F88B027D, $1024448B, $0814B60F, $0F01B60F make32bitdib_bin( 64) = $FAC1D0AF, $0F168908, $012B44B6, $0169B60F, $25C5AF0F, $0000FF00, $548BC20B, $06891424 make32bitdib_bin( 72) = $1354B60F, $69B60F02, $D5AF0F02, $14246C8B, $FF00E281, $E7C10000, $C1D70B10, $D00B08E2 make32bitdib_bin( 80) = $C6831689, $03C38304, $FF03C183, $0F18244C, $FFFF4B85, $247C8BFF, $24748B24, $24548B28 make32bitdib_bin( 88) = $244C8B2C, $BD048D1C, $00000000, $38244401, $4CFFCE03, $4C892024, $850F1C24, $FFFFFF04 make32bitdib_bin( 96) = $335D5E5B, $C4835FC0, $03B8C320, $5F000000, $C320C483, $000002B8, $C4835F00, $01B8C320 make32bitdib_bin(104) = $83000000, $00C320C4 VirtualAllocLayeredWindowModule NULL, 348, MEM_RESERVE, PAGE_EXECUTE_READWRITE VirtualAllocLayeredWindowModule stat, 348, MEM_COMMIT, PAGE_EXECUTE_READWRITE make32bitdib_fast_ptr = stat dupptr make32bitdib_fast_bin, stat, 348, vartype("int") make32bitdib_fast_bin( 0) = $08244C8B, $8310EC83, $840F0039, $00000140, $1C24548B, $0F003A83, $00013384, $598B5300 make32bitdib_fast_bin( 8) = $045A3B04, $011C850F, $418B0000, $08423B08, $0110850F, $79830000, $850F000C, $000000FC make32bitdib_fast_bin(16) = $000C7A83, $00F2850F, $498B0000, $14528B14, $5B6C8D55, $FCE58303, $14246C89, $8E0FC085 make32bitdib_fast_bin(24) = $000000D0, $24748B56, $24748920, $02728D24, $244C8957, $24748910, $24448914, $00498D18 make32bitdib_fast_bin(32) = $8E0FDB85, $00000081, $2824448B, $FF8BFB8B, $8316B60F, $FA8103C6, $000000FF, $B60F2275 make32bitdib_fast_bin(40) = $0F108911, $C10151B6, $100908E2, $0251B60F, $0910E2C1, $03C18310, $00000881, $43EBFF00 make32bitdib_fast_bin(48) = $0775D285, $C1831089, $0F38EB03, $AF0F29B6, $08FDC1EA, $B60F2889, $AF0F0169, $00E581EA make32bitdib_fast_bin(56) = $090000FF, $69B60F28, $EAAF0F02, $FF00E581, $E5C10000, $8B280908, $C11C246C, $C18318E2 make32bitdib_fast_bin(64) = $83100903, $754F04C0, $244C8B87, $24748B10, $9D048D14, $00000000, $28244401, $F503CD03 make32bitdib_fast_bin(72) = $18244CFF, $10244C89, $14247489, $FF4E850F, $5E5FFFFF, $5BC0335D, $C310C483, $000003B8 make32bitdib_fast_bin(80) = $C4835B00, $02B8C310, $5B000000, $C310C483, $000001B8, $10C48300, $000000C3 return #define make32bitdib(%1, %2, %3) \ prm@LayeredWindowModule = varptr(%1), varptr(%2), varptr(%3):\ mref value@LayeredWindowModule, 64:\ value@LayeredWindowModule = callfunc(prm@LayeredWindowModule, make32bitdib_ptr@LayeredWindowModule, 3) #define make32bitdib_fast(%1, %2, %3) \ prm@LayeredWindowModule = varptr(%1), varptr(%2), varptr(%3):\ mref value@LayeredWindowModule, 64:\ value@LayeredWindowModule = callfunc(prm@LayeredWindowModule, make32bitdib_fast_ptr@LayeredWindowModule, 3) #uselib "USER32.dll" #func ReleaseDC "ReleaseDC" sptr,sptr #cfunc GetDC "GetDC" sptr #func GetWindowLong "GetWindowLongA" int,int #func SetWindowLong "SetWindowLongA" int,int,int #func SetLayeredWindowAttributes "SetLayeredWindowAttributes" int,int,int,int #func UpdateLayeredWindow "UpdateLayeredWindow" int,int,int,int,int,int,int,int,int #define WS_EX_LAYERED 0x00080000 #define ULW_ALPHA 0x00000002 #define AC_SRC_ALPHA 0x00000001 #uselib "GDI32.dll" #cfunc CreateCompatibleDC "CreateCompatibleDC" sptr #cfunc CreateCompatibleBitmap "CreateCompatibleBitmap" sptr,sptr,sptr #func SelectObject "SelectObject" sptr,sptr #func DeleteObject "DeleteObject" sptr #func DeleteDC "DeleteDC" sptr #func StretchDIBits "StretchDIBits" sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr #define SRCCOPY 0x00CC0020 #deffunc disableAlphaBlendWindow GetWindowLong hwnd, -20 if (stat & WS_EX_LAYERED){ SetWindowLong hwnd,-20,stat^WS_EX_LAYERED } return #deffunc _enableAlphaBlendWindowRGB int lwaAlpha, int type,local ColorBMSCR,local AlphaBMSCR,local hdc_,local hMemDC,local hBitmap GetWindowLong hwnd, -20 if((stat & WS_EX_LAYERED) == 0) { SetWindowLong hwnd,-20, stat | WS_EX_LAYERED } if((biWidth != ginfo_sx)||(biHeight != ginfo_sy)) { biWidth = ginfo_sx biHeight = ginfo_sy dim BITMAPINFOHEADER, 10 BITMAPINFOHEADER(0) = 40 // biSize BITMAPINFOHEADER(1) = biWidth // biWidth BITMAPINFOHEADER(2) = biHeight // biHeight BITMAPINFOHEADER(3) = 1 | (32 << 16) // biPlanes & biBitCount BITMAPINFOHEADER(4) = BI_RGB // biCompression dim BITMAPINFO, 2 BITMAPINFO(0) = varptr(BITMAPINFOHEADER) //メンバをもつ dim lpPixel, biWidth * biHeight dim psize,2 psize(0) = ginfo(26) psize(1) = ginfo(27) dim pptSrc,2 pptSrc(0) = 0 pptSrc(1) = 0 sdim pblend, 4 poke pblend, 0, AC_SRC_OVER poke pblend, 1, 0 poke pblend, 2, 255 poke pblend, 3, AC_SRC_ALPHA } mref ColorBMSCR, 67 mref AlphaBMSCR, 96 + lwaAlpha if(type == 0) { make32bitdib lpPixel, ColorBMSCR, AlphaBMSCR } else { make32bitdib_fast lpPixel, ColorBMSCR, AlphaBMSCR } if(stat){ return } hdc_ = GetDC(hWnd) hMemDC = CreateCompatibleDC(hdc_) hBitmap = CreateCompatibleBitmap(hdc_, biWidth, biHeight) ReleaseDC hWnd,hdc_ SelectObject hMemDC,hBitmap StretchDIBits hMemDC, 0, 0, biWidth, biHeight, 0, 0, biWidth, biHeight, varptr(lpPixel), BITMAPINFO, DIB_RGB_COLORS, SRCCOPY UpdateLayeredWindow hwnd, hdc, 0, varptr(psize), hMemDC, varptr(pptSrc), 0, varptr(pblend), ULW_ALPHA DeleteObject hBitmap DeleteDC hMemDC return #define global enableAlphaBlendWindow(%1) _enableAlphaBlendWindowRGB %1, 1 #global LayeredWindowModule_constructor #endif //┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━ //┃ [ウインドウ影光 表示モジュール] //┃ by B(NEPI) //┃ 前提Module:natedeさん作成 「レイヤーウィンドウモジュール2」 //┃ //┃ 標準命令: //┃ SetWindowGlow (背景の色R,背景の色G,背景の色B) //┃  この時のcolor設定値がウインドウの光影になります。 //┃  この命令使用時のgsel選択されているウインドウに適用されます。 //┃ 要注意!!:適用されるWindowID(gsel選択されているウインドウ)より+1,+2されたIDも使用されます。 //┃ 要注意!!2:適用されるWindowID+1の値が0以上の場合 ""screen"" で一度初期化ないと見た目消えたようになります。 //┃ 詳細命令: //┃ _SetWindowGlow 描画されるWindowID,描画元WindowID,一時WindowID,ウインドウの大きさX, ウインドウの大きさY, 周りの色R, 周りの色G ,周りの色B,背景の色R,背景の色G,背景の色B //┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #module GlowWindowModule #define global InitGlowWindow(%1,%2,%3,%4,%5) _InitGlowWindow %1,ginfo_r,ginfo_g,ginfo_b,%2,%3,%4,ginfo_winx,ginfo_winy,%5 #deffunc _InitGlowWindow int DrawID,int RR,int GG,int BB,int R, int G ,int B,int x1,int y1,int MainID x=x1 y=y1 buffer MainID,x,y buffer DrawID,x,y gsel DrawID,2 color R,G,B boxf color rr,gg,bb boxf 7,7,x-7,y-7 return #deffunc SetWindowGlow int DrawWindow,int MainWindow,int TempWindow RA=255 buffer TempWindow,x,y lu_x = 0 ;左上x lu_y = 0;左上y rd_x = x;右下x rd_y = y ;右下y repeat 6 color RA,255,255 lu_x++ lu_y++ rd_x-- rd_y-- line lu_x-1, lu_y, rd_x, lu_y line lu_x, lu_y, lu_x, rd_y line rd_x, lu_y, rd_x, rd_y line lu_x, rd_y, rd_x, rd_y color boxf 7,7,x-7,y-7 RA-15 loop line lu_x-1, lu_y, rd_x, lu_y line lu_x, lu_y, lu_x, rd_y line rd_x, lu_y, rd_x, rd_y line lu_x, rd_y, rd_x, rd_y buffer MainWindow,x,y gsel MainWindow redraw 0 gmode 6,x,y,255 pos 0,0 gcopy TempWindow redraw 1 gsel DrawWindow enableAlphaBlendWindow MainWindow return #global /*--------------ここまでモジュール---------------------*/ /*--------------ここからメイン---------------------*/ color 0,0,0 // colorで設定した色が背景色になる。 //InitGlowWindow 作業用BufferID,フチ色R,フチ色G,フチ色B,適用BufferID InitGlowWindow 0,75,0,130,2 //指定した作業用BufferIDの中に描画します。 color 255,255,255 pos 100,100 mes "フチが光ります。" // //SetWindowGlow InitGlowWindowで指定した作業用ID,指定した適用ID,一時BufferID SetWindowGlow 0,2,1



ブランク

リンク

2015/9/15(Tue) 22:23:15|NO.71714

すごい!
けどメニューあるウィンドウには使えないっぽい?



ポチ

リンク

2015/9/16(Wed) 08:07:55|NO.71726

本当にすごい!!モジュール化楽しみにしています!
早速、自作のソフトに使わせて頂きたいと思います。
なたで様は本当に良い、痒い所に手が届く様なモジュールを作ってくれるのですね。
心から感謝しています。これからも楽しみにしています。

因みに、フチを7色に光らせてみたいのですが・・・重くなってしまうでしょうか?
PCのスペックに応じて使えるようにしたいと思っています。



b

リンク

2015/9/16(Wed) 16:48:59|NO.71733

フチを七色・・・


/*--------------モジュールはコピペしてください。---------------------*/ /*--------------メイン---------------------*/ color 0,0,0 InitGlowWindow 0,75,0,130,2 SetWindowGlow 0,2,1 repeat gsel 0 hsvcolor h,255,255 boxf boxf color 0,0,0 boxf 7,7,ginfo_winx-7,ginfo_winy-7 gsel 2 redraw 0 gmode 6,x,y,255 pos 0,0 gcopy 1 redraw 1 gsel 0 enableAlphaBlendWindow 2 wait 1 if(h<255){ h++ }else{ h=0 } loop



ポチ

リンク

2015/9/17(Thu) 12:57:30|NO.71760

あ、あ、ありがとうございます!!
美しいですね・・・感激です。
わたしもWindowsAPIを勉強中ですが・・・まだまだ、気が遠くなりそうです。
なたで様のモジュールは_huematrix_(色変換モジュール)、module_lwm.hsp
(レ イヤードウィンドウ総合モジュール)、
コア別にCPU使用率を取得する、2次元メタボー ルを描写する等々・・・
使わせて頂いております。
しょぼいソフトなのにこんな高度なモジュールを使わせて頂いて申し訳ありませんが、
頑張ります!!

ところで、PNGファイルをそのまま表示する(フチナシのレイヤードウインドウで)
方法なんですが、色々調べて自分のソフトに使える様に編集したものですが・・・



//レイヤードウィンドウモジュール Ver.1.01 //Created by Akicansoft //HP:http://d.hatena.ne.jp/As_hsp/ #module #uselib "gdi32.dll" #cfunc CreateDIBSection "CreateDIBSection" sptr,sptr,sptr,sptr,sptr,sptr #cfunc GetPixel "GetPixel" sptr,sptr,sptr #define BI_RGB $00000000 #define DIB_RGB_COLORS $00000000 //lbgscr用の_flagが0の場合,画像があるHSPウィンドウID _flagが1の場合,32bitビットマップオブジェクトハンドルを作成 //_hspwinid 画像があるHSPウィンドウID //_width 画像の横の長さ //_height 画像の縦の長さ //_posx 画像の左上位置X //_posy 画像の左上位置Y //戻り値:32bitビットマップオブジェクト #defcfunc lbgscr_CreateImage int _hspwinid, int _width, int _height, int _posx, int _posy, local bmi, local hbmp, local lpBits, local imagesize, local bmpdata, local lgsel, local cx, local cy //DIBのサイズ imagesize = _width*_height*4 //ビットマップオブジェクトの作成 dim bmi, 124/4 bmi(0)=40 bmi(1)=_width bmi(2)=_height bmi(3)=1|(32<<16) bmi(4)=BI_RGB bmi(5)=imagesize hbmp = CreateDIBSection(0, varptr(bmi), DIB_RGB_COLORS, varptr(lpBits), 0, 0) dupptr bmpdata, lpBits, imagesize, 4 //ビットマップに描画 lgsel = ginfo_sel gsel _hspwinid cx = 0 cy = _height-1 repeat imagesize/4 l2 = GetPixel(hdc, _posx+cx, _posy+cy) //色データ l3 = GetPixel(hdc, _posx+_width+cx, _posy+cy) //アルファブレンドデータ(赤しか見てないけど) //画像から色取得 if cx == _width-1{ cx = 0 cy-- } else { cx++ } //アルファブレンドDIBへ書き込み lpoke bmpdata, cnt*4, (peek(l2, 0) << 16) | (peek(l2, 1) << 8) | (peek(l2, 2)<< 0) | (peek(l3, 0) << 24) //RGBAの順 loop gsel lgsel //元に戻す return hbmp #global #module #uselib "gdi32.dll" #func DeleteObject "DeleteObject" sptr //ビットマップオブジェクトを削除 #deffunc lbgscr_DeleteImage int _hbmp DeleteObject _hbmp return #global #module #define GWL_EXSTYLE $FFFFFFEC #define WS_EX_LAYERED $00080000 #define AC_SRC_OVER $00000000 #define AC_SRC_ALPHA $00000001 #define ULW_ALPHA $00000002 #define SRCCOPY $00CC0020 #define x 0 #define y 1 #uselib "user32.dll" #func GetWindowLong "GetWindowLongA" sptr,sptr #func SetWindowLong "SetWindowLongA" sptr,sptr,sptr #func UpdateLayeredWindow "UpdateLayeredWindow" sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr #cfunc GetDC "GetDC" sptr #func ReleaseDC "ReleaseDC" sptr,sptr #uselib "gdi32.dll" #cfunc CreateCompatibleDC "CreateCompatibleDC" sptr #func DeleteDC "DeleteDC" sptr #func SelectObject "SelectObject" sptr,sptr //レイヤードウィンドウの更新 //_hspwinid レイヤードウィンドウにするためのHSPウィンドウID //_width ウィンドウの横の長さ //_height ウィンドウの縦の長さ //_inum _flagが0の場合,画像があるHSPウィンドウID _flagが1の場合,32bitビットマップオブジェクトハンドル //_iposx 画像の左上位置X //_iposy 画像の左上位置Y //_flag _inumの動作を変更するためのフラグ #define global lbgscr_Update(%1, %2, %3, %4, %5, %6, %7=0) lbgscr %1, %2, %3, -1, 0, 0, %4, %5, %6, %7 //レイヤードウィンドウの作成 //_hspwinid レイヤードウィンドウにするためのHSPウィンドウID //_width ウィンドウの横の長さ //_height ウィンドウの縦の長さ //_type ウィンドウタイプ (ウィンドウタイプが -1 の場合ウィンドウを更新するだけになる。_posx,_posyは無効) //_posx ウィンドウの左上からの表示位置X //_posy ウィンドウの左上からの表示位置Y //_inum _flagが0の場合,画像があるHSPウィンドウID _flagが1の場合,32bitビットマップオブジェクトハンドル //_iposx 画像の左上位置X //_iposy 画像の左上位置Y //_flag _inumの動作を変更するためのフラグ #deffunc lbgscr int _hspwinid, int _width, int _height, int _type, int _posx, int _posy, int _inum, int _iposx, int _iposy, int _flag, local hbmp, local hdc_, local size, local pptSrc, local pblend, local hMemDC //0以上指定 if _type > -1 { //ウィンドウを作成 bgscr _hspwinid, _width, _height, 6, _posx, _posy } else { gsel _hspwinid } //レイヤードウィンドウにする GetWindowLong hwnd, GWL_EXSTYLE SetWindowLong hwnd, GWL_EXSTYLE, stat|WS_EX_LAYERED //ビットマップオブジェクトを作成するか既存のビットマップオブジェクトを使用するかどうかのフラグ if _flag == 0 { hbmp = lbgscr_CreateImage(_inum, _width, _height, _iposx, _iposy) } else { hbmp = _inum //既存の32bitビットマップオブジェクトを指定 } //DCにBMPを適用 hdc_ = GetDC(hWnd) hMemDC = CreateCompatibleDC(hdc_) SelectObject hMemDC, hbmp //ウィンドウに適用 //ウィンドウサイズ size(x) = _width size(y) = _height //デバイスコンテキストにおけるレイヤの位置 pptSrc(x) = 0 pptSrc(y) = 0 //レイヤードウィンドウを構成するときに使う透明度の値 sdim pblend,4 poke pblend,0,AC_SRC_OVER poke pblend,1,0 poke pblend,2,255 poke pblend,3,AC_SRC_ALPHA //レイヤードウィンドウにする UpdateLayeredWindow hwnd, hdc, 0, varptr(size), hMemDC, varptr(pptSrc), 0, varptr(pblend), ULW_ALPHA //削除 ReleaseDC hWnd,hdc_ if _flag == 0 : lbgscr_DeleteImage hbmp //既存ビットマップオブジェクトを使用していた場合削除しない DeleteDC hMemDC //アクティブ判定 if (_type!=2)&(_type!=3)&(_type!=6)&(_type!=10)&(_type!=18)&(_type!=-1){ gsel _hspwinid, 1 } return 0 #global //-------------------------------------------------------------------- //サンプルソース(#if 1 で実行) #if 1 #module ;-------------------------------- ; dragwindow x,y,x2,y2 ; x = ドラッグウィンドウの範囲 x ; y = ドラッグウィンドウの範囲 y ; x2 = ドラッグウィンドウの範囲 x2 ; y2 = ドラッグウィンドウの範囲 y2 ;-------------------------------- #deffunc dragwindow int p1,int p2,int p3,int p4 if (p1<mousex)&(p2<mousey)&(p3>mousex)&(p4>mousey){ repeat:if mb=0{mb=1:aa=ginfo(0)-ginfo(4):bb=ginfo(1)-ginfo(5)} width ,,ginfo(0)-aa,ginfo(1)-bb:getkey key,1:wait 1:if key=0{break}loop:mb=0}return #global xxx=100 yyy=100 Bgscr 2, 2*xxx, yyy, 6, 0, 0 onexit *e pos 5, 5 mes "左クリック:移動\n右クリック:終了" gsel 2, 2 //画像 bgscr 1, ginfo_dispx, ginfo_dispy,2 dialog "bmp;*.png;*.jpg;*.gif",16,"" picload ""+refstr xxx=int (0.5*ginfo(10)) yyy=ginfo(11) if ginfo(10)<=ginfo(11){ xxx=ginfo(10) width 2*xxx,yyy pos 0,0 picload ""+refstr,1 pos xxx,0 picload ""+refstr,1 bmpsave "aichan.bmp" } //レイヤードウィンドウ用画像の作成 repeat 4 hbmp(cnt) = lbgscr_CreateImage(1, xxx,yyy, 0, yyy*cnt) loop //レイヤードウィンドウの作成(これ単体でレイヤードウィンドウ用画像の作成も含む) lbgscr 0, xxx, yyy, 6, ginfo_dispx-xxx>>1, ginfo_dispy-yyy>>1, 1, 0, 0 //lbgscr 0, 150, 150, 6, ginfo_dispx-150>>1, ginfo_dispy-150>>1, hbmp(0), 0, 0, 1 //↑こうやってもOK! gsel 0,2 onclick gosub *click repeat //レイヤードウィンドウの更新(予め作成したレイヤードウィンドウ用の画像を使用する (_flag = 1)) lbgscr_Update 0, xxx, yyy, hbmp(count), 0, 0, 1 count++ if count == 1 : count = 0 wait 1 loop stop *m if iparam = 1 : goto *e dragwindow 0, 0, xxx, yyy return *e repeat 1 lbgscr_DeleteImage hbmp(cnt) //ビットマップオブジェクトの削除 loop end #endif *click mousebutton=wparam switch mousebutton case 2 gosub *RBUTTONDOWN swbreak case 1 gosub *LBUTTONDOWN swbreak swend return *RBUTTONDOWN; end return *LBUTTONDOWN; gsel 0 sendmsg hwnd,$00A1,2,0 return

画像は黒の背景で画像の2倍の幅で、元のPNG画像を並べたもので、
左の画像はそのままPNG画像を貼り付けて、
右の画像にはPNG画像を反転してグレースケールにしたものを貼り付けた画像を読み込ませれば
半透明なPNG画像を表示出来ます。
出来れば、もうちょっとシンプルに出来ないものでしょうか?
お手隙の時にでも御一考頂ければ幸いです。



b

リンク

2015/9/17(Thu) 21:44:29|NO.71771

普通のウインドウと同じようにつかるようにしました。


#ifndef LayeredWindowModule_destructor #module LayeredWindowModule ;┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ;┃ [ レイヤーウィンドウモジュール2 引用 ] ;┃ [ placeark ] ;┃ by natade ;┃ url http://www.placeark.com/ ;┃ ;┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #uselib "kernel32.dll" #func VirtualAllocLayeredWindowModule "VirtualAlloc" int, int, int, int #define NULL 0x00000000 #define PAGE_EXECUTE_READWRITE 0x00000040 #define MEM_COMMIT 0x00001000 #define MEM_RESERVE 0x00002000 #define MEM_DECOMMIT 0x00004000 #define MEM_RELEASE 0x00008000 #deffunc LayeredWindowModule_constructor VirtualAllocLayeredWindowModule NULL, 424, MEM_RESERVE, PAGE_EXECUTE_READWRITE VirtualAllocLayeredWindowModule stat, 424, MEM_COMMIT, PAGE_EXECUTE_READWRITE make32bitdib_ptr = stat dupptr make32bitdib_bin, stat, 424, vartype("int") make32bitdib_bin( 0) = $0824548B, $8320EC83, $840F003A, $0000018E, $2C244C8B, $0F003983, $00018184, $7A8B5700 make32bitdib_bin( 8) = $247C8904, $04793B18, $0166850F, $428B0000, $08413B08, $015A850F, $7A830000, $850F000C make32bitdib_bin( 16) = $00000146, $000C7983, $013C850F, $8B550000, $518B146A, $748D5614, $E683037F, $246C89FC make32bitdib_bin( 24) = $24548910, $24748928, $0FC08524, $0001108E, $5C8B5300, $C9333424, $1C244C89, $38245C89 make32bitdib_bin( 32) = $20244489, $FF85D98B, $00D78E0F, $748B0000, $C58B3824, $C22BCA03, $10244489, $18247C89 make32bitdib_bin( 40) = $0241B60F, $0151B60F, $0339B60F, $3DC703C2, $000002FD, $448B2675, $B60F1024, $16890814 make32bitdib_bin( 48) = $2B44B60F, $08E0C101, $0689C20B, $2B54B60F, $00CA8102, $C1FFFFFF, $62EB10E2, $0475C085 make32bitdib_bin( 56) = $5EEB0689, $027DFA3B, $B60FFA8B, $F83B0241, $F88B027D, $1024448B, $0814B60F, $0F01B60F make32bitdib_bin( 64) = $FAC1D0AF, $0F168908, $012B44B6, $0169B60F, $25C5AF0F, $0000FF00, $548BC20B, $06891424 make32bitdib_bin( 72) = $1354B60F, $69B60F02, $D5AF0F02, $14246C8B, $FF00E281, $E7C10000, $C1D70B10, $D00B08E2 make32bitdib_bin( 80) = $C6831689, $03C38304, $FF03C183, $0F18244C, $FFFF4B85, $247C8BFF, $24748B24, $24548B28 make32bitdib_bin( 88) = $244C8B2C, $BD048D1C, $00000000, $38244401, $4CFFCE03, $4C892024, $850F1C24, $FFFFFF04 make32bitdib_bin( 96) = $335D5E5B, $C4835FC0, $03B8C320, $5F000000, $C320C483, $000002B8, $C4835F00, $01B8C320 make32bitdib_bin(104) = $83000000, $00C320C4 VirtualAllocLayeredWindowModule NULL, 348, MEM_RESERVE, PAGE_EXECUTE_READWRITE VirtualAllocLayeredWindowModule stat, 348, MEM_COMMIT, PAGE_EXECUTE_READWRITE make32bitdib_fast_ptr = stat dupptr make32bitdib_fast_bin, stat, 348, vartype("int") make32bitdib_fast_bin( 0) = $08244C8B, $8310EC83, $840F0039, $00000140, $1C24548B, $0F003A83, $00013384, $598B5300 make32bitdib_fast_bin( 8) = $045A3B04, $011C850F, $418B0000, $08423B08, $0110850F, $79830000, $850F000C, $000000FC make32bitdib_fast_bin(16) = $000C7A83, $00F2850F, $498B0000, $14528B14, $5B6C8D55, $FCE58303, $14246C89, $8E0FC085 make32bitdib_fast_bin(24) = $000000D0, $24748B56, $24748920, $02728D24, $244C8957, $24748910, $24448914, $00498D18 make32bitdib_fast_bin(32) = $8E0FDB85, $00000081, $2824448B, $FF8BFB8B, $8316B60F, $FA8103C6, $000000FF, $B60F2275 make32bitdib_fast_bin(40) = $0F108911, $C10151B6, $100908E2, $0251B60F, $0910E2C1, $03C18310, $00000881, $43EBFF00 make32bitdib_fast_bin(48) = $0775D285, $C1831089, $0F38EB03, $AF0F29B6, $08FDC1EA, $B60F2889, $AF0F0169, $00E581EA make32bitdib_fast_bin(56) = $090000FF, $69B60F28, $EAAF0F02, $FF00E581, $E5C10000, $8B280908, $C11C246C, $C18318E2 make32bitdib_fast_bin(64) = $83100903, $754F04C0, $244C8B87, $24748B10, $9D048D14, $00000000, $28244401, $F503CD03 make32bitdib_fast_bin(72) = $18244CFF, $10244C89, $14247489, $FF4E850F, $5E5FFFFF, $5BC0335D, $C310C483, $000003B8 make32bitdib_fast_bin(80) = $C4835B00, $02B8C310, $5B000000, $C310C483, $000001B8, $10C48300, $000000C3 return #define make32bitdib(%1, %2, %3) \ prm@LayeredWindowModule = varptr(%1), varptr(%2), varptr(%3):\ mref value@LayeredWindowModule, 64:\ value@LayeredWindowModule = callfunc(prm@LayeredWindowModule, make32bitdib_ptr@LayeredWindowModule, 3) #define make32bitdib_fast(%1, %2, %3) \ prm@LayeredWindowModule = varptr(%1), varptr(%2), varptr(%3):\ mref value@LayeredWindowModule, 64:\ value@LayeredWindowModule = callfunc(prm@LayeredWindowModule, make32bitdib_fast_ptr@LayeredWindowModule, 3) #uselib "USER32.dll" #func ReleaseDC "ReleaseDC" sptr,sptr #cfunc GetDC "GetDC" sptr #func GetWindowLong "GetWindowLongA" int,int #func SetWindowLong "SetWindowLongA" int,int,int #func SetLayeredWindowAttributes "SetLayeredWindowAttributes" int,int,int,int #func UpdateLayeredWindow "UpdateLayeredWindow" int,int,int,int,int,int,int,int,int #define WS_EX_LAYERED 0x00080000 #define ULW_ALPHA 0x00000002 #define AC_SRC_ALPHA 0x00000001 #const WS_EX_TRANSPARENT $00000020 #uselib "GDI32.dll" #cfunc CreateCompatibleDC "CreateCompatibleDC" sptr #cfunc CreateCompatibleBitmap "CreateCompatibleBitmap" sptr,sptr,sptr #func SelectObject "SelectObject" sptr,sptr #func DeleteObject "DeleteObject" sptr #func DeleteDC "DeleteDC" sptr #func StretchDIBits "StretchDIBits" sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr #define SRCCOPY 0x00CC0020 #deffunc disableAlphaBlendWindow GetWindowLong hwnd, -20 if (stat & WS_EX_LAYERED){ SetWindowLong hwnd,-20,stat^WS_EX_LAYERED } return #deffunc _enableAlphaBlendWindowRGB int lwaAlpha, int type,local ColorBMSCR,local AlphaBMSCR,local hdc_,local hMemDC,local hBitmap GetWindowLong hwnd, -20 if((stat & WS_EX_LAYERED & WS_EX_TRANSPARENT) == 0) { SetWindowLong hwnd,-20, stat | WS_EX_LAYERED | WS_EX_TRANSPARENT } if((biWidth != ginfo_sx)||(biHeight != ginfo_sy)) { biWidth = ginfo_sx biHeight = ginfo_sy dim BITMAPINFOHEADER, 10 BITMAPINFOHEADER(0) = 40 // biSize BITMAPINFOHEADER(1) = biWidth // biWidth BITMAPINFOHEADER(2) = biHeight // biHeight BITMAPINFOHEADER(3) = 1 | (32 << 16) // biPlanes & biBitCount BITMAPINFOHEADER(4) = BI_RGB // biCompression dim BITMAPINFO, 2 BITMAPINFO(0) = varptr(BITMAPINFOHEADER) //メンバをもつ dim lpPixel, biWidth * biHeight dim psize,2 psize(0) = ginfo(26) psize(1) = ginfo(27) dim pptSrc,2 pptSrc(0) = 0 pptSrc(1) = 0 sdim pblend, 4 poke pblend, 0, AC_SRC_OVER poke pblend, 1, 0 poke pblend, 2, 255 poke pblend, 3, AC_SRC_ALPHA } mref ColorBMSCR, 67 mref AlphaBMSCR, 96 + lwaAlpha if(type == 0) { make32bitdib lpPixel, ColorBMSCR, AlphaBMSCR } else { make32bitdib_fast lpPixel, ColorBMSCR, AlphaBMSCR } if(stat){ return } hdc_ = GetDC(hWnd) hMemDC = CreateCompatibleDC(hdc_) hBitmap = CreateCompatibleBitmap(hdc_, biWidth, biHeight) ReleaseDC hWnd,hdc_ SelectObject hMemDC,hBitmap StretchDIBits hMemDC, 0, 0, biWidth, biHeight, 0, 0, biWidth, biHeight, varptr(lpPixel), BITMAPINFO, DIB_RGB_COLORS, SRCCOPY UpdateLayeredWindow hwnd, hdc, 0, varptr(psize), hMemDC, varptr(pptSrc), 0, varptr(pblend), ULW_ALPHA DeleteObject hBitmap DeleteDC hMemDC return #define global enableAlphaBlendWindow(%1) _enableAlphaBlendWindowRGB %1, 1 #global LayeredWindowModule_constructor #endif //┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━ //┃ [ウインドウ影光 表示モジュール] //┃ by B(NEPI) //┃ 前提Module:natedeさん作成 「レイヤーウィンドウモジュール2」 //┃ //┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #module GlowWindowModule #uselib "user32.dll" #func MoveWindow "MoveWindow" int,int,int,int,int,int #deffunc SetWindowGlow int DrawWindow,int MainWindow,int TempWindow,int ScreenWindow,int x1,int y1,int RR,int GG,int BB x=x1 y=y1 buffer DrawID,x,y gsel DrawID,2 color rr,gg,bb boxf RA=255 buffer TempWindow,x,y lu_x = 0 ;左上x lu_y = 0;左上y rd_x = x;右下x rd_y = y ;右下y repeat 6 color RA,255,255 lu_x++ lu_y++ rd_x-- rd_y-- line lu_x-1, lu_y, rd_x, lu_y line lu_x, lu_y, lu_x, rd_y line rd_x, lu_y, rd_x, rd_y line lu_x, rd_y, rd_x, rd_y RA-15 loop color 73,0,130 line lu_x-1, lu_y, rd_x, lu_y line lu_x, lu_y, lu_x, rd_y line rd_x, lu_y, rd_x, rd_y line lu_x, rd_y, rd_x, rd_y buffer MainWindow,x,y gsel MainWindow redraw 0 gmode 6,x,y,255 pos 0,0 gcopy TempWindow redraw 1 gsel DrawWindow enableAlphaBlendWindow MainWindow mhw=hwnd gsel ScreenWindow,1 MoveWindow hwnd,wpeek(lprm,0),wpeek(lprm,2),x-13,y-20,1 gosub *WM_MOVE oncmd gosub *WM_MOVE ,0x0003 gsel ScreenWindow,2 hw=hwnd return *WM_MOVE lprm=lParam MoveWindow mhw,wpeek(lprm,0)-7,wpeek(lprm,2)-7,x,y,1 return #global /*--------------ここまでモジュール---------------------*/ /*--------------以下サンプル---------------------*/ #define WM_NCLBUTTONDOWN $000000A1 #define HTCAPTION 2 bgscr 3 //SetWindowGlow 仮Buffer、仮Buffer,仮Buffer,メインScreen,R,G,b SetWindowGlow 0,2,1,3,600,500,75,0,130 gsel 3 color 0,0,0 boxf pos 100,200 color 255,255,255 mes "普通のウインドウと同じように使える" button gosub "RED",*RED button gosub "Purple",*Purple button gosub "Orange",*Orange button gosub "ColorPick",*Cp button gosub "HSV",*HSV pos 0,0 color 255,255,255 mes "光ります。 Ver2" onclick gosub *OClick stop *RED SetWindowGlow 0,2,1,3,600,500,255,0,55 return *Purple SetWindowGlow 0,2,1,3,600,500,75,0,130 return *Orange SetWindowGlow 0,2,1,3,600,500,250,122,0 return *CP dialog "",33 SetWindowGlow 0,2,1,3,600,500,ginfo_R,ginfo_G,Ginfo_B return *HSV repeat hsvcolor h,255,255 SetWindowGlow 0,2,1,3,600,500,ginfo_R,ginfo_G,Ginfo_B h++ if(h==255){ h=0 } await 100 loop return *OClick if(wparam == 1 && mousex >=0 && mousex <=ginfo_winx && mousey >= 0 && mousey <=ginfo_winy/7){ //右クリ&& タイトルバー sendmsg hwnd,WM_NCLBUTTONDOWN,HTCAPTION,0 //ウインドウ移動 } return



ポチ

リンク

2015/9/18(Fri) 08:21:54|NO.71775

いいですね。素敵です。
ありがとうございます!!



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