游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2767|回复: 6

关于ui制作的问题

[复制链接]

20

主题

65

帖子

65

积分

注册会员

Rank: 2

积分
65
发表于 2010-1-24 17:56:00 | 显示全部楼层 |阅读模式
大家好。
我的问题是这样的,我想自己制作ui,然后设计了一个按钮类 ,这个类 可以在屏幕上画一个矩形的按钮,他现在也可以接受鼠标事件,如果发生了WM_MouseMove消息的话 ,这个按钮就可以编程鼠标滑过的状态,我的问题是如果我有很多个这样的控件,那么如果发生了点击消息的话,我怎么判断这个消息是对哪一个按钮生效的呢?我现在是通过按钮的坐标和发生点击消息时的鼠标坐标来判断,但是如果按钮重叠的情况下就没有办法了。
不知道大家有没有好办法。请指教。

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2010-1-24 19:10:00 | 显示全部楼层

Re:关于ui制作的问题

最上层的控件获得输入

20

主题

65

帖子

65

积分

注册会员

Rank: 2

积分
65
 楼主| 发表于 2010-1-24 20:08:00 | 显示全部楼层

Re:关于ui制作的问题

可是怎么判断哪个控件 是最上层的呢?有什么维护的原则?

30

主题

422

帖子

433

积分

中级会员

Rank: 3Rank: 3

积分
433
发表于 2010-1-25 10:30:00 | 显示全部楼层

Re:关于ui制作的问题

ui可能是分层次的,比如对话框窗口包含按钮。为了表示按钮覆盖在窗口表面,此时顺序按先子结点(按钮),后父结点(对话框窗口)的顺序。层次可以迭代:窗口包含窗口,仍然可使用子结点优先(后序遍历)。

同层次内的窗口之间有排列顺序。多个窗口组成一个顺序表,直接按排列顺序依次判断。
一旦某窗口响应了消息则不再继续判断之后的窗口。
可以改变窗口排列顺序来动态调整响应优先顺序。比如激活窗口时将窗口移动到队列头。

0

主题

9

帖子

26

积分

注册会员

Rank: 2

积分
26
发表于 2010-1-25 12:14:00 | 显示全部楼层

Re:关于ui制作的问题

利用一个vector 来管理窗口队列就可以了
先显示的是窗口先push 消息来的时候 从最上面的窗口去响应 有响应就直接返回

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2010-1-25 17:58:00 | 显示全部楼层

Re:关于ui制作的问题

每个控件都有zOrder,用来控制控件的前后顺序
class control
{
    controls[] children; //sorted array,sort by zOrder

    findInputTarget(mouseX,mouseY)
    {
         foreach control in children
         {
              if(control.containPoint(mousex,mousey)
              {
                   if(control.haschildren) findinputTarget(mousex,mousey);recursion
                   else return control;
              }
         }  
    }
}

2

主题

7

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2010-1-26 07:31:00 | 显示全部楼层

Re:关于ui制作的问题

恩,大致了解 回头试验
多谢各位
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-16 08:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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