2007/01/25(木)コントロール背景透過モジューる

はてブ数 2007/01/25 00:22 プログラミング::HSP3つーさ

元ネタ

チェックボックスの背景を透過させるには
http://smile.poosan.net/perl-bin/hsp/ver3/hsp3.cgi?print+200610/06110031.txt

//////// コントロール背景透過モジューる 0.01α / 月影とも
#module
#uselib "gdi32.dll"
  #cfunc CreatePatternBrush "CreatePatternBrush" int
  #func DeleteObject "DeleteObject"
  #func SetBkMode "SetBkMode" int,int 
  #func SetBrushOrgEx "SetBrushOrgEx" int,int,int,int
#uselib "user32.dll"
  #func GetWindowRect "GetWindowRect" int,int
  #func MapWindowPoints "MapWindowPoints" int,int,int,int

#deffunc UpdateBackgroundBrush
    if ginfo_sel >= length(hBrush) : hBrush.ginfo_sel = 0
    if hBrush.ginfo_sel : DeleteObject hBrush.ginfo_sel
    mref bmscr,67 : hBrush.ginfo_sel = CreatePatternBrush(bmscr.7)
    oncmd gosub *OnCtlColor, 0x138 //WM_CTLCOLORSTATIC
    return

 *OnCtlColor
    oldSel = ginfo_sel : gsel ginfo_intid : dim rect,4
    SetBkMode wParam, 1 // TRANSPARENT
    GetWindowRect lParam, varptr(rect)
    MapWindowPoints 0, hWnd, varptr(rect), 2
    SetBrushOrgEx wParam, -rect.0, -rect.1, 0
    gsel oldSel : return hBrush.ginfo_intid

#global //// モジュここまで

picload dir_exe + "/sample/demo/sky_bg.jpg"

// 描画先ウィンドウの背景ブラシを更新する。
// 子コントロールに重なる部分の背景を書き換えたら呼ぶこと。
UpdateBackgroundBrush

objsize 200,100 : pos 20,20
chkbox "チェックボックス", chk

//// サンプルここまで