游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1707|回复: 4

请大家教我GUI编程入门

[复制链接]

26

主题

125

帖子

125

积分

注册会员

Rank: 2

积分
125
发表于 2008-4-1 10:51:00 | 显示全部楼层 |阅读模式
除了SDK带的一些例子外,完全没有头绪,不知道GUI编程到底是怎么回事,连本相关的书都找不到。郁闷到底了~
最好能提供简短教程,感激不尽!

26

主题

125

帖子

125

积分

注册会员

Rank: 2

积分
125
 楼主| 发表于 2008-4-1 10:55:00 | 显示全部楼层

Re:请大家教我GUI编程入门

我自己做了几个 “按钮”,也就是加载一个按钮图片,然后矩形碰撞检测,写一些事件,可是游戏当中的GUI是千变万化的,不止按钮,还有很多其他的GUI啊,真不知道他们是怎么开发的

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2008-4-1 12:29:00 | 显示全部楼层

Re:请大家教我GUI编程入门

我是这方面的专家,可以教你,但你不能商用。

FAQ

A instemast有什么资格自称专家?
Q 几年前就做过UI,RpgDIY历史纪录里头都有的。

A 有什么强的地方?
Q 我举个例子,WinXP的语言兰:

拖动语言兰,不要松开鼠标,然后Alt+TAB切换到其他窗口,
然后继续移动鼠标,发现语言兰不会动了,把鼠标移动到语言兰之外,
这时再松开鼠标,然后,不要按下任何建,移动鼠标到语言兰左侧的可拖动区域,
会发现语言兰会跟鼠标移动。。。需要点击一下鼠标,才会恢复正常。

分析如下:

void CUI::ReleaseCapture()
{
        //释放了cap之后,这个刚才的cap窗体,仍然是活动窗体(顶层),
        //就是说,他现在不会失活!(如果以后有别的窗体cap,或者别的窗体activate,那么到那时它才会失活!)
        if(!m_pCapForm)return;
        m_pForms->Add(m_pCapForm);
        m_pCapForm=null;
        m_CapUsage=CU_NOCAPTURE;
        //一般来说,如果拖动过程中cap被释放,那么就说明将会有其他的cap了,那么被释放的cap会失活!然后拖动中止
        //有一种极端情况:拖动过程中cap被释放,然后没有其他窗体cap或activate...
        //不过,在这种极端情况下,大多也没有关系,因为如果鼠标在该窗体之外,那么什么也不发生,
        //如果鼠标在窗体范围内移动(低层事件!包括子控件),那么,由于检查到button==0(一般是这样),拖动会中止。
        //(不在MouseMove中检查button的话,会出现奇怪的结果)
        //极端之极端:如果用户一直不释放鼠标button==1,那么,鼠标移到窗体内时,仍然可以继续拖动,但是!
        //因为没有了cap,所以拖动过程很困难。
        //解决办法1)如果当前的cap不是this窗体(button==1的情况),那么,取消拖动;
        //(2)如果当前的cap不是this窗体(button==1的情况)那么,重新设置cap
       
        //前几天经常发现语言栏在拖动时的奇怪现象。。。所以。。。
        //微软的在拖动时意外丢失cap但没有失活的情况:(alt+tab切换时,cap总是会丢失)
        //注意:微软的其他的东西和我不同!这里只是说,在拖动时丢失cap但没有失活的情况
        //(1)拖动普通窗口然后alt+tab:不会出错!因为被拖动的窗口会失活!(说明微软把cap和非cap都放在一个list里!)
        //(2)拖动语言栏然后alt+tab:很糟糕!微软连MouseMove时候的button==0都没有检查

        //后来发现,我的UI测试程序,当Alt+Tab切换时,拖动着的Form竟然会出错!(其实UI类库自身没有错!)
        //错误的原因不是UI类库,而是测试程序的app.cpp中,button值没有正确地维护。(没有使用DI)
        //按照原先的WinProc代码,当capture丢失时,就收不到BUTTON UP消息,导致button的值出错
        //所以,估计微软不是没有检查button,而是button值没有正确地维护。
        //维护鼠标的程序,需要这样改一下:case WM_MOUSEMOVE:if(GetCapture()!=g_hwnd)btn=0;OnMouse(_move,btn);break;
}


121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2008-4-1 18:05:00 | 显示全部楼层

Re:请大家教我GUI编程入门

汗,楼上的你只要写一句话就可以了,后面的完全没必要嘛。。。

22

主题

309

帖子

353

积分

中级会员

Rank: 3Rank: 3

积分
353
QQ
发表于 2008-4-1 18:17:00 | 显示全部楼层

Re:请大家教我GUI编程入门

UI就是写字画图响应事件..
还想爪子?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 15:46

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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