炫彩界面库论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: 左右是爱

请教怎么设置控件位置了

[复制链接]

该用户从未签到

发表于 2011-11-25 18:55:28 | 显示全部楼层
9# 那个对单一应用是可以的,但是要是通用的移动,要考虑到移动的控件(本例中是按钮)所在的父级是窗口还是控件,是窗口的话才需要 XWnd_ReDrawWndRect;要是父级为控件的话,XEle_ReDrawEle 就可以了。。。只不过这里传递的资源句柄不是按钮的,而是按钮的父级控件资源句柄。
另外,9# 使用 XEle_GetClientRect 获得的RECT 传递给 XWnd_ReDrawWndRect 貌似是不行的(如果你测试可以说明是碰巧像素位置重合了吧),这个接口获取的仅仅是个宽和高,其 left 和 top 固定为 0,怎么能传递给窗口来调用 XWnd_ReDrawWndRect 呢? 我觉得应该是使用 XEle_GetWndNCClientRect 获得按钮基于非客户区的RECT再重绘才对哦。。。

我上面的易语言代码不是很易懂么。。。。。。

要是说到更简单一点的,算是对作者的建议的话,我觉得是这样:
1、首先窗口或控件的重绘事件(本例中仅仅涉及重绘,举一反三要是我这个建议涵盖面更广一些的话,那就要包含其他的事件),想必这些事件一定在作者源代码中有触发的地方(这是废话,不然也不可能有事件消息了),但是我想问是否有截获的地方呢?就是说某个窗口或某个控件在移动时(本例是移动,升华一下还可能是其他事件),在作者的源码中是否可以截获的到呢?如果要是可以,那么简化我们的代码和使用难度就非常可行了。。。如果要是源码中截获不了,那么貌似没更简单的办法了,第2点也不用看了。
2、凡是具有通用性的后期处理,比如说移动了某个控件就需要在其父级上重绘原来的区域,又比如我有个帖子问到滚动条的滑块大小重新设置后不立即显示(作者给了代码说是要先用 XSBar_Adjust 再去重绘,我现在还没回到自己电脑上没有条件测试)。。。凡此种种,就是我们必然要刷新、要重绘、要清除、要……的这些代码,如果作者在源码中的事件截获部分给自动完成了,那么炫彩库使用起来相信更顺手和简单的多了,我想这对后期的推广也有好处啊。。。

往大了说,炫彩库虽然只是个界面链接库而不是编程语言,但包含了GUI部分,要是使用UI设计器,就可以说相当于可视化编程语言的前台部分,那么哪有一款流行的编程语言,除了让使用者编写功能性代码外,还要负责处理父级或本身的收尾操作呢。这样的话代码必然杂乱,可以说,炫彩库最好的用户是那些设计软件但对UI设计水平不高或不愿意将更多精力放入UI部分的人,当然也包括我在内。要是对 UI 非常精通的人,相信很多不使用外部链接库仅仅靠代码设计一款适用自己的 UI 界面是很正常的事。

所以为了炫彩库更适合我们这些界面开发上的中低水平的人,非常希望以后的接口可以更多的体现功能性和可扩展性,而界面的显示处理部分能再源代码中自动完成。。。

仅仅是个人之言,还是衷心祝愿炫彩库越来越好,使用者越来越多!!!

该用户从未签到

 楼主| 发表于 2011-11-25 20:26:37 | 显示全部楼层
shier2817 发表于 2011-11-25 18:55
9# 那个对单一应用是可以的,但是要是通用的移动,要考虑到移动的控件(本例中是按钮)所在的父级是窗口还 ...

你的易语言 呵呵 估计很少有人看懂
  • TA的每日心情
    开心
    2022-1-9 18:18
  • 发表于 2011-11-25 21:04:13 | 显示全部楼层
    重绘部分让用户去调用,其主要原因是为了提供效率.

    举例:在窗口上有3个按钮,我们需要动态改变这3个按钮的位置.

    例1:
    假如我们在XEle_SetRect()函数中加入了自动重绘功能.


    1. XEle_SetRect(hButton1,&rect1);
    2. XEle_SetRect(hButton2,&rect2);
    3. XEle_SetRect(hButton3,&rect3);
    4. //假如更多的按钮....
    复制代码

    列2:
    XEle_SetRect()没有自动重绘功能.


    1. XEle_SetRect(hButton1,&rect1);
    2. XEle_SetRect(hButton2,&rect2);
    3. XEle_SetRect(hButton3,&rect3);
    4. //假如更多的按钮....
    5. XWnd_ReDrawWnd(hWindow);
    复制代码

    例1和例2比较:
    例1进行了3次重绘.
    列2进行了1次重绘.

    显然例2比例1有优势,当例子中是1000个按钮同时移动时,更能突出优势!

    所以很多地方需要用户来调用函数重绘.

    可改进的地方:XEle_SetRect(HELE,RECT*,是否重绘),添加一个是否重绘的参数选项.

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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

    GMT+8, 2024-9-19 10:10 , Processed in 0.073278 second(s), 16 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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