畫一個東東
下面,我們來看一下她是如何作畫的:
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,那麼根結點就不用處理這個鼠標輸出。相反就由她自己處理。
|