亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? windowmaterialdialog.cpp

?? 骨骼動畫....把魔獸模型解出的代碼..
?? CPP
字號:
//+-----------------------------------------------------------------------------
//| Included files
//+-----------------------------------------------------------------------------
#include "WindowMaterialDialog.h"


//+-----------------------------------------------------------------------------
//| Global objects
//+-----------------------------------------------------------------------------
WINDOW_MATERIAL_DIALOG MaterialDialog;


//+-----------------------------------------------------------------------------
//| Static member variables
//+-----------------------------------------------------------------------------
MODEL_MATERIAL_DATA WINDOW_MATERIAL_DIALOG::StaticData;
std::list<MODEL_MATERIAL_LAYER*> WINDOW_MATERIAL_DIALOG::StaticLayerList;
std::list<MODEL_MATERIAL_LAYER*> WINDOW_MATERIAL_DIALOG::StaticAddedLayerList;
std::list<MODEL_MATERIAL_LAYER*> WINDOW_MATERIAL_DIALOG::StaticRemovedLayerList;


//+-----------------------------------------------------------------------------
//| Constructor
//+-----------------------------------------------------------------------------
WINDOW_MATERIAL_DIALOG::WINDOW_MATERIAL_DIALOG()
{
	//Empty
}


//+-----------------------------------------------------------------------------
//| Destructor
//+-----------------------------------------------------------------------------
WINDOW_MATERIAL_DIALOG::~WINDOW_MATERIAL_DIALOG()
{
	//Empty
}


//+-----------------------------------------------------------------------------
//| Displays the dialog
//+-----------------------------------------------------------------------------
BOOL WINDOW_MATERIAL_DIALOG::Display(HWND ParentWindow, MODEL_MATERIAL_DATA& Data) CONST
{
	StaticData = Data;
	if(DialogBoxParam(GetModuleHandle(NULL), MAKEINTRESOURCE(DialogMaterial), ParentWindow, DialogMessageHandler, 0))
	{
		Data = StaticData;
		StaticData = MODEL_MATERIAL_DATA();
		return TRUE;
	}

	StaticData = MODEL_MATERIAL_DATA();
	return FALSE;
}


