include.docx

上传人:b****6 文档编号:7949888 上传时间:2023-01-27 格式:DOCX 页数:13 大小:17.70KB
下载 相关 举报
include.docx_第1页
第1页 / 共13页
include.docx_第2页
第2页 / 共13页
include.docx_第3页
第3页 / 共13页
include.docx_第4页
第4页 / 共13页
include.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

include.docx

《include.docx》由会员分享,可在线阅读,更多相关《include.docx(13页珍藏版)》请在冰豆网上搜索。

include.docx

include

#include

#include

#include"D3DGUIClass.h"

//-----------------------------------------------------------------------------

//Desc:

构造函数

//-----------------------------------------------------------------------------

D3DGUIClass:

:

D3DGUIClass(LPDIRECT3DDEVICE9device,intw,inth)

{

m_pFonts=NULL;

m_pControls=NULL;

m_pVertexBuffer=NULL;

m_nTotalFontNum=m_nTotalControlNum=m_nTotalBufferNum=0;

m_nWindowWidth=m_nWindowHeight=0;

m_bIsBackgroundUsed=false;

m_pd3dDevice=device;

m_nWindowWidth=w;m_nWindowHeight=h;

memset(&m_Background,0,sizeof(GUICONTROL));

}

//-----------------------------------------------------------------------------

//Name:

D3DGUIClass:

:

CreateTextFont()

//Desc:

字体创建函数

//-----------------------------------------------------------------------------

boolD3DGUIClass:

:

CreateTextFont(wchar_t*fontName,intsize,int*fontID)

{

if(!

m_pd3dDevice)returnfalse;

if(!

m_pFonts)

{

m_pFonts=newLPD3DXFONT[1];

if(!

m_pFonts)returnfalse;

}

else

{

LPD3DXFONT*temp;

temp=newLPD3DXFONT[m_nTotalFontNum+1];

if(!

temp)returnfalse;

memcpy(temp,m_pFonts,

sizeof(LPD3DXFONT)*m_nTotalFontNum);

delete[]m_pFonts;

m_pFonts=temp;

}

//调用D3DXCreateTextFont函数创建字体

D3DXCreateFont(m_pd3dDevice,size,0,0,1000,0,

DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,DEFAULT_QUALITY,

0,fontName,

&m_pFonts[m_nTotalFontNum]);

if(!

m_pFonts[m_nTotalFontNum])returnfalse;

//存下字体ID和ID计数。

if(fontID)*fontID=m_nTotalFontNum;

m_nTotalFontNum++;

returntrue;

}

//-----------------------------------------------------------------------------

//Name:

D3DGUIClass:

:

AddBackground()

//Desc:

创建保存背景图的缓存函数

//-----------------------------------------------------------------------------

boolD3DGUIClass:

:

AddBackground(wchar_t*fileName)

{

if(!

fileName)returnfalse;

m_Background.m_type=UGP_GUI_Background;

//从文件载入纹理图片

if(D3DXCreateTextureFromFile(m_pd3dDevice,fileName,&m_Background.m_Background)!

=D3D_OK)

returnfalse;

//获取窗口宽度和高度,以便稍后的背景铺满窗口

floatw=(float)m_nWindowWidth;

floath=(float)m_nWindowHeight;

GUIVERTEXobj[]=

{

{w,0,0.0f,1,D3DCOLOR_XRGB(255,255,255),1.0f,0.0f},

{w,h,0.0f,1,D3DCOLOR_XRGB(255,255,255),1.0f,1.0f},

{0,0,0.0f,1,D3DCOLOR_XRGB(255,255,255),0.0f,0.0f},

{0,h,0.0f,1,D3DCOLOR_XRGB(255,255,255),0.0f,1.0f},

};

//创建顶点缓存

if(FAILED(m_pd3dDevice->CreateVertexBuffer(sizeof(obj),0,D3DFVF_GUI,

D3DPOOL_DEFAULT,&m_BackgroundBuffer,NULL)))returnfalse;

//填充顶点缓存

void*ptr;

if(FAILED(m_BackgroundBuffer->Lock(0,sizeof(obj),(void**)&ptr,0)))returnfalse;

memcpy(ptr,obj,sizeof(obj));

m_BackgroundBuffer->Unlock();

m_bIsBackgroundUsed=true;

returntrue;

}

//-----------------------------------------------------------------------------

//Name:

D3DGUIClass:

:

AddStaticText()

//Desc:

创建静态文本控件

//-----------------------------------------------------------------------------

boolD3DGUIClass:

:

