⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gsuipanel.cpp

📁 网络泡泡被.net管理
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// GsUIPanel.cpp: implementation of the CGsUIPanel class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
BOOL g_bEditUI	= false;

CGsUIPanel::CGsUIPanel(CGsUIPanel*	pParent)
:m_image_normal(pParent->m_pEngine),
m_image_normal_touch(pParent->m_pEngine),
m_image_press(pParent->m_pEngine),
m_image_press_touch(pParent->m_pEngine),
m_image_disable(pParent->m_pEngine),
m_image_sense(pParent->m_pEngine),
m_tex_caption(pParent->m_pEngine)
{
	m_pParent	= pParent;
	m_pEngine			= pParent->m_pEngine;
	m_rcClient		= GRECT(0,0,0,0);
	m_rcHeader		= GRECT(0,0,0,0);
	m_pDlg			= NULL;
	m_panel_array.clear();


	m_isDrag		= false;

	m_isVisible		= true;
	m_isFocus		= false;
	m_isEnable		= true;

	m_is_checked_style	= true;
	m_isChecked		= false;
	
	m_isTouch		= false;

	m_isPress		= false;
	m_ptBeginDrag	= GPOINT(0,0);

	m_can_move		= false;

	m_key_style				= "panel";

	m_key_base_style		= "panel";

	m_key_config			= "";
	
	m_key_item				= 	"MAIN";

	m_isBackLayer			= true;

	m_sound_touch			= NULL;
	m_sound_click			= NULL;

	m_pImage			= NULL;

	m_isCaption			= FALSE;
	m_isNumber			= FALSE;
	m_isCanEdit			= FALSE;
	m_caption			= "";
	memset(&m_font, 0, sizeof(m_font));
	m_align				= DT_LEFT;
	m_color				= 0;

	m_hfont				= NULL;
	
	m_dwPressTime		= 0;
	m_dwPressCount		= 0;

	m_bk_color			= 0;

}

CGsUIPanel::CGsUIPanel(CGsEngine*	pEngine)
:m_image_normal(pEngine),
m_image_normal_touch(pEngine),
m_image_press(pEngine),
m_image_press_touch(pEngine),
m_image_disable(pEngine),
m_image_sense(pEngine),
m_tex_caption(pEngine)
{
	m_pParent	= NULL;
	m_pEngine			= pEngine;
	m_rcClient		= GRECT(0,0,0,0);
	m_rcHeader		= GRECT(0,0,0,0);
	m_pDlg			= NULL;
	m_panel_array.clear();


	m_isDrag		= false;

	m_isVisible		= false;
	m_isFocus		= false;
	m_isEnable		= true;

	m_is_checked_style	= true;
	m_isChecked		= false;
	
	m_isTouch		= false;

	m_isPress		= false;
	m_ptBeginDrag	= GPOINT(0,0);

	m_can_move		= false;

	m_key_style				= "panel";

	m_key_base_style		= "panel";

	m_key_config			= "";

	m_key_item				= "MAIN";

	m_isBackLayer			= false;

	m_sound_touch			= NULL;
	m_sound_click			= NULL;

	m_pImage			= NULL;

	m_isCaption			= FALSE;
	m_isNumber			= FALSE;
	m_isCanEdit			= FALSE;
	m_caption			= "";
	memset(&m_font, 0, sizeof(m_font));
	m_align				= DT_LEFT;
	m_color				= 0;
	m_hfont				= NULL;
	m_dwPressTime		= 0;
	m_dwPressCount		= 0;
	m_bk_color	= 0;

}

CGsUIPanel::~CGsUIPanel()
{
	Cleanup();
	if(m_pEngine)
	{
		CGsEngine::UI_MAP::iterator it_ = m_pEngine->m_ui_map.find(m_ID);
		if(it_!=m_pEngine->m_ui_map.end())
		{
			m_pEngine->m_ui_map.erase(it_);
		}
	}
}

VOID CGsUIPanel::Cleanup()
{
	if(m_pParent)
	{
		m_pParent->DelSubPanel(this);
	}
	m_pImage	= NULL;
	PANEL_ARRAY::iterator it	= m_panel_array.begin();
	while(it!=m_panel_array.end())
	{
		CGsUIPanel*	pPanel	= *it;
		SAFE_DELETE(pPanel);
		it	= m_panel_array.begin();
	}
//	m_panel_map.clear();
	m_image_normal.Cleanup();
	m_image_normal_touch.Cleanup();
	m_image_press.Cleanup();
	m_image_press_touch.Cleanup();
	m_image_sense.Cleanup();
	m_image_disable.Cleanup();
	SAFE_DELETE(m_sound_touch);
	SAFE_DELETE(m_sound_click);
	if(m_hfont)
		DeleteObject(m_hfont);
	m_hfont = NULL;
	m_tex_caption.Cleanup();
	m_dwPressTime		= 0;
	m_dwPressCount		= 0;

	m_bk_color			= 0;
}