//+-----------------------------------------------------------------------------
//| Handles the dialog messages
//+-----------------------------------------------------------------------------
BOOL CALLBACK WINDOW_MATERIAL_DIALOG::DialogMessageHandler(HWND Window, UINT Message, WPARAM W, LPARAM L)
{
	switch(Message)
	{
		case WM_INITDIALOG:
		{
			INT i;
			INT Index;
			HWND ListBox;
			MODEL_MATERIAL_LAYER* MaterialLayer;

			AddWindow(Window);
			CenterWindow(Window);

			SetInt(GetDlgItem(Window, DialogMaterialEditPriorityPlane), StaticData.PriorityPlane);
			CheckDlgButton(Window, DialogMaterialButtonConstantColor, BoolToCheckState(StaticData.ConstantColor));
			CheckDlgButton(Window, DialogMaterialButtonSortPrimitivesFarZ, BoolToCheckState(StaticData.SortPrimitivesFarZ));
			CheckDlgButton(Window, DialogMaterialButtonFullResolution, BoolToCheckState(StaticData.FullResolution));

			ListBox = GetDlgItem(Window, DialogMaterialList);

			StaticLayerList.clear();
			StaticAddedLayerList.clear();
			StaticRemovedLayerList.clear();

			for(i = 0; i < StaticData.LayerContainer.GetTotalSize(); i++)
			{
				if(StaticData.LayerContainer.ValidIndex(i))
				{
					std::stringstream Stream;

					MaterialLayer = StaticData.LayerContainer[i];

					MaterialLayer->NewData() = MaterialLayer->Data();
					MaterialLayer->NewTextureNode = MaterialLayer->TextureNode;
					MaterialLayer->NewTextureAnimationNode = MaterialLayer->TextureAnimationNode;
					MaterialLayer->MarkAsUpdated();

					Stream << "MaterialLayer " << MaterialLayer;
					StaticLayerList.push_back(MaterialLayer);
					Index = static_cast<INT>(::SendMessage(ListBox, LB_INSERTSTRING, -1, reinterpret_cast<LPARAM>(Stream.str().c_str())));
					::SendMessage(ListBox, LB_SETITEMDATA, Index, reinterpret_cast<LPARAM>(MaterialLayer));
				}
			}

			return TRUE;
		}

		case WM_CONTEXTMENU:
		{
			INT Index;
			INT MenuId;
			INT NrOfItems;
			HWND ListBox;
			RECT TempRect;
			RECT ListRect;
			POINT MousePosition;
			POINT LocalMousePosition;

			ListBox = GetDlgItem(Window, DialogMaterialList);

			GetWindowRect(ListBox, &ListRect);
			GetCursorPos(&MousePosition);
			LocalMousePosition = MousePosition;
			ScreenToClient(ListBox, &LocalMousePosition);

			if(!Common.PointInsideRect(MousePosition, ListRect)) return TRUE;

			MenuId = LayerMenu2;
			NrOfItems = static_cast<INT>(::SendMessage(ListBox, LB_GETCOUNT, 0, 0));

			Index = 0;
			while(Index < NrOfItems)
			{
				::SendMessage(ListBox, LB_GETITEMRECT, Index, reinterpret_cast<LPARAM>(&TempRect));
				if(Common.PointInsideRect(LocalMousePosition, TempRect))
				{
					::SendMessage(ListBox, LB_SETCURSEL, Index, 0);
					MenuId = LayerMenu;
					break;
				}

				Index++;
			}

			TrackPopupMenuEx(GetSubMenu(LoadMenu(GetModuleHandle(NULL), MAKEINTRESOURCE(MenuId)), 0), TPM_LEFTALIGN | TPM_RIGHTBUTTON, MousePosition.x, MousePosition.y, Window, NULL);

			return TRUE;
		}

		case WM_COMMAND:
		{
			switch(LOWORD(W))
			{
				case DialogMaterialList:
				{
					switch(HIWORD(W))
					{
						case LBN_DBLCLK:
						{
							if(!Edit(Window))
							{
								Error.DisplayMessage(Window);
								Error.ClearMessage();
								return TRUE;
							}

							return TRUE;
						}
					}

					return TRUE;
				}

				case LayerFileCreateNew:
				case LayerFileCreateNew2:
				{
					if(!CreateNew(Window))
					{
						Error.DisplayMessage(Window);
						Error.ClearMessage();
						return TRUE;
					}

					return TRUE;
				}

				case LayerFileEdit:
				case LayerFileEdit2:
				{
					if(!Edit(Window))
					{
						Error.DisplayMessage(Window);
						Error.ClearMessage();
						return TRUE;
					}

					return TRUE;
				}

				case LayerFileRemove:
				case LayerFileRemove2:
				{
					if(!Remove(Window))
					{
						Error.DisplayMessage(Window);
						Error.ClearMessage();
						return TRUE;
					}

					return TRUE;
				}

				case LayerFileMoveUp:
				case LayerFileMoveUp2:
				{
					if(!MoveUp(Window))
					{
						Error.DisplayMessage(Window);
						Error.ClearMessage();
						return TRUE;
					}

					return TRUE;
				}

				case LayerFileMoveDown:
				case LayerFileMoveDown2:
				{
					if(!MoveDown(Window))
					{
						Error.DisplayMessage(Window);
						Error.ClearMessage();
						return TRUE;
					}

					return TRUE;
				}

				case DialogMaterialButtonOk:
				{
					std::list<MODEL_MATERIAL_LAYER*>::iterator i;

					StaticData.PriorityPlane = GetInt(GetDlgItem(Window, DialogMaterialEditPriorityPlane));
					StaticData.ConstantColor = CheckStateToBool(IsDlgButtonChecked(Window, DialogMaterialButtonConstantColor));
					StaticData.SortPrimitivesFarZ = CheckStateToBool(IsDlgButtonChecked(Window, DialogMaterialButtonSortPrimitivesFarZ));
					StaticData.FullResolution = CheckStateToBool(IsDlgButtonChecked(Window, DialogMaterialButtonFullResolution));

					StaticData.LayerContainer.Clear();

					i = StaticLayerList.begin();
					while(i != StaticLayerList.end())
					{
						(*i)->UpdateDataIfNeccessary();
						StaticData.LayerContainer.Add(*i);
						i++;
					}

					i = StaticRemovedLayerList.begin();
					while(i != StaticRemovedLayerList.end())
					{
						delete (*i);
						i++;
					}

					StaticLayerList.clear();
					StaticAddedLayerList.clear();
					StaticRemovedLayerList.clear();

					RemoveWindow(Window);
					EndDialog(Window, 1);
					return TRUE;
				}

				case DialogMaterialButtonCancel:
				{
					std::list<MODEL_MATERIAL_LAYER*>::iterator i;

					i = StaticAddedLayerList.begin();
					while(i != StaticAddedLayerList.end())
					{
						delete (*i);
						i++;
					}

					StaticLayerList.clear();
					StaticAddedLayerList.clear();
					StaticRemovedLayerList.clear();

					RemoveWindow(Window);
					EndDialog(Window, 0);
					return TRUE;
				}
			}

			return FALSE;
		}

		case WM_CLOSE:
		{
			::SendMessage(Window, WM_COMMAND, DialogMaterialButtonCancel, 0);
			return TRUE;
		}
	}

	return FALSE;
}


