画一个东东
下面,我们来看一下她是如何作画的:
void CGUIElement::Draw()
{
if(!Visible())
return;
int left = m_Rect.left;
int right = m_Rect.right;
int top = m_Rect.top;
int botton = m_Rect.bottom;
if(m_pTexture == NULL)
{
gldisable(GL_TEXTURE_2D);
if(m_pMaterial != NULL)
{
glDisable(GL_LIGHTING);
glColor4fv(m_pMaterial->GetAmient().RGBA);
}
else
{
glDisable(GL_LIGHTING);
glColor3d(255,255,255);
}
glBegin(GL_QUADS);
glVertex3d(left,bottom,0);
glVertex3d(right,botton,0);
glVertex3d(right,top,0);
glVertex3d(left,top,0);
glEnd();
}
else
{
m_pTexture->Bind();
if(m_pMaterial != NULL)
{
glDisable(GL_LIGHTING);
glColor3f(m_pMattrial->GetAmbient().R/255.0f,m_pMattrial->GetAmbient().G/255.0f,m_pMattrial->GetAmbient().B/255.0f);
}
else
glColor3d(1,1,1);
if(m_pTexture->IsMasked())
{
glAlphaFunc(GL_GREATER,0.0f);
glEnable(GL_ALPHA_TEST);
}
glBegin(GL_QUADS);
glTexCoord2f(m_TexCoord[0].x,m_TexCoord[0].y);glVertex3d(left,bottom.0);
glTexCoord2f(m_TexCoord[1].x,m_TexCoord[1].y);glVertex3d(right,bottom.0);
glTexCoord2f(m_TexCoord[2].x,m_TexCoord[2].y);glVertex3d(right,top.0);
glTexCoord2f(m_TexCoord[3].x,m_TexCoord[3].y);glVertex3d(left,top.0);
glEnd();
if(m_pTexture->IsMasked())
glDisable(GL_ALPHA_TEST);
}
CGUIElement *Iter = begin();
Set_ptr(Iter);
While(Iter != NULL)
{
Iter->Draw();
Iter = next();
}
}
正如你所看到的,她非常容易明白,所以我就不讲了,(:
处理输入
一个基本的组件只需要处理鼠标事件。
Int CGUIElement::OnLMouseUp(UINT x,UINT y)
{
CGUIElement *IterElement = end();
Set_ptr(IterElement);
While(IterElement != NULL)
{
if(IterElement->OnLMouseUp(x,y)){
return 1;
IterElement = prev();
}
if(GetType() != GUI)
{
if(PointInRect(GetRect(),x,y))
{
GetGUI()->PostMessage(this,NULL,GUI_Message_AquireFocus);
Return 1;
}
return 0;
}
}
正如你所看到的,首先组件将这个输入送给他的孩子,看他们是否能处理它。如果他们能,将返回1,那么根结点就不用处理这个鼠标输出。相反就由她自己处理。
|