.判断开始 (uMsg = #WM_PAINT) ' 15 20 参考Windows 消息类型,为某种条件重画触发的消息值。
Ex_ObjBeginPaint (hObj, 绘画数据)
Ex_ObjGetClassInfo (hObj, 类型信息)
AtomClass = 类型信息.atomName
.判断开始 (位与 (绘画数据.dwState, #状态_按下) ≠ 0)
bin = A2W (“down”)
AtomProp = Ex_Atom (取指针_字节集型 (bin)) ' 这里为了方便理解,平常定义为常量即可。
颜色状态 = #COLOR_EX_TEXT_DOWN
.判断 (位与 (绘画数据.dwState, #状态_点燃) ≠ 0)
bin = A2W (“hover”)
AtomProp = Ex_Atom (取指针_字节集型 (bin)) ' 同上
颜色状态 = #COLOR_EX_TEXT_HOVER
.默认
bin = A2W (“normal”)
AtomProp = Ex_Atom (取指针_字节集型 (bin)) ' 同上
颜色状态 = #COLOR_EX_TEXT_NORMAL
.判断结束
Ex_ThemeDrawControl (绘画数据.hTheme, 绘画数据.hCanvas, 0, 0, 绘画数据.uWidth, 绘画数据.uHeight, AtomClass, AtomProp, 255) ' 获取预载资源(就是主题里定义的图片)进行绘制
标题长度 = Ex_ObjGetTextLength (hObj) × 2 + 2 ' 宽字符占2个字节,0,0 结尾
标题内容 = 取空白字节集 (标题长度) ' 类似申请空白内存,没有这句,下面命令的数据放不进去。
Ex_ObjGetText (hObj, 标题内容, 标题长度)
' 注意绘制顺序,先画的是底层,文字放在后面绘制。不然会被盖住。看不见!
' 调试输出 (__get (hObj, 128))
_canvas_drawtext (绘画数据.hCanvas, Ex_ObjGetFont (hObj), Ex_ObjGetColor (hObj, 颜色状态), 取指针_字节集型 (标题内容), -1, 绘画数据.dwTextFormat, 绘画数据.rcPaint.left, 绘画数据.rcPaint.top, 绘画数据.rcPaint.right, 绘画数据.rcPaint.bottom)
' _canvas_drawtextex (绘画数据.hCanvas, Ex_ObjGetFont (hObj), Ex_ObjGetColor (hObj, 颜色状态), 取指针_字节集型 (标题内容), -1, 绘画数据.dwTextFormat, 绘画数据.rcPaint.left, 绘画数据.rcPaint.top, 绘画数据.rcPaint.right, 绘画数据.rcPaint.bottom, 15, Ex_ObjGetColor (hObj, #COLOR_EX_TEXT_SHADOW), 0, 0) '反正没有阴影色,用上面的命令绘制就行了。
' hFont 是字体指针 Color 是字体颜色,ARGB格式。开头注释中解释过了。
' TextFormat 是对齐方式,参照Windows常量。例DT_LEFT=0 DT_CENTER=1 DT_RIGHT=2 DT_TOP=0 DT_VCENTER=4 DT_BOTTOM=8 需要设置多个,用位或( ) ,以后不再解释。
Ex_ObjEndPaint (hObj, 绘画数据)
lpResult = 1 ' 如果返回值为真,就会返回这个值在引擎内部供某些命令判断。一般情况可以不用管这个值。
返回 (真) ' 返回真,表示拦截。内部不再执行了。可以自己把上面绘制的代码屏蔽看看效果。
下一篇 最强的安卓协议QQ收款插件