//+-----------------------------------------------------------------------------
//| Creates a new layer
//+-----------------------------------------------------------------------------
BOOL WINDOW_MATERIAL_DIALOG::CreateNew(HWND Window)
{
	INT Index;
	HWND ListBox;
	MODEL_MATERIAL_LAYER* Layer;
	MODEL_TEXTURE* Texture;
	MODEL_TEXTURE_ANIMATION* TextureAnimation;
	std::stringstream Stream;

	ListBox = GetDlgItem(Window, DialogMaterialList);

	Layer = new MODEL_MATERIAL_LAYER();
	if(Layer == NULL)
	{
		Error.SetMessage("Unable to create a new material layer, memory allocation failed!");
		return FALSE;
	}

	Texture = NULL;
	TextureAnimation = NULL;

	if(!MaterialLayerDialog.Display(Window, Layer->NewData(), Texture, TextureAnimation))
	{
		delete Layer;
		return TRUE;
	}

	if(Texture != NULL)
	{
		Layer->NewTextureNode.Attach(Texture->MaterialLayerNodes);
	}
	else
	{
		Layer->NewTextureNode.Detach();
	}

	if(TextureAnimation != NULL)
	{
		Layer->NewTextureAnimationNode.Attach(TextureAnimation->MaterialLayerNodes);
	}
	else
	{
		Layer->NewTextureAnimationNode.Detach();
	}

	Layer->MarkAsUpdated();

	Stream << "MaterialLayer " << Layer;
	StaticLayerList.push_back(Layer);
	StaticAddedLayerList.push_back(Layer);
	Index = static_cast<INT>(::SendMessage(ListBox, LB_INSERTSTRING, -1, reinterpret_cast<LPARAM>(Stream.str().c_str())));
	::SendMessage(ListBox, LB_SETITEMDATA, Index, reinterpret_cast<LPARAM>(Layer));
	::SendMessage(ListBox, LB_SETCURSEL, Index, 0);

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Edits an existing layer
//+-----------------------------------------------------------------------------
BOOL WINDOW_MATERIAL_DIALOG::Edit(HWND Window)
{
	INT Index;
	HWND ListBox;
	MODEL_MATERIAL_LAYER* Layer;
	MODEL_TEXTURE* Texture;
	MODEL_TEXTURE_ANIMATION* TextureAnimation;

	ListBox = GetDlgItem(Window, DialogMaterialList);

	Index = static_cast<INT>(::SendMessage(ListBox, LB_GETCURSEL, 0, 0));
	if(Index == LB_ERR) return TRUE;

	Layer = reinterpret_cast<MODEL_MATERIAL_LAYER*>(::SendMessage(ListBox, LB_GETITEMDATA, Index, 0));
	if(Layer == NULL) return TRUE;

	Texture = Layer->NewTextureNode.IsAttached() ? Layer->NewTextureNode.GetObjectData() : NULL;
	TextureAnimation = Layer->NewTextureAnimationNode.IsAttached() ? Layer->NewTextureAnimationNode.GetObjectData() : NULL;

	if(!MaterialLayerDialog.Display(Window, Layer->NewData(), Texture, TextureAnimation)) return TRUE;

	if(Texture != NULL)
	{
		Layer->NewTextureNode.Attach(Texture->MaterialLayerNodes);
	}
	else
	{
		Layer->NewTextureNode.Detach();
	}

	if(TextureAnimation != NULL)
	{
		Layer->NewTextureAnimationNode.Attach(TextureAnimation->MaterialLayerNodes);
	}
	else
	{
		Layer->NewTextureAnimationNode.Detach();
	}

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Removes an existing layer
//+-----------------------------------------------------------------------------
BOOL WINDOW_MATERIAL_DIALOG::Remove(HWND Window)
{
	INT Index;
	HWND ListBox;
	MODEL_MATERIAL_LAYER* Layer;
	std::list<MODEL_MATERIAL_LAYER*>::iterator i;

	ListBox = GetDlgItem(Window, DialogMaterialList);

	Index = static_cast<INT>(::SendMessage(ListBox, LB_GETCURSEL, 0, 0));
	if(Index == LB_ERR) return TRUE;

	Layer = reinterpret_cast<MODEL_MATERIAL_LAYER*>(::SendMessage(ListBox, LB_GETITEMDATA, Index, 0));
	if(Layer == NULL) return TRUE;

	i = std::find(StaticAddedLayerList.begin(), StaticAddedLayerList.end(), Layer);
	if(i != StaticAddedLayerList.end())
	{
		StaticAddedLayerList.erase(i);
	}
	else
	{
		StaticRemovedLayerList.push_back(Layer);
	}

	i = std::find(StaticLayerList.begin(), StaticLayerList.end(), Layer);
	StaticLayerList.erase(i);

	::SendMessage(ListBox, LB_DELETESTRING, Index, 0);

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Moves an existing layer up in the list
//+-----------------------------------------------------------------------------
BOOL WINDOW_MATERIAL_DIALOG::MoveUp(HWND Window)
{
	INT Index;
	HWND ListBox;
	std::stringstream Stream;
	MODEL_MATERIAL_LAYER* Layer;
	std::list<MODEL_MATERIAL_LAYER*>::iterator i;
	std::list<MODEL_MATERIAL_LAYER*>::iterator j;

	ListBox = GetDlgItem(Window, DialogMaterialList);

	Index = static_cast<INT>(::SendMessage(ListBox, LB_GETCURSEL, 0, 0));
	if(Index == LB_ERR) return TRUE;

	if(Index <= 0)
	{
		Error.SetMessage("The material layer is already at the top of the list!");
		return FALSE;
	}

	Layer = reinterpret_cast<MODEL_MATERIAL_LAYER*>(::SendMessage(ListBox, LB_GETITEMDATA, Index, 0));
	if(Layer == NULL) return TRUE;

	i = std::find(StaticLayerList.begin(), StaticLayerList.end(), Layer);
	j = i;
	j--;

	StaticLayerList.insert(j, Layer);
	StaticLayerList.erase(i);

	Stream << "MaterialLayer " << Layer;

	::SendMessage(ListBox, LB_DELETESTRING, Index, 0);
	Index = static_cast<INT>(::SendMessage(ListBox, LB_INSERTSTRING, Index - 1, reinterpret_cast<LPARAM>(Stream.str().c_str())));
	::SendMessage(ListBox, LB_SETITEMDATA, Index, reinterpret_cast<LPARAM>(Layer));

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Moves an existing layer down in the list
//+-----------------------------------------------------------------------------
BOOL WINDOW_MATERIAL_DIALOG::MoveDown(HWND Window)
{
	INT Index;
	HWND ListBox;
	std::stringstream Stream;
	MODEL_MATERIAL_LAYER* Layer;
	std::list<MODEL_MATERIAL_LAYER*>::iterator i;
	std::list<MODEL_MATERIAL_LAYER*>::iterator j;

	ListBox = GetDlgItem(Window, DialogMaterialList);

	Index = static_cast<INT>(::SendMessage(ListBox, LB_GETCURSEL, 0, 0));
	if(Index == LB_ERR) return TRUE;

	if(Index >= static_cast<INT>(::SendMessage(ListBox, LB_GETCOUNT, 0, 0)) - 1)
	{
		Error.SetMessage("The material layer is already at the bottom of the list!");
		return FALSE;
	}

	Layer = reinterpret_cast<MODEL_MATERIAL_LAYER*>(::SendMessage(ListBox, LB_GETITEMDATA, Index, 0));
	if(Layer == NULL) return TRUE;

	i = std::find(StaticLayerList.begin(), StaticLayerList.end(), Layer);
	j = i;
	j++;
	j++;

	StaticLayerList.insert(j, Layer);
	StaticLayerList.erase(i);

	Stream << "MaterialLayer " << Layer;

	::SendMessage(ListBox, LB_DELETESTRING, Index, 0);
	Index = static_cast<INT>(::SendMessage(ListBox, LB_INSERTSTRING, Index + 1, reinterpret_cast<LPARAM>(Stream.str().c_str())));
	::SendMessage(ListBox, LB_SETITEMDATA, Index, reinterpret_cast<LPARAM>(Layer));

	return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
男人操女人的视频在线观看欧美 | 国产精品免费aⅴ片在线观看| 久久午夜老司机| 中文字幕欧美国产| 亚洲精品日韩综合观看成人91| 午夜电影一区二区| 国产成人啪免费观看软件| 一本到不卡免费一区二区| 欧美卡1卡2卡| 久久久av毛片精品| 亚洲精品五月天| 久久精品国内一区二区三区| 成人丝袜高跟foot| 欧美性受xxxx黑人xyx性爽| 日韩免费一区二区| 亚洲视频免费在线观看| 美腿丝袜亚洲三区| 色婷婷精品久久二区二区蜜臂av| 91精品视频网| 亚洲免费观看高清完整版在线| 青青草成人在线观看| av爱爱亚洲一区| 日韩欧美三级在线| 亚洲精品国产高清久久伦理二区| 美日韩一级片在线观看| 色综合天天在线| 精品国产91洋老外米糕| 夜夜嗨av一区二区三区中文字幕| 韩国精品在线观看| 欧美色偷偷大香| 亚洲国产精品成人综合色在线婷婷| 亚洲丰满少妇videoshd| 成人免费视频一区二区| 日韩午夜小视频| 一区二区三区四区乱视频| 国产在线麻豆精品观看| 欧美日韩国产免费| 亚洲欧美综合网| 韩国精品久久久| 6080yy午夜一二三区久久| 综合av第一页| 国产乱子轮精品视频| 欧美精品亚洲一区二区在线播放| 国产精品久久久久久久久免费樱桃 | 亚洲综合丁香婷婷六月香| 国产成人高清在线| 欧美成人aa大片| 视频一区二区欧美| 91国偷自产一区二区三区成为亚洲经典| 国产亚洲精品免费| 狂野欧美性猛交blacked| 欧美日韩综合一区| 亚洲人成小说网站色在线| 国产精品亚洲成人| 精品国产91洋老外米糕| 免费在线欧美视频| 欧美久久高跟鞋激| 亚洲成av人综合在线观看| 在线亚洲高清视频| 亚洲欧洲日韩在线| 成人app在线观看| 国产欧美日韩另类一区| 国产一区二区精品久久91| 欧美不卡一区二区三区四区| 日欧美一区二区| 欧美区一区二区三区| 亚洲超丰满肉感bbw| 欧美综合在线视频| 亚洲乱码国产乱码精品精小说| 波多野结衣精品在线| 国产精品家庭影院| av中文字幕一区| 亚洲欧洲中文日韩久久av乱码| av亚洲精华国产精华精华 | av一区二区三区四区| 国产精品久久久久三级| voyeur盗摄精品| 国产精品成人免费| 99久久精品99国产精品| 综合亚洲深深色噜噜狠狠网站| jlzzjlzz亚洲日本少妇| 中文字幕中文字幕在线一区 | 亚洲欧洲成人自拍| 不卡一区二区三区四区| 国产精品九色蝌蚪自拍| 91在线云播放| 亚洲国产日韩在线一区模特| 欧美日韩亚洲综合一区| 三级精品在线观看| 日韩欧美综合在线| 国产一区二区不卡老阿姨| 国产亚洲欧美日韩日本| jlzzjlzz国产精品久久| 一区二区在线免费| 欧美人牲a欧美精品| 久久精品久久久精品美女| 国产午夜亚洲精品理论片色戒| 成人免费毛片aaaaa**| 国产精品久久久久影院老司| 日本电影亚洲天堂一区| 午夜精品影院在线观看| 日韩手机在线导航| 国产高清在线精品| 亚洲人成7777| 欧美三级电影在线看| 老汉av免费一区二区三区 | aaa亚洲精品| 一区二区三区国产| 91精品国产福利在线观看 | 中文字幕高清一区| 色噜噜久久综合| 青青草国产成人av片免费| 久久久久久99精品| 日本高清免费不卡视频| 久久成人精品无人区| 国产精品人成在线观看免费 | 免费成人在线观看| 国产日韩精品一区| 欧美午夜视频网站| 国产自产高清不卡| 亚洲免费av高清| 日韩精品中午字幕| 91美女视频网站| 久久99最新地址| 亚洲婷婷在线视频| 91精品国产综合久久精品麻豆| 国产91精品免费| 午夜精品免费在线观看| 久久久国产精品午夜一区ai换脸| 色欧美片视频在线观看| 精品一区二区三区免费播放| 国产精品国产三级国产aⅴ中文| 欧美日韩国产大片| 大白屁股一区二区视频| 五月综合激情网| 国产精品久久久久aaaa| 日韩一区二区三区免费看| 99精品在线观看视频| 久久99九九99精品| 亚洲国产综合在线| 中文字幕不卡在线播放| 欧美一区二区三区在线电影| 99久久亚洲一区二区三区青草 | www久久久久| 欧洲av一区二区嗯嗯嗯啊| 国产一区二区三区观看| 午夜精品久久久久久| 国产精品不卡视频| 久久综合国产精品| 91精品国产综合久久久久久久| 一本一本大道香蕉久在线精品| 国产最新精品免费| 秋霞av亚洲一区二区三| 亚洲一区欧美一区| 国产精品成人网| 国产校园另类小说区| 日韩免费看的电影| 欧美丰满高潮xxxx喷水动漫| 91热门视频在线观看| 国产一区二区在线视频| 日韩**一区毛片| 亚洲一区二区三区国产| 亚洲欧洲精品成人久久奇米网| 久久久精品免费免费| 日韩一区二区三区在线视频| 欧美私模裸体表演在线观看| 日本韩国一区二区三区视频| 99久久精品免费精品国产| 国产一区二区三区免费播放| 秋霞av亚洲一区二区三| 丝袜美腿一区二区三区| 亚洲一区二区三区视频在线播放| 亚洲视频资源在线| 中文字幕中文字幕一区| 国产精品视频第一区| 国产午夜精品在线观看| 久久久久88色偷偷免费| 2017欧美狠狠色| 欧美va亚洲va在线观看蝴蝶网| 91精品久久久久久久久99蜜臂| 欧美精三区欧美精三区| 欧美性videosxxxxx| 欧美在线观看18| 欧美在线看片a免费观看| 色欲综合视频天天天| 91丨九色丨国产丨porny| 色综合久久久久久久久| 91理论电影在线观看| 91蝌蚪porny| 欧美午夜片在线观看| 欧美精品在线观看播放| 欧美丰满少妇xxxbbb| 日韩一级黄色片| 精品少妇一区二区三区日产乱码| 欧美成人午夜电影| 精品国产伦一区二区三区观看体验| 精品久久五月天| 久久老女人爱爱| 国产精品亲子乱子伦xxxx裸| 国产精品乱人伦中文|