BOOL CGsUIPanel::Restore()
{
	m_rcClient		= GRECT(m_rcClient.top_left(), config.GetPoint(	m_key_item.c_str(), "size"));
	SetVisible(config.GetBOOL(	m_key_item.c_str(), "visible"));
	SetEnable(config.GetBOOL(	m_key_item.c_str(), "enable"));
	m_isFocus		= false;

	m_isTouch		= false;
	m_isPress		= false;
	m_ptBeginDrag	= GPOINT(0,0);
	m_can_move		= config.GetBOOL(	m_key_item.c_str(), "can_move");
	m_rcHeader		= config.GetRect(	m_key_item.c_str(), "header_rect");

	m_isBackLayer	= config.GetBOOL(	m_key_item.c_str(), "back_layer");
	if(m_pParent && FALSE==m_pParent->m_isBackLayer)
		m_isBackLayer	= FALSE;

	m_is_checked_style	= config.GetBOOL(	m_key_item.c_str(), "checked");

	//image
	m_image_normal.SetGsEngine(m_pEngine);
	m_image_normal.Create(config.GetString(	m_key_item.c_str(), "image_normal"));
	m_image_normal_touch.SetGsEngine(m_pEngine);
	m_image_normal_touch.Create(config.GetString(	m_key_item.c_str(), "image_normal_touch"));

	//image
	m_image_press.SetGsEngine(m_pEngine);
	m_image_press.Create(config.GetString(	m_key_item.c_str(), "image_press"));
	m_image_press_touch.SetGsEngine(m_pEngine);
	m_image_press_touch.Create(config.GetString(	m_key_item.c_str(), "image_press_touch"));

	m_image_disable.SetGsEngine(m_pEngine);
	m_image_disable.Create(config.GetString(	m_key_item.c_str(), "image_disable"));

	m_image_sense.SetGsEngine(m_pEngine);
	m_image_sense.Create(config.GetString(	m_key_item.c_str(), "image_sense"));

	m_sound_touch	= m_pEngine->FindSound(config.GetString(	m_key_item.c_str(), "sound_touch"));
	m_sound_click	= m_pEngine->FindSound(config.GetString(	m_key_item.c_str(), "sound_click"));

	m_key_base_style	= config.GetString(m_key_item.c_str(), "style_org");


	//caption
	m_isCaption			= config.GetBOOL(	m_key_item.c_str(), "is_caption");
	m_isCanEdit			= config.GetBOOL(	m_key_item.c_str(), "can_edit");
	m_caption			= config.GetString(	m_key_item.c_str(), "caption");
	m_align				= config.GetLong(	m_key_item.c_str(), "align");
	config.GetFont(m_font, 	m_key_item.c_str(), "font");
	SetFont();
	m_color				= config.GetColor(	m_key_item.c_str(), "color");
	if(m_isCaption && m_rcHeader.width()>0 && m_rcHeader.height()>0)
	{
		m_tex_caption.CreateEx(m_rcHeader.width(), m_rcHeader.height());
		UpdateCaption();
	}
	m_bk_color				= config.GetColor(	m_key_item.c_str(), "bk_color");
//	m_font				= CGsFunc::Font_QuickCreateFont(size_font, config.GetString("FONT", "font") );


	//item
	if(m_key_item=="MAIN")
	{
		for(int i=1;;i++)
		{
			char szSection[20];
			char szItem[100];
			sprintf(szSection, "ITEM_%d", i);
			sprintf(szItem, "item_%d_style", i);
			KEY strStyle	= config.GetString(m_key_item.c_str(), szItem);
			if(strStyle.empty())
				break;
			sprintf(szItem, "item_%d_config", i);
			KEY key_cfg		= config.GetString(m_key_item.c_str(), szItem);
			if(key_cfg=="")
			{
				key_cfg = m_key_config;
			}
			if(key_cfg!=m_key_config)
			{
				sprintf(szSection, "MAIN");
			}
			CGsUIPanel* pSub= m_pEngine->UI_New_Register(this, strStyle);;
			if(pSub==NULL)
			{
				if(g_bEditUI)
				{
					CConfig	cfg;
					sprintf(szItem, "item_%d_config", i);
					m_pEngine->LoadConfig(cfg, config.GetString(m_key_item.c_str(), szItem));
					pSub= m_pEngine->UI_New_Register(this, cfg.GetString(szSection, "style_org"));
					pSub->m_key_style	= strStyle;
				}
				else
				{
				}
			}
//			else
//			{
//				pSub= m_pEngine->UI_New_Register(this, strStyle);
//			}
			if(NULL==pSub)
				break;
			sprintf(szItem, "item_%d_name", i);
			KEY key_name	= config.GetString(m_key_item.c_str(), szItem);
			sprintf(szItem, "item_%d_pos", i);
			if(FALSE==pSub->Create(key_cfg.c_str(),
								   szSection,
								   config.GetPoint(m_key_item.c_str(), szItem),
								   key_name.c_str()))
			{
			}
		}
	}

	SetTopMost();
	OnTouch(m_isTouch);
	return TRUE;
}

