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

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

?? nodemanagerwindow.cpp

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


//+-----------------------------------------------------------------------------
//| Global objects
//+-----------------------------------------------------------------------------
NODE_MANAGER_WINDOW NodeManagerWindow;


//+-----------------------------------------------------------------------------
//| Constructor
//+-----------------------------------------------------------------------------
NODE_MANAGER_WINDOW::NODE_MANAGER_WINDOW()
{
	CurrentlySelectedNode = NULL;
}


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


//+-----------------------------------------------------------------------------
//| Creates a new window
//+-----------------------------------------------------------------------------
BOOL NODE_MANAGER_WINDOW::Create()
{
	WINDOW_TREEVIEW_INFO TreeviewInfo;

	FrameInfo.Title = "Node Manager";
	FrameInfo.Width = DEFAULT_NODE_MANAGER_WINDOW_WIDTH;
	FrameInfo.Height = DEFAULT_NODE_MANAGER_WINDOW_HEIGHT;
	FrameInfo.Style &= (~WS_VISIBLE);
	FrameInfo.Style |= (WS_MAXIMIZEBOX | WS_SIZEBOX);

	if(!WINDOW_FRAME::Create()) return FALSE;

	TreeviewInfo.Parent = Window;

	if(!TreeView.Create(TreeviewInfo)) return FALSE;

	NodeIcon.AssignIconListToTreeView(TreeView.GetWindow());

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Destroys the window
//+-----------------------------------------------------------------------------
VOID NODE_MANAGER_WINDOW::Destroy()
{
	TreeView.Destroy();

	WINDOW_FRAME::Destroy();
}


//+-----------------------------------------------------------------------------
//| Handles the window messages
//+-----------------------------------------------------------------------------
LRESULT NODE_MANAGER_WINDOW::MessageHandler(UINT Message, WPARAM W, LPARAM L)
{
	switch(Message)
	{
		case WM_SIZE:
		case WM_SIZING:
		{
			ResizeTreeView();
			return 0;
		}

		case WM_CLOSE:
		{
			Hide();
			return 0;
		}

		case WM_DESTROY:
		{
			return 0;
		}
	}

	return DefWindowProc(Window, Message, W, L);
}


//+-----------------------------------------------------------------------------
//| Handles the window menu messages
//+-----------------------------------------------------------------------------
LRESULT NODE_MANAGER_WINDOW::MenuHandler(WORD MenuItem)
{
	switch(MenuItem)
	{
		case NodeFileCreateAttachment:
		case NodeFileCreateAttachment2:
		{
			if(!CreateNewAttachment())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case NodeFileCreateBone:
		case NodeFileCreateBone2:
		{
			if(!CreateNewBone())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case NodeFileCreateCollisionShape:
		case NodeFileCreateCollisionShape2:
		{
			if(!CreateNewCollisionShape())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case NodeFileCreateEventObject:
		case NodeFileCreateEventObject2:
		{
			if(!CreateNewEventObject())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case NodeFileCreateHelper:
		case NodeFileCreateHelper2:
		{
			if(!CreateNewHelper())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case NodeFileCreateLight:
		case NodeFileCreateLight2:
		{
			if(!CreateNewLight())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case NodeFileCreateParticleEmitter:
		case NodeFileCreateParticleEmitter2:
		{
			if(!CreateNewParticleEmitter())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case NodeFileCreateParticleEmitter2_1:
		case NodeFileCreateParticleEmitter2_2:
		{
			if(!CreateNewParticleEmitter2())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case NodeFileCreateRibbonEmitter:
		case NodeFileCreateRibbonEmitter2:
		{
			if(!CreateNewRibbonEmitter())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case NodeFileDuplicate:
		case NodeFileDuplicate2:
		{
			if(!Duplicate())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case NodeFileMoveUp:
		case NodeFileMoveUp2:
		{
			if(!MoveUp())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case NodeFileMoveDown:
		case NodeFileMoveDown2:
		{
			if(!MoveDown())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case NodeFileMoveLeft:
		case NodeFileMoveLeft2:
		{
			if(!MoveLeft())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case NodeFileMoveRight:
		case NodeFileMoveRight2:
		{
			if(!MoveRight())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case NodeFileEdit:
		case NodeFileEdit2:
		{
			if(!Edit())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case NodeFileEditNode:
		case NodeFileEditNode2:
		{
			if(!EditNode())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case NodeFileRemove:
		case NodeFileRemove2:
		{
			if(!Remove())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}
	}

	return 0;
}


//+-----------------------------------------------------------------------------
//| Handles the window control messages
//+-----------------------------------------------------------------------------
LRESULT NODE_MANAGER_WINDOW::ControlHandler(HWND Control, WORD Code)
{
	return 0;
}


//+-----------------------------------------------------------------------------
//| Handles the window notify messages
//+-----------------------------------------------------------------------------
LRESULT NODE_MANAGER_WINDOW::NotifyHandler(HWND Control, UINT Code, NMHDR* Header)
{
	if(Control == TreeView.GetWindow())
	{
		NM_TREEVIEW* TreeViewHeader;

		TreeViewHeader = reinterpret_cast<NM_TREEVIEW*>(Header);
		if(TreeViewHeader == NULL) return 0;

		return TreeViewHandler(Code, TreeViewHeader);
	}

	return 0;
}


//+-----------------------------------------------------------------------------
//| Handles the treeview messages
//+-----------------------------------------------------------------------------
LRESULT NODE_MANAGER_WINDOW::TreeViewHandler(UINT Code, NM_TREEVIEW* TreeViewHeader)
{
	TVITEM ItemData;
	POINT MousePosition;
	POINT LocalMousePosition;
	TVHITTESTINFO HitTestInfo;

	GetCursorPos(&MousePosition);
	LocalMousePosition = MousePosition;
	ScreenToClient(TreeView.GetWindow(), &LocalMousePosition);

	switch(Code)
	{
		case NM_DBLCLK:
		{
			if(CurrentlySelectedNode == NULL) return 0;

			ZeroMemory(&HitTestInfo, sizeof(TVHITTESTINFO));
			HitTestInfo.pt = LocalMousePosition;
			if(TreeView_HitTest(TreeView.GetWindow(), &HitTestInfo) == NULL) return 0;
			if(!(HitTestInfo.flags & TVHT_ONITEM)) return 0;

			if(!Edit())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			TreeView_Expand(TreeView.GetWindow(), HitTestInfo.hItem, TVE_TOGGLE);

			return 0;
		}

		case NM_RCLICK:
		{
			INT MenuId;
			HTREEITEM TreeViewItem;

			MenuId = NodeMenu2;
			TreeViewItem = NULL;

			TreeView_SelectItem(TreeView.GetWindow(), NULL);
			CurrentlySelectedNode = NULL;

			while(TRUE)
			{
				ZeroMemory(&HitTestInfo, sizeof(TVHITTESTINFO));
				HitTestInfo.pt = LocalMousePosition;
				if(TreeView_HitTest(TreeView.GetWindow(), &HitTestInfo) == NULL) break;
				if(!(HitTestInfo.flags & TVHT_ONITEM)) break;

				TreeViewItem = HitTestInfo.hItem;
				if(TreeViewItem == NULL) break;

				ZeroMemory(&ItemData, sizeof(TVITEM));
				ItemData.mask = TVIF_PARAM;
				ItemData.hItem = TreeViewItem;
				if(!TreeView_GetItem(TreeView.GetWindow(), &ItemData)) return 0;

				TreeView_SelectItem(TreeView.GetWindow(), TreeViewItem);
				CurrentlySelectedNode = reinterpret_cast<MODEL_BASE*>(ItemData.lParam);
				if(CurrentlySelectedNode == NULL) return 0;

				MenuId = NodeMenu;
				break;
			}

			if(!TrackPopupMenuEx(GetSubMenu(LoadMenu(GetModuleHandle(NULL), MAKEINTRESOURCE(MenuId)), 0),
								 TPM_LEFTALIGN | TPM_RIGHTBUTTON, MousePosition.x, MousePosition.y,
								 Window, NULL))
			{
				Error.SetMessage("Unable to create popup menu!");
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case TVN_SELCHANGED:
		{
			CurrentlySelectedNode = reinterpret_cast<MODEL_BASE*>(TreeViewHeader->itemNew.lParam);
			if(CurrentlySelectedNode == NULL) return 0;

			return 0;
		}
	}

	return 0;
}


//+-----------------------------------------------------------------------------
//| Adds a node
//+-----------------------------------------------------------------------------
VOID NODE_MANAGER_WINDOW::AddNode(MODEL_BASE* Node, HTREEITEM InsertionPoint)
{
	TVINSERTSTRUCT InsertItem;
	HTREEITEM Parent;

	if(Node->ParentNode.IsAttached())
	{
		Parent = Node->ParentNode.GetObjectData()->BaseData()->TreeViewItem;
		if(Parent == NULL) Parent = TVI_ROOT;
	}
	else
	{
		Parent = TVI_ROOT;
	}

	InsertItem.hParent = Parent;
	InsertItem.hInsertAfter = InsertionPoint;

	InsertItem.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
	InsertItem.item.hItem = NULL;
	InsertItem.item.state = 0;
	InsertItem.item.stateMask = 0;
	InsertItem.item.pszText = const_cast<CHAR*>(Node->BaseData()->Name.c_str());
	InsertItem.item.cchTextMax = static_cast<INT>(Node->BaseData()->Name.size());
	InsertItem.item.iImage = NodeIcon.GetIconIndex(Node->BaseData()->Type);
	InsertItem.item.iSelectedImage = InsertItem.item.iImage;
	InsertItem.item.cChildren = 0;
	InsertItem.item.lParam = reinterpret_cast<LPARAM>(Node);

	Node->BaseData()->TreeViewItem = TreeView_InsertItem(TreeView.GetWindow(), &InsertItem);

	TreeView_SelectItem(TreeView.GetWindow(), Node->BaseData()->TreeViewItem);
	CurrentlySelectedNode = Node;
}


//+-----------------------------------------------------------------------------
//| Adds a node and all of its children (and grandchildren etc...)
//+-----------------------------------------------------------------------------
VOID NODE_MANAGER_WINDOW::AddNodeAndChildren(MODEL_BASE* Node, HTREEITEM InsertionPoint)
{
	REFERENCE<MODEL_BASE*, MODEL_BASE*>* CurrentReference;

	AddNode(Node, InsertionPoint);

	CurrentReference = Node->ChildNodes.GetFirstReference();
	while(CurrentReference != NULL)
	{
		AddNodeAndChildren(CurrentReference->GetData(), TVI_LAST);
		CurrentReference = Node->ChildNodes.GetNextReference(CurrentReference);
	}
}


//+-----------------------------------------------------------------------------
//| Removes a node

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91影院在线观看| 欧美激情综合在线| 91豆麻精品91久久久久久| 精品无人码麻豆乱码1区2区| 亚洲免费观看高清| 国产精品三级av| 2024国产精品| 久久综合五月天婷婷伊人| 91麻豆精品91久久久久同性| 在线免费精品视频| 99精品视频在线播放观看| 成人毛片视频在线观看| 久久精品国产久精国产爱| 日日噜噜夜夜狠狠视频欧美人 | youjizz久久| 成人午夜短视频| 国产精品一区免费视频| 精品在线免费观看| 韩国精品主播一区二区在线观看 | 91免费视频网| 91精品福利视频| 青椒成人免费视频| 91麻豆精品秘密| 亚洲精品视频在线观看免费| 久久91精品久久久久久秒播| 精品午夜一区二区三区在线观看| 久久久精品一品道一区| 日韩三级伦理片妻子的秘密按摩| 欧美一区二区三区在线看| 日韩一级视频免费观看在线| 欧美不卡123| 中文字幕乱码日本亚洲一区二区| 国产亚洲短视频| 亚洲激情图片qvod| 日韩国产精品久久| 国产乱码精品一区二区三| 成人性色生活片免费看爆迷你毛片| gogogo免费视频观看亚洲一| 欧美午夜免费电影| 欧美一级国产精品| 国产精品毛片高清在线完整版| 亚洲精品美国一| 麻豆一区二区在线| 91小视频在线观看| 欧美精品一区二| 亚洲一区二区在线观看视频| 精品一区二区成人精品| aaa国产一区| 欧美电影免费观看高清完整版| 中文字幕一区不卡| 免费成人在线网站| 91天堂素人约啪| 国产亚洲女人久久久久毛片| 天天av天天翘天天综合网色鬼国产 | 国产亚洲一区二区在线观看| 一区av在线播放| 成人高清视频免费观看| 日韩西西人体444www| 伊人夜夜躁av伊人久久| 国产精品538一区二区在线| 欧美丰满少妇xxxxx高潮对白| 国产精品久久久久久亚洲伦| 麻豆精品一区二区| 欧美日产在线观看| 亚洲精选在线视频| 97久久精品人人做人人爽50路| 久久综合九色综合97婷婷| 亚洲成av人片在线观看| 91年精品国产| 国产精品成人免费在线| 国产精品一区专区| 日韩精品一区二区三区在线播放 | 欧美三级日韩在线| 亚洲狠狠丁香婷婷综合久久久| 成人精品国产福利| 国产午夜精品久久久久久久| 久久aⅴ国产欧美74aaa| 日韩欧美在线1卡| 奇米一区二区三区| 日韩免费视频一区| 激情小说欧美图片| 久久丝袜美腿综合| 成人黄色av网站在线| 国产精品夫妻自拍| 91在线观看高清| 玉米视频成人免费看| 欧美理论电影在线| 免费的成人av| 国产视频一区二区在线| 成人毛片老司机大片| 亚洲女同女同女同女同女同69| 色综合久久久久综合| 亚洲国产精品视频| 日韩女同互慰一区二区| 黄页网站大全一区二区| 国产精品成人一区二区艾草 | 日韩欧美在线影院| 粉嫩13p一区二区三区| 亚洲免费观看高清完整版在线| 在线看国产一区| 久88久久88久久久| 亚洲欧美在线观看| 欧美肥妇free| 成人毛片视频在线观看| 亚洲v中文字幕| 国产色产综合产在线视频| 色综合久久88色综合天天| 免费高清成人在线| 最近日韩中文字幕| 日韩视频在线你懂得| 国产**成人网毛片九色 | 91国偷自产一区二区开放时间 | 欧美高清在线视频| 欧美日韩一区二区在线观看| 国产精品自拍毛片| 亚洲aaa精品| 亚洲欧洲日本在线| 欧美mv和日韩mv国产网站| 日本电影欧美片| 国产suv一区二区三区88区| 亚洲国产va精品久久久不卡综合| 国产肉丝袜一区二区| 日韩情涩欧美日韩视频| 99久久精品久久久久久清纯| 久久99精品国产91久久来源| 亚洲精品中文字幕乱码三区 | 国产精品自在在线| 美日韩黄色大片| 五月婷婷欧美视频| 亚洲精品欧美激情| 亚洲欧洲成人自拍| 欧美韩国一区二区| 久久九九影视网| 久久久噜噜噜久久中文字幕色伊伊 | 国产成人av电影在线播放| 美国十次综合导航| 蜜臀久久久99精品久久久久久| 亚洲成av人片一区二区三区| 亚洲激情在线播放| 亚洲视频一二三| 亚洲免费视频成人| 亚洲靠逼com| 亚洲高清免费视频| 亚洲第一福利视频在线| 午夜av一区二区| 免费欧美在线视频| 美女脱光内衣内裤视频久久网站 | 97久久精品人人做人人爽50路| 成人黄页在线观看| 99亚偷拍自图区亚洲| 色综合久久99| 欧美日韩精品是欧美日韩精品| 欧美性xxxxx极品少妇| 欧美日韩成人在线| 日韩欧美亚洲一区二区| 久久久精品影视| 中文字幕欧美一| 一区二区三区不卡在线观看| 亚洲综合视频在线观看| 午夜国产精品影院在线观看| 秋霞国产午夜精品免费视频| 国产一区 二区| 99综合影院在线| 7777精品伊人久久久大香线蕉超级流畅 | 久久精品视频免费| 亚洲天堂福利av| 日本美女一区二区| 国产精品99久久久久久久vr| 91在线视频观看| 欧美精品在线观看一区二区| xnxx国产精品| 亚洲成人激情自拍| 国产精品亚洲专一区二区三区| 色婷婷亚洲综合| 日韩一区二区三区视频| 欧美国产乱子伦| 日本aⅴ精品一区二区三区 | 久久99精品久久久久久动态图| www.成人网.com| 日韩欧美国产麻豆| 亚洲精品视频在线观看网站| 国内精品免费**视频| 91久久精品一区二区二区| 久久久99精品久久| 午夜a成v人精品| 日本乱人伦一区| 国产情人综合久久777777| 日韩在线一二三区| 一本到不卡免费一区二区| 精品国产乱码久久久久久图片 | 99久久婷婷国产精品综合| 精品国产乱码久久久久久牛牛| 亚洲成av人片在www色猫咪| 国产69精品久久久久毛片| 波多野结衣欧美| 欧美国产欧美亚州国产日韩mv天天看完整| 天堂资源在线中文精品| 在线影视一区二区三区| 国产精品无遮挡| 成人免费av资源|