炫彩界面库论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 8084|回复: 12

请教怎么设置控件位置了

[复制链接]

该用户从未签到

发表于 2011-11-24 17:15:11 | 显示全部楼层 |阅读模式
如题,我用  XEle_SetRect 函数后 ,控件直接不响应。如果把窗口缩小再打开。
那控件就被刷掉了。

  • TA的每日心情
    开心
    2022-1-9 18:18
  • 发表于 2011-11-24 19:32:34 | 显示全部楼层
    HELE hMyEle;
    RECT rect;
    XEle_SetRect(hMyEle,&rect);
    XEle_ReDrawEle(hMyEle);

    该用户从未签到

     楼主| 发表于 2011-11-24 21:46:31 | 显示全部楼层
    不行哦。我这里是测试一个按钮。当点击它的时候,设置一下它的位置。可是就出现那种情况了。

    bool CALLBACK BtnDown_EventBtnClick(HELE hEle,HELE hEventEle)
    {       
            RECT rect;
            //XEle_GetRect(hEle,&rect);
            XEle_GetClientRect(hEle,&rect);       
            rect.left=200;
            rect.top=100;
            XEle_SetRect(hEle,&rect);
            XEle_ReDrawEle(hEle);

            return true;
    }
  • TA的每日心情
    开心
    2022-1-9 18:18
  • 发表于 2011-11-24 22:15:55 | 显示全部楼层
    你上面的代码 rect.right-rect.left 估计值小于0.
    你想实现什么功能.


    1. bool CALLBACK BtnDown_EventBtnClick(HELE hEle,HELE hEventEle)
    2. {        
    3.         RECT rect;
    4.         //XEle_GetRect(hEle,&rect);
    5.         XEle_GetClientRect(hEle,&rect);
    6.         int cx=rect.right;
    7.         int cy=rect.bottom;
    8.         rect.left=200;
    9.         rect.top=100;
    10.         rect.right=rect.left+cx;
    11.         rect.bottom=rect.top+cy;
    12.         XEle_SetRect(hEle,&rect);
    13.         XEle_ReDrawEle(hEle);

    14.         return true;
    15. }
    复制代码

    该用户从未签到

    发表于 2011-11-25 00:07:27 | 显示全部楼层
    不知道在其他语言里情况如何,但是在易语言中,设置完新的位置后不需要重绘该控件的,我测试过。
    但是其父级(窗口或控件会在原始位置留下灰色区域,窗口最小化恢复后消失,或者使用代码重绘其父级)
    以下是易语言写的控件移动部分,因为是中文语言,相信没接触过的也很容易读:


    1. .版本 2
    2. .子程序 移动, , 公开, 设置控件位置或大小
    3. .参数 左边, 整数型, 可空
    4. .参数 顶边, 整数型, 可空
    5. .参数 宽度, 整数型, 可空
    6. .参数 高度, 整数型, 可空
    7. .局部变量 局部_父级资源, 整数型
    8. .局部变量 局部_重画类型, 整数型, , , 0-无重画,1-重画控件,2-重画窗口
    9. .局部变量 局部_重画矩形, RECT
    10. .局部变量 局部_移动矩形, RECT
    11. .如果真 (是否为空 (左边) 且 是否为空 (顶边) 且 是否为空 (宽度) 且 是否为空 (高度))
    12.     返回 ()
    13. .如果真结束
    14. XEle_GetRect (成员_资源句柄, 局部_移动矩形)
    15. 局部_父级资源 = 取父级控件资源句柄 ()
    16. .如果 (局部_父级资源 ≠ 0)
    17.     局部_重画类型 = 1
    18. .否则
    19.     局部_父级资源 = 取所在窗口资源句柄 ()
    20.     .如果真 (局部_父级资源 ≠ 0)
    21.         XEle_GetWndNCClientRect (成员_资源句柄, 局部_重画矩形)
    22.         局部_重画类型 = 2
    23.     .如果真结束
    24. .如果结束
    25. .如果真 (取反 (是否为空 (左边)))
    26.     局部_移动矩形.right = 局部_移动矩形.right - 局部_移动矩形.left + 左边
    27.     局部_移动矩形.left = 左边
    28. .如果真结束
    29. .如果真 (取反 (是否为空 (顶边)))
    30.     局部_移动矩形.bottom = 局部_移动矩形.bottom - 局部_移动矩形.top + 顶边
    31.     局部_移动矩形.top = 顶边
    32. .如果真结束
    33. .如果真 (取反 (是否为空 (宽度)))
    34.     局部_移动矩形.right = 局部_移动矩形.left + 宽度
    35. .如果真结束
    36. .如果真 (取反 (是否为空 (高度)))
    37.     局部_移动矩形.bottom = 局部_移动矩形.top + 高度
    38. .如果真结束
    39. XEle_SetRect (成员_资源句柄, 局部_移动矩形)
    40. .判断开始 (局部_重画类型 = 1)
    41.     XEle_ReDrawEle (局部_父级资源)
    42. .判断 (局部_重画类型 = 2)
    43.     XWnd_ReDrawWndRect (局部_父级资源, 局部_重画矩形, 真)
    44. .默认
    45. .判断结束
    复制代码

    该用户从未签到

     楼主| 发表于 2011-11-25 01:12:21 | 显示全部楼层
    admin 发表于 2011-11-24 22:15
    你上面的代码 rect.right-rect.left 估计值小于0.
    你想实现什么功能.

    呵呵,不想实现什么功能。只是熟悉这个库的功能。

    该用户从未签到

     楼主| 发表于 2011-11-25 01:12:57 | 显示全部楼层
    admin 发表于 2011-11-24 22:15
    你上面的代码 rect.right-rect.left 估计值小于0.
    你想实现什么功能.

    点击移动后。可是旧的位置还是显示原来的元素哦。没刷掉。
  • TA的每日心情
    开心
    2022-1-9 18:18
  • 发表于 2011-11-25 01:30:49 | 显示全部楼层
    恩是的,刷新整个窗口就可以了,XEle_ReDrawEle(), 这个函数只会刷新指定区域,效率比较高.

    该用户从未签到

     楼主| 发表于 2011-11-25 15:32:55 | 显示全部楼层
    本帖最后由 左右是爱 于 2011-11-25 15:37 编辑
    admin 发表于 2011-11-25 01:30
    恩是的,刷新整个窗口就可以了,XEle_ReDrawEle(), 这个函数只会刷新指定区域,效率比较高. ...

    呵呵。楼主一直误导我啊
    应该这么写才最有效率才是
    bool CALLBACK BtnDown_EventBtnClick(HELE hEle,HELE hEventEle)
    {        
            RECT oldRect;
            XEle_GetClientRect(hEle,&oldRect);
            RECT rect=oldRect;
            rect.left=200;
            rect.top=100;
            rect.right=rect.left+oldRect.right;
            rect.bottom=rect.top+oldRect.bottom;
            XEle_SetRect(hEle,&rect);
            XWnd_ReDrawWndRect(hWindow,&oldRect);
            return true;
    }

    经过简单的设置一个元素位置来看
    使用XCGUI库要写的代码还是蛮多的
  • TA的每日心情
    开心
    2022-1-9 18:18
  • 发表于 2011-11-25 16:24:29 | 显示全部楼层
    bool CALLBACK BtnDown_EventBtnClick(HELE hEle,HELE hEventEle)
    {        
            RECT rect;
            XEle_GetClientRect(hEle,&rect); //获取元素客户区坐标
            rect.left=200;
            rect.top=100;
            rect.right+=200;
            rect.bottom+=100;
            XEle_SetRect(hEle,&rect); //设置元素坐标
            XWnd_ReDrawWnd(hWindow); //重绘窗口显示
            return true;
    }
    提示:当你改变某个元素坐标之后,显示在旧坐标的元素图形需要擦出,同时要绘制改变坐标后元素的显示图形,因为在UI中图形的绘制是非常占CPU的,所以只在必要的时候,才会重绘!

    如果你有简单的方法,可以提出来,我们会改进!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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

    GMT+8, 2024-9-20 01:04 , Processed in 0.075767 second(s), 18 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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