画像を張り付けたいボタンのハンドルを変数に入れて覚えておきます。
hw_btn1=objinfo_hwnd(stat)
オブジェクトが描画されたりするときに*NOTIFYラベルに飛ぶので、
NMHDR.0が張り付けたいボタンのハンドルだったときにBitBltを使って指定した画像を貼り付けます。
BitBltは
BitBlt コピー先デバイスコンテキスト, コピー先x座標, コピー先y座標, 幅, 高さ, コピー元デバイスコンテキスト, コピー元x座標, コピー元x座標, ラスタオペレーションコード
となってます。
詳しくは
http://yokohama.cool.ne.jp/chokuto/urawaza/api/BitBlt.html
で調べてください。
#uselib "GDI32"
#func BitBlt "BitBlt" int,int,int,int,int,int,int,int,int
#define WM_NOTIFY 0x004E
#define NM_CUSTOMDRAW -12
#define CDDS_PREPAINT 0x0001
#define CDIS_SELECTED 0x0001
#define SRCCOPY 0xCC0020 //そのまま転送
#define SRCAND 0x8800C6 //転送先の画像とAND演算して転送
#define SRCPAINT 0xEE0086 //転送先の画像とOR演算して転送
screen 1, 33*3 +75, 33 +13
hdc1=hdc
;ボタンに張り付ける画像を作る
syscolor 15 :boxf 0,0,32,32
syscolor 18 :circle 4,4,29,29
syscolor 15 :circle 7,7,26,26 :boxf 13,0,19,10
syscolor 18 :boxf 15,2,17,13
;2つ目
color 0,255,0 :circle 4+33,4,29+33,29
color 255,255,255 :circle 7+33,7,26+33,26 :boxf 13+33,0,19+33,10
color 0,255,0 :boxf 15+33,2,17+33,13
;3つ目
color 255,0,0 :boxf 2+33*2,4,22+33*2,22 :boxf 12+33*2,14,28+33*2,30
font "MSP ゴシック",10
pos 1,33 :color :mes "用意した画像はこんな感じになってます"
gsel 0
objsize 40,40
;ボタン1
pos 10,10
button "",*btn
hw_btn1=objinfo_hwnd(stat) ;ボタンのハンドルを保存
;ボタン2
pos 60,10
button "",*btn
hw_btn2=objinfo_hwnd(stat)
;ボタン3
pos 110,10
button "",*btn
hw_btn3=objinfo_hwnd(stat)
oncmd gosub *NOTIFY, WM_NOTIFY
stop
*btn
end
*NOTIFY
;NMHDR構造体
dim NMHDR,3
dupptr NMHDR,lparam,4*3
if NMHDR.2 = NM_CUSTOMDRAW {
;NMCUSTOMDRAW構造体
dim NMCUSTOMDRAW,12
dupptr NMCUSTOMDRAW,lparam,4*12
;コントロールが描画される
if NMCUSTOMDRAW.3 = CDDS_PREPAINT {
if NMCUSTOMDRAW.10 && CDIS_SELECTED :push=1 :else :push=0 ;クリック状態
;各ボタンのハンドルごとに画像を張り付けるよう場合分け
switch NMHDR.0
;ボタン1
case hw_btn1
;ボタンに画像をコピー
BitBlt NMCUSTOMDRAW.4, 4,4, 32,32, hdc1, 1-push,1-push, SRCCOPY ;SRCCOPY = そのまま貼り付け
swbreak
;ボタン2
case hw_btn2
BitBlt NMCUSTOMDRAW.4, 4,4, 32,32, hdc1, 32+1-push,1-push, SRCAND ;SRCAND = AND演算して貼り付け
swbreak
;ボタン3
case hw_btn3
BitBlt NMCUSTOMDRAW.4, 4,4, 32,32, hdc1, 32*2+1-push,1-push, SRCCOPY
swbreak
swend
}
}
return