炫彩界面库论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 6334|回复: 12

如何使用 XBkInfoM_Draw 接口?

[复制链接]

该用户从未签到

发表于 2015-11-26 01:08:23 | 显示全部楼层 |阅读模式
我想给元素绘制个渐变色,不知道要如何调用 XBkInfoM_Draw 接口?

  1. xc.XInitXCGUI()

  2. m_hWindow := xc.XWnd_Create(0, 0, 300, 200, "炫彩界面库窗口")

  3. hEle := xc.XEle_Create(20, 50, 100, 100, m_hWindow)

  4. hDraw := xc.XDraw_Create(0)
  5. xc.XDraw_DrawLine(hDraw, 0, 0, 20, 20)

  6. VarSetCapacity(pRect, 16, 0)
  7. NumPut(0, pRect, 0, "Int")
  8. NumPut(0, pRect, 4, "Int")
  9. NumPut(20, pRect, 8, "Int")
  10. NumPut(20, pRect, 12, "Int")

  11. hBKInfoM := xc.XEle_GetBkInfoManager(hEle)
  12. xc.XBkInfoM_Draw(hBkInfoM, hDraw, pRect)

  13. xc.XWnd_ShowWindow(m_hWindow)

  14. xc.XRunXCGUI()
  15. xc.XExitXCGUI()
  16. Return
复制代码


  • TA的每日心情
    开心
    2022-1-9 18:18
  • 发表于 2015-11-26 09:46:51 | 显示全部楼层
    注册自绘函数,在里面调  XBkInfoM_Draw

    该用户从未签到

     楼主| 发表于 2015-11-26 12:26:17 | 显示全部楼层
    本帖最后由 tmplinshi 于 2015-11-26 12:28 编辑

    谢谢指点。我这样写的,没有成功:
    1. xc.XInitXCGUI()

    2. m_hWindow := xc.XWnd_Create(0, 0, 300, 200, "炫彩界面库窗口")

    3. hEle := xc.XEle_Create(20, 50, 100, 100, m_hWindow)

    4. XE_PAINT := 2
    5. XE_PAINT_END := 3
    6. ; xc.XEle_EnableEvent_XE_PAINT_END(hEle, True)
    7. xc.XEle_RegEventC2(hEle, 2, "ele.OnDraw")

    8. xc.XWnd_ShowWindow(m_hWindow)

    9. xc.XRunXCGUI()
    10. xc.XExitXCGUI()
    11. Return

    12. class ele {
    13.         OnDraw(hEle, hDraw) {
    14.                
    15.                 VarSetCapacity(pRect, 16, 0)
    16.                 NumPut(0, pRect, 0, "Int")
    17.                 NumPut(0, pRect, 4, "Int")
    18.                 NumPut(20, pRect, 8, "Int")
    19.                 NumPut(20, pRect, 12, "Int")

    20.                 ; xc.XEle_GetRect(hEle, pRect)               
    21.                 ; rc := RectToObj(pRect)
    22.                 ; xc.XDraw_DrawLine(hDraw, rc.left, rc.top, 20, 20)

    23.                 xc.XDraw_GradientFill2(hDraw, 0xFA1010, 255, 0x0E49EE, 255, pRect, 1)
    24.                 hBKInfoM := xc.XEle_GetBkInfoManager(hEle)
    25.                 xc.XBkInfoM_Draw(hBkInfoM, hDraw, pRect)

    26.                 ; xc.XDraw_LineTo(hDraw, 30, 50) ; <-- 这个函数可以成功
    27.         }
    28. }

    29. RectToObj(ByRef struct) {
    30.         Return { left  : NumGet(struct, 0, "Int")
    31.                , top   : NumGet(struct, 4, "Int")
    32.                , right : NumGet(struct, 8, "Int")
    33.                , bottom: NumGet(struct, 12, "Int") }
    34. }
    复制代码

    该用户从未签到

    发表于 2015-11-26 12:42:05 | 显示全部楼层
    有几个地方,第一

    xc.XEle_RegEventC2(hEle, 2, "ele.OnDraw")


    这个C2表示有两个句柄,而你的回调只有一个hele,是不对的,如果你只有一个句柄的话,就只能用


    xc.XEle_RegEventC1(hEle, 2, "ele.OnDraw")


    还有,回调函数还有一个 *pbHandle 这个是拦截 自绘的


    你注册了自绘函数就代表你要拦截了。此时需要 *pbHandle  = TURE


    int CALLBACK OnDraw(HDRAW hDraw,BOOL *pbHandled);  
    这个 BOOL *pbHandled 很重要,你需要 把这个也模拟出来。。。

    该用户从未签到

    发表于 2015-11-26 12:45:48 | 显示全部楼层
    tmplinshi 发表于 2015-11-26 12:26
    谢谢指点。我这样写的,没有成功:

    还有这个地方。。。
                    xc.XDraw_GradientFill2(hDraw, 0xFA1010, 255, 0x0E49EE, 255, pRect, 1)
                    hBKInfoM := xc.XEle_GetBkInfoManager(hEle)
                    xc.XBkInfoM_Draw(hBkInfoM, hDraw, pRect)

    背景管理器绘制,只能调用 背景管理器的api来 添加 渐变填充。。。不能用自绘来填充

    如果你要自绘填充矩形,那么,就必须拦截 *pbHandle ,告诉系统,现在我要进行自绘。。。

    该用户从未签到

    发表于 2015-11-26 12:50:04 | 显示全部楼层
    tmplinshi 发表于 2015-11-26 12:26
    谢谢指点。我这样写的,没有成功:

    还有一个问题就是,背景管理器不是这么用,你这个属于自绘了,不需要背景管理器的介入。。。

    该用户从未签到

    发表于 2015-11-26 12:58:21 | 显示全部楼层
    tmplinshi 发表于 2015-11-26 12:26
    谢谢指点。我这样写的,没有成功:

    这里给你做了一个例子。。

    http://www.xcgui.com/bbs/forum.php?mod=viewthread&tid=1455

    请查收

    该用户从未签到

     楼主| 发表于 2015-11-26 13:02:22 | 显示全部楼层
    dasemimi 发表于 2015-11-26 12:42
    有几个地方,第一

    xc.XEle_RegEventC2(hEle, 2, "ele.OnDraw")

    用 XEle_RegEventC2 我确定是正确的,因为 xc.XDraw_LineTo(hDraw, 30, 50) 能够绘制成功。

    如果我注册的回调函数是函数,而不是类,就确实要像你说的那样写两个句柄:
    1. xc.XEle_RegEventC2(hEle, XE_PAINT, "OnDraw")
    2. OnDraw(hEle, hEventEle, hDraw) {
    3.     ...
    4. }
    复制代码

    我也不知道为什么。不过总之没有错。

    该用户从未签到

     楼主| 发表于 2015-11-26 13:05:29 | 显示全部楼层
    dasemimi 发表于 2015-11-26 12:50
    还有一个问题就是,背景管理器不是这么用,你这个属于自绘了,不需要背景管理器的介入。。。 ...

    那 XBkInfoM_Draw 要怎么用呢?

    该用户从未签到

    发表于 2015-11-26 13:07:08 | 显示全部楼层
    tmplinshi 发表于 2015-11-26 13:05
    那 XBkInfoM_Draw 要怎么用呢?

    这玩儿用在,用户自己又要自绘,又要显示原来设计器设置的一些背景图片啥的,这个时候,就需要用到这个了
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    QQ|Archiver|手机版|小黑屋|炫彩界面库 ( 鄂ICP备2023014763号-1 )

    GMT+8, 2024-5-2 16:30 , Processed in 0.071019 second(s), 18 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表