这是Quartz--v0.041版本的第三个例子,我们依然使用前一个例题的代码完成。如果没有看的,请先看【Quartz--v0.04例题】Tu....02 在UI中试用图片[长]
在本次例题中,主要完成增加一个按钮。随着按钮的增加如,整个UI的窗口就变得活跃起来了,越来越像一个真正的UI了不是吗?
首先拷贝上一个例题到新的目录,然后编译确保可以通过。
我们继续增加一个图片控件,为的是给按钮找一个地方放。具体过程我就不说了,增加一个面板,代码如下:
SetRect(&r3,16,164,390,400); g_cImgDolig.Init(50,80,374,237,r3);
然后进入我们的正体,新增加一个按钮:
CButton g_button; //按钮
这个控件的使用方法和静态图片控件完全一样。 SetRect(&r1,185,0,316,29); SetRect(&r2,185,31,316,60); SetRect(&r3,185,66,390,95); g_button.Init(170,260,132,30,r1,r2,r3);
需要解释的还是init函数:Init(屏幕坐标x,屏幕坐标y,控件有效宽度,控件有效高度,基本图片,鼠标悬浮图片,鼠标点下图片);
这个按钮的渲染就完成了!!
为了增加这个控件的实用型,就把这个按钮的控制放在一全新的函数void DoligTuXing(bool Show){}中:
void DoligTuXing(bool Show) { if(Show) { g_button.Show(); g_cImgDolig.Show(); } else { g_button.Hide(); g_cImgDolig.Hide(); }
}
这样需要增加一个新的变量
在Rander里就改变成了 DoligTuXing(m_bShow); g_pWindowManager.Render();//GUI系统渲染函数
....
再增加一个void UpData()函数用来处理事件
void UpData() { if(g_button.OnButtonDown()) m_bShow = false; }
(注*:每一个控件都有这样的事件消息来控制)
放在你的游戏事件处理循环中就可以了,例题里面没有,我就放在这个程序的事件处理循环中
while( msg.message!=WM_QUIT ) { if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } else Render();//游戏绘制 UpData(); }
现在运行一下你的代码,点击按钮,这个对话框就消失了~~呵呵
[此贴子已经被作者于2009-4-20 16:16:26编辑过] |