BOOL CGsUIPanel::Create(const char* strConfig, LPCSTR strItem, GPOINT point, const char* strName)
{
	if (strConfig==m_key_config)
	{
		return TRUE;
	}
	Cleanup();
	if(m_pParent)
	{
		m_pEngine	= m_pParent->m_pEngine;
		m_pParent->AddSubPanel(this);
	}
	if(NULL==m_pEngine)
	{
		return FALSE;
	}

	for(int id=100; id<9999; id++)
	{
		if(m_pEngine->m_ui_map.find(id)==m_pEngine->m_ui_map.end())
		{
			m_ID	= id;
			m_pEngine->m_ui_map.insert(CGsEngine::UI_MAP::value_type(m_ID, this));
			break;
		}
	}
	
	m_rcClient.left	= point.x;
	m_rcClient.top	= point.y;

	if(strConfig==NULL)
		return TRUE;

	m_pEngine->LoadConfig(config, strConfig);

	m_key_config	= strConfig;
	
	if(m_key_config=="")
		return TRUE;

	if(strName==NULL || strName[0]==0)
		m_key	= strConfig;
	else
		m_key	= strName;
//	config.SetINIFile(strConfig);

	m_key_item	= strItem;

	m_rcClient		= GRECT(point, GPOINT(0,0));

	return Restore();
}

BOOL CGsUIPanel::SaveConfig(const char *strConfig)
{
	if(strConfig)
	{
		FILE* file= fopen(strConfig, "w");
		if(NULL==file)
		{
			return FALSE;
		}
		fclose(file);
		CConfig cfg(strConfig);
		return OnSaveConfig(cfg);
	}
	else
	{
		return OnSaveConfig(config);
	}
}

BOOL CGsUIPanel::OnSaveConfig(CConfig &cfg)
{
	//cfg.SetINIFile(config.GetINIFile());
	if(!cfg.WriteString("UI", "GLOBALS", "config"))
		return FALSE;
	if(!cfg.WriteString(m_key_base_style.c_str(), m_key_item.c_str(), "style_org"))
		return FALSE;

	if(!cfg.WritePoint(GPOINT(m_rcClient.width(), m_rcClient.height()), 	m_key_item.c_str(), "size"))
		return FALSE;
	if(!cfg.WriteBOOL(m_isVisible, 	m_key_item.c_str(), "visible"))
		return FALSE;
	if(!cfg.WriteBOOL(m_isEnable, 	m_key_item.c_str(), "enable"))
		return FALSE;
	if(!cfg.WriteBOOL(m_can_move, 	m_key_item.c_str(), "can_move"))
		return FALSE;
	if(!cfg.WriteRect(m_rcHeader, 	m_key_item.c_str(), "header_rect"))
		return FALSE;
	if(!cfg.WriteBOOL(m_isBackLayer, 	m_key_item.c_str(), "back_layer"))
		return FALSE;
	if(!cfg.WriteString(m_image_normal.GetKey(), m_key_item.c_str(), "image_normal"))
		return FALSE;
	if(!cfg.WriteString(m_image_normal_touch.GetKey(), m_key_item.c_str(), "image_normal_touch"))
		return FALSE;

	if(!cfg.WriteBOOL(m_is_checked_style, 	m_key_item.c_str(), "checked"))
		return FALSE;

	if(!cfg.WriteString(m_image_press.GetKey(), m_key_item.c_str(), "image_press"))
		return FALSE;
	if(!cfg.WriteString(m_image_press_touch.GetKey(), m_key_item.c_str(), "image_press_touch"))
		return FALSE;
	if(!cfg.WriteString(m_image_disable.GetKey(), m_key_item.c_str(), "image_disable"))
		return FALSE;
	
	if(!cfg.WriteString(m_image_sense.GetKey(), m_key_item.c_str(), "image_sense"))
		return FALSE;

	if(!cfg.WriteString((m_sound_touch)?m_sound_touch->GetKey():"", m_key_item.c_str(), "sound_touch"))
		return FALSE;
	if(!cfg.WriteString((m_sound_click)?m_sound_click->GetKey():"", m_key_item.c_str(), "sound_click"))
		return FALSE;

	cfg.WriteBOOL(m_isCaption, 	m_key_item.c_str(), "is_caption");
	cfg.WriteBOOL(m_isCanEdit, 	m_key_item.c_str(), "can_edit");
	cfg.WriteString(m_caption.c_str(), 	m_key_item.c_str(), "caption");
	cfg.WriteLong(m_align, 	m_key_item.c_str(), "align");
	cfg.WriteFont(m_font, 	m_key_item.c_str(), "font");
	cfg.WriteColor(m_color, 	m_key_item.c_str(), "color");
	cfg.WriteColor(m_bk_color, 	m_key_item.c_str(), "bk_color");


//	if(m_panel_array.size()>0)
	{
		PANEL_ARRAY::iterator it	= m_panel_array.begin();
		int i=1;
		while(it!=m_panel_array.end())
		{
			CGsUIPanel*	pPanel	= *it;

			char szSection[20];
			sprintf(szSection, "ITEM_%d", i);
			char szItem[100];
			sprintf(szItem, "item_%d_style", i);
			if(!cfg.WriteString(pPanel->GetStyle(), "MAIN", szItem))
				return FALSE;
			sprintf(szItem, "item_%d_config", i);
			if(pPanel->m_key_item=="MAIN")
			{
				if(!cfg.WriteString(pPanel->GetConfig(), "MAIN", szItem))
					return FALSE;
			}
			else
			{
				if(!cfg.WriteString("", "MAIN", szItem))
					return FALSE;
			}
			sprintf(szItem, "item_%d_pos", i);
			if(!cfg.WritePoint(pPanel->m_rcClient.top_left(), "MAIN", szItem))
				return FALSE;
			sprintf(szItem, "item_%d_name", i);
			if(!cfg.WriteString(pPanel->GetName(), "MAIN", szItem))
				return FALSE;
			
			pPanel->SaveConfig();

			it++;
			i++;
		}
		{
			char szItem[100];
			sprintf(szItem, "item_%d_style", i);
			if(!cfg.WriteString("", "MAIN", szItem))
				return FALSE;
			sprintf(szItem, "item_%d_config", i);
			if(!cfg.WriteString("", "MAIN", szItem))
				return FALSE;
			sprintf(szItem, "item_%d_pos", i);
			if(!cfg.WritePoint(GPOINT(0,0), "MAIN", szItem))
				return FALSE;
			sprintf(szItem, "item_%d_name", i);
			if(!cfg.WriteString("", "MAIN", szItem))
				return FALSE;
		}
	}
//	else
//	{
//	}


	return TRUE;
}