AddStaticText(intid,wchar_t*text,floatx,floaty,unsignedlongcolor,intfontID)

{

if(!

text||fontID<0||fontID>=m_nTotalFontNum)returnfalse;

//下面的代码用于创建一个控件

if(!

m_pControls)

{

m_pControls=newGUICONTROL[1];

if(!

m_pControls)returnfalse;

memset(&m_pControls[0],0,sizeof(GUICONTROL));

}

else

{

GUICONTROL*temp;

temp=newGUICONTROL[m_nTotalControlNum+1];

if(!

temp)returnfalse;

memset(temp,0,sizeof(GUICONTROL)*

(m_nTotalControlNum+1));

memcpy(temp,m_pControls,

sizeof(GUICONTROL)*m_nTotalControlNum);

delete[]m_pControls;

m_pControls=temp;

}

//填充我们需要的静态文本信息

m_pControls[m_nTotalControlNum].m_type=UGP_GUI_STATICTEXT;

m_pControls[m_nTotalControlNum].m_id=id;

m_pControls[m_nTotalControlNum].m_color=color;

m_pControls[m_nTotalControlNum].m_xPos=x;

m_pControls[m_nTotalControlNum].m_yPos=y;

m_pControls[m_nTotalControlNum].m_listID=fontID;

//复制文本数据

intlen=wcslen(text);

m_pControls[m_nTotalControlNum].m_text=newwchar_t[len+1];

if(!

m_pControls[m_nTotalControlNum].m_text)returnfalse;

wcscpy(m_pControls[m_nTotalControlNum].m_text,text);

//m_pControls[m_nTotalControlNum].m_text[len]='\0';

//增量总数的计算

m_nTotalControlNum++;

returntrue;

}

//-----------------------------------------------------------------------------

//Name:

D3DGUIClass:

:

AddButton()

//Desc:

创建按钮控件的函数

//-----------------------------------------------------------------------------

boolD3DGUIClass:

:

AddButton(intid,floatx,floaty,wchar_t*up,wchar_t*over,wchar_t*down)

{

if(!

up||!

over||!

down)returnfalse;

if(!

m_pControls)

{

m_pControls=newGUICONTROL[1];

if(!

m_pControls)returnfalse;

memset(&m_pControls[0],0,sizeof(GUICONTROL));

}

else

{

GUICONTROL*temp;

temp=newGUICONTROL[m_nTotalControlNum+1];

if(!

temp)returnfalse;

memset(temp,0,sizeof(GUICONTROL)*

(m_nTotalControlNum+1));

memcpy(temp,m_pControls,

sizeof(GUICONTROL)*m_nTotalControlNum);

delete[]m_pControls;

m_pControls=temp;

}

//Setallthedataneededtorender/processabutton.

m_pControls[m_nTotalControlNum].m_type=UGP_GUI_BUTTON;

m_pControls[m_nTotalControlNum].m_id=id;

m_pControls[m_nTotalControlNum].m_xPos=x;

m_pControls[m_nTotalControlNum].m_yPos=y;

m_pControls[m_nTotalControlNum].m_listID=m_nTotalBufferNum;

//从文件加载纹理

if(D3DXCreateTextureFromFile(m_pd3dDevice,up,&m_pControls[m_nTotalControlNum].m_upTex)!

=D3D_OK)

{

returnfalse;

}

if(D3DXCreateTextureFromFile(m_pd3dDevice,over,&m_pControls[m_nTotalControlNum].m_overTex)!

=D3D_OK)

{

returnfalse;

}

if(D3DXCreateTextureFromFile(m_pd3dDevice,down,&m_pControls[m_nTotalControlNum].m_downTex)!

=D3D_OK)

{

returnfalse;

}

unsignedlongwhite=D3DCOLOR_XRGB(255,255,255);

//获取一下图形的宽度和高度

D3DSURFACE_DESCdesc;

m_pControls[m_nTotalControlNum].m_upTex->GetLevelDesc(0,&desc);

floatw=(float)desc.Width;

floath=(float)desc.Height;

m_pControls[m_nTotalControlNum].m_width=w;

m_pControls[m_nTotalControlNum].m_height=h;

GUIVERTEXobj[]=

{

{w+x,0+y,0.0f,1,white,1.0f,0.0f},

{w+x,h+y,0.0f,1,white,1.0f,1.0f},

{0+x,0+y,0.0f,1,white,0.0f,0.0f},

{0+x,h+y,0.0f,1,white,0.0f,1.0f},

};

//创建顶点缓存

if(!

m_pVertexBuffer)

{

m_pVertexBuffer=newLPDIRECT3DVERTEXBUFFER9[1];

if(!

m_pVertexBuffer)returnfalse;

}

else

{

LPDIRECT3DVERTEXBUFFER9*temp;

temp=newLPDIRECT3DVERTEXBUFFER9[m_nTotalBufferNum+1];

if(!

temp)returnfalse;

memcpy(temp,m_pVertexBuffer,

sizeof(LPDIRECT3DVERTEXBUFFER9)*m_nTotalBufferNum);

delete[]m_pVertexBuffer;

m_pVertexBuffer=temp;

}

if(FAILED(m_pd3dDevice->CreateVertexBuffer(sizeof(obj),0,

D3DFVF_GUI,D3DPOOL_DEFAULT,&m_pVertexBuffer[m_nTotalBufferNum],NULL)))

{

returnfalse;

}

//填充顶点缓存

void*ptr;

if(FAILED(m_pVertexBuffer[m_nTotalBufferNum]->Lock(0,sizeof(obj),(void**)&ptr,0)))

{

returnfalse;

}

memcpy(ptr,obj,sizeof(obj));

m_pVertexBuffer[m_nTotalBufferNum]->Unlock();

//自增

m_nTotalBufferNum++;

//自增

m_nTotalControlNum++;

returntrue;

}

//-----------------------------------------------------------------------------

//Name:

D3DGUIClass:

:

ClearUp()

//Desc:

清理门户释放资源的函数

//-----------------------------------------------------------------------------

voidD3DGUIClass:

:

ClearUp()

{

//清理门户,释放所有的资源

if(m_bIsBackgroundUsed)

{

if(m_Background.m_Background)

m_Background.m_Background->Release();

if(m_BackgroundBuffer)

m_BackgroundBuffer->Release();

}

m_Background.m_Background=NULL;

m_BackgroundBuffer=NULL;

for(inti=0;i

{

if(m_pFonts[i])

{

m_pFonts[i]->Release();

m_pFonts[i]=NULL;

}

}

if(m_pFonts)delete[]m_pFonts;

m_pFonts=NULL;

m_nTotalFontNum=0;

for(inti=0;i

{

if(m_pVertexBuffer[i])

{

m_pVertexBuffer[i]->Release();

m_pVertexBuffer[i]=NULL;

}

}

if(m_pVertexBuffer)delete[]m_pVertexBuffer;

m_pVertexBuffer=NULL;

m_nTotalBufferNum=0;

for(inti=0;i

{

if(m_pControls[i].m_Background)

{

m_pControls[i].m_Background->Release();

m_pControls[i].m_Background=NULL;

}

if(m_pControls[i].m_upTex)

{

m_pControls[i].m_upTex->Release();

m_pControls[i].m_upTex=NULL;

}

if(m_pControls[i].m_downTex)

{

m_pControls[i].m_downTex->Release();

m_pControls[i].m_downTex=NULL;

}

if(m_pControls[i].m_overTex)

{

m_pControls[i].m_overTex->Release();

m_pControls[i].m_overTex=NULL;

}

if(m_pControls[i].m_text)

{

delete[]m_pControls[i].m_text;

m_pControls[i].m_text=NULL;

}

}

if(m_pControls)delete[]m_pControls;

m_pControls=NULL;

m_nTotalControlNum=0;

}

//-----------------------------------------------------------------------------

//Name:

ProcessGUI

//Desc:

全局的函数,封装渲染整个GUI系统,同样还为控件调用回调函数

//-----------------------------------------------------------------------------

voidProcessGUI(D3DGUIClass*gui,boolLMBDown,intmouseX,intmouseY,void(*funcPtr)(intid,intstate))

{

if(!

gui)return;

LPDIRECT3DDEVICE9device=gui->GetD3dDevice();

if(!

device)return;

//绘制背景

GUICONTROL*Background=gui->GetBackground();

LPDIRECT3DVERTEXBUFFER9bdBuffer=gui->GetBackgroundBuffer();

//已经创建出的东西才绘制,所以来个if

if(gui->IsBackgroundUsed()&&Background&&bdBuffer)

{

device->SetTexture(0,Background->m_Background);

device->SetStreamSource(0,bdBuffer,0,sizeof(GUIVERTEX));

device->SetFVF(D3DFVF_GUI);

device->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);

device->SetTexture(0,NULL);

}

//用来显示文本的对象

LPD3DXFONTpFont=NULL;

RECTfontPosition={0,0,(long)gui->GetWindowWidth(),

(long)gui->GetWindowHeig

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 初中作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1