現在制作中のソフトでカスタムドローのトラックバーを作っているのですが、描画が上手くいきません。
具体的にどんな感じの描画をしているかというと、トラックバーのチャンネル(?)の部分をつまみの右と左で違う色に塗り分けるような感じです。
以下がそのスクリプトです。
実行してみてつまみを動かしてみると一見正常に描画されているようなのですが、つまみを速く動かすと左側の部分が途切れ途切れになってしまいます。
#include "user32.as" #include "gdi32.as" #define ctype RGB(%1,%2,%3) (%1 | %2 << 8 | %3 << 16) #define CDDS_PREPAINT 0x00000001 #define CDDS_ITEMPREPAINT 0x00010001 #define CDRF_NOTIFYITEMDRAW 0x00000020 #define CDRF_SKIPDEFAULT 0x00000004 onexit *exit ; ブラシ破棄用 oncmd gosub *notify, $4E ; コントロール描画用 oncmd gosub *StaticControl, $138 ; 背景描画用 dim RECT, 4 ; トラックバー用ブラシ作成 CreateSolidBrush RGB($00, $00, $00) ; 背景用ブラシ hBrush.0 = stat CreateSolidBrush RGB($CC, $FF, $CC) ; チャンネル用ブラシ1 hBrush.1 = stat CreateSolidBrush RGB($30, $30, $30) ; チャンネル用ブラシ2 hBrush.2 = stat winobj "msctls_trackbar32", "", , $50000000 | $10, 400 hTrackbar = objinfo_hwnd(stat) sendmsg hTrackbar, $408, true, 384 ; TBM_SETRANGEMAX stop *notify ; NMHDR構造体 dupptr NMHDR, lparam, 12 if NMHDR.0 = hTrackbar { if NMHDR.2 = -12 { ; NMCUSTOMDRAW構造体 dupptr NMCUSTOMDRAW, lparam, 60 ; CDDS_PREPAINTステージ if NMCUSTOMDRAW.3 = CDDS_PREPAINT { return CDRF_NOTIFYITEMDRAW } ; CDDS_ITEMPREPAINTステージ if NMCUSTOMDRAW.3 = CDDS_ITEMPREPAINT { ; TBCD_THUMB if NMCUSTOMDRAW.9 = 2 { ; つまみ部分描画 RECT.0 = NMCUSTOMDRAW.5 RECT.1 = NMCUSTOMDRAW.6 RECT.2 = NMCUSTOMDRAW.7 RECT.3 = NMCUSTOMDRAW.8 FillRect NMCUSTOMDRAW.4, varptr(RECT), hBrush.1 return CDRF_SKIPDEFAULT } if NMCUSTOMDRAW.9 = 3 { ; チェンネル部分描画 RECT.0 = NMCUSTOMDRAW.5 RECT.1 = NMCUSTOMDRAW.6 RECT.2 = NMCUSTOMDRAW.7 RECT.3 = NMCUSTOMDRAW.8 FillRect NMCUSTOMDRAW.4, varptr(RECT), hBrush.2 sendmsg hTrackbar, $400 RECT.0 = NMCUSTOMDRAW.5 RECT.1 = NMCUSTOMDRAW.6 RECT.2 = NMCUSTOMDRAW.5 + stat RECT.3 = NMCUSTOMDRAW.8 FillRect NMCUSTOMDRAW.4, varptr(RECT), hBrush.1 return CDRF_SKIPDEFAULT } } } } return *StaticControl if lParam = hTrackbar { ; 背景部分描画 SetBkColor wParam, RGB($00, $00, $00) return hBrush.0 } return *exit ; ブラシ破棄 DeleteObject hBrush.0 DeleteObject hBrush.1 DeleteObject hBrush.2 end
どうやらつまみの周辺しか描画されてないように見えます。
原因がよく分からず困っています。カスタムドローをまともにやったのは初めてなので。
説明が少なくて分かりにくいとは思いますが、よろしくお願いします。
・参考URL
http://lhsp.s206.xrea.com/hsp_object7.html#1
http://lhsp.s206.xrea.com/misc/customdraw.html