VOID CGsUIPanel::AddSubPanel(CGsUIPanel *pPanel)
{
	assert(m_pEngine);
	if(pPanel==NULL || std::find(m_panel_array.begin(), m_panel_array.end(), pPanel)!=m_panel_array.end())
		return;
	m_panel_array.push_front(pPanel);

//	for(int i=100; i<9999; i++)
//	{
//		if(m_pEngine->m_ui_map.find(i)==m_pEngine->m_ui_map.end())
//		{
//			pPanel->m_ID	= i;
//			m_pEngine->m_ui_map.insert(CGsEngine::UI_MAP::value_type(pPanel->m_ID, pPanel));
//			break;
//		}
//	}


//	m_panel_map.insert(PANEL_MAP::value_type(pPanel->m_key, pPanel));
}

VOID CGsUIPanel::DelSubPanel(CGsUIPanel *pPanel)
{
//	m_panel_map.erase(pPanel->m_key);
	PANEL_ARRAY::iterator		it = std::find(m_panel_array.begin(), m_panel_array.end(), pPanel);
	if(pPanel==NULL || it==m_panel_array.end())
		return;
	m_panel_array.erase(it);
	CGsEngine::UI_MAP::iterator it_ = m_pEngine->m_ui_map.find(pPanel->m_ID);
	if(it_==m_pEngine->m_ui_map.end())
	{
		m_pEngine->m_ui_map.erase(it_);
	}
}

HRESULT CGsUIPanel::Draw(GPOINT point)
{
	HRESULT hr;
	if(NULL==m_pEngine)
	{
		Cleanup();
		return S_OK;
	}

	if(FAILED(hr = OnDraw(point)))
		return hr;
	if(g_bEditUI)
	{
		GRECT rc = m_rcClient - m_rcClient.top_left() + point;
		rc.expand(10);
		if(m_isFocus)
			m_pEngine->Render_DrawRect(&rc, false, D3DRGBA(0.0f, 1.0f, 0.0f, 0.5f), m_isBackLayer ? 1.0f : 0.0f);
		else
			m_pEngine->Render_DrawRect(&rc, false, D3DRGBA(1.0f, 0.0f, 0.0f, 0.5f), m_isBackLayer ? 1.0f : 0.0f);

	}
	PANEL_ARRAY::iterator it	= m_panel_array.end();
	it--;
	while(it!=m_panel_array.end())
	{
		CGsUIPanel*	pPanel	= *it;
		if(pPanel->m_isVisible||g_bEditUI)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -