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

📄 gsuipanel.cpp

📁 网络泡泡被.net管理
💻 CPP
📖 第 1 页 / 共 3 页
字号:
ID CGsUIPanel::OnRButtonDbClk( UINT nFlags, GPOINT point )			
{
	if(FALSE==m_isEnable && FALSE==g_bEditUI)
		return 0;
//	if(m_pDlg)
//	{
//		if(m_pDlg->m_isEnable && m_pDlg->m_isVisible && m_pDlg->IsWorking())
//			return m_pDlg->OnRButtonDbClk(nFlags, point-	m_rcClient.top_left());
//	}
	PANEL_ARRAY::iterator it	= m_panel_array.begin();
	while(it!=m_panel_array.end())
	{
		if((((*it)->m_isEnable && (*it)->m_isVisible)||g_bEditUI) && (*it)->IsWorking())
		{
			ID id = (*it)->OnRButtonDbClk(nFlags, point-	(*it)->m_rcClient.top_left());
			if(id)
			{
				m_isTouch	= TRUE;
				if(FALSE==m_isBackLayer && m_can_move)
					SetTopMost();
				return id;
			}
		}
		it++;
	}
	if(m_isTouch && FALSE==m_isBackLayer && m_can_move)
	{
		SetTopMost();
	}
	if( m_isTouch )
		return m_ID;
	if(g_bEditUI)
	{
		GPOINT pt = point + m_rcClient.top_left();
		GRECT rc = m_rcClient;
		rc.expand(10);
		if(is_point_in_rect(pt, rc))
			return m_ID;
	}
		return 0;
}
ID CGsUIPanel::OnChar( UINT nChar, UINT nRepCnt, UINT nFlags )		
{
	if(FALSE==m_isEnable && FALSE==g_bEditUI)
		return 0;
//	if(m_pDlg)
//	{
//		if(m_pDlg->m_isEnable && m_pDlg->m_isVisible && m_pDlg->IsWorking())
//			return m_pDlg->OnChar(nChar, nRepCnt, nFlags);
//	}
	PANEL_ARRAY::iterator it	= m_panel_array.begin();
	while(it!=m_panel_array.end())
	{

		if((((*it)->m_isEnable && (*it)->m_isVisible)||g_bEditUI) && (*it)->IsWorking())
		{
			ID id = (*it)->OnChar(nChar, nRepCnt, nFlags);
			if(id)
				return id;
		}
		it++;
	}
	if( m_isFocus )
	{
		if(m_isCaption&&m_isCanEdit)
		{
			if(nChar==VK_BACK)
			{
				if(m_caption.size()>0)
				{
					m_caption	= m_caption.erase(m_caption.size()-1, 1);
				}
			}
			else
			{
				m_caption	+= nChar;
			}
			UpdateCaption();
		}
		return m_ID;
	}
	else
		return 0;
}
ID CGsUIPanel::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)		
{
	if(FALSE==m_isEnable && FALSE==g_bEditUI)
		return 0;
//	if(m_pDlg)
//	{
//		if(m_pDlg->m_isEnable && m_pDlg->m_isVisible && m_pDlg->IsWorking())
//			return m_pDlg->OnKeyDown(nChar, nRepCnt, nFlags);
//	}
	PANEL_ARRAY::iterator it	= m_panel_array.begin();
	while(it!=m_panel_array.end())
	{
		if((((*it)->m_isEnable && (*it)->m_isVisible)||g_bEditUI) && (*it)->IsWorking())
		{
			ID id = (*it)->OnKeyDown(nChar, nRepCnt, nFlags);
			if(id)
				return id;
		}
		it++;
	}
	if(m_isFocus)
	{
		if(g_bEditUI)
		{
			switch(nChar)
			{
			case VK_UP:
				m_rcClient -= GPOINT(0,nRepCnt);
				break;
			case VK_DOWN:
				m_rcClient += GPOINT(0,nRepCnt);
				break;
			case VK_LEFT:
				m_rcClient -= GPOINT(nRepCnt,0);
				break;
			case VK_RIGHT:
				m_rcClient += GPOINT(nRepCnt,0);
				break;
			}
		}
		return m_ID;
	}
	return 0;
}
ID CGsUIPanel::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)			
{
	if(FALSE==m_isEnable && FALSE==g_bEditUI)
		return 0;
//	if(m_pDlg)
//	{
//		if(m_pDlg->m_isEnable && m_pDlg->m_isVisible && m_pDlg->IsWorking())
//			return m_pDlg->OnKeyUp(nChar, nRepCnt, nFlags);
//	}
	PANEL_ARRAY::iterator it	= m_panel_array.begin();
	while(it!=m_panel_array.end())
	{
		if((((*it)->m_isEnable && (*it)->m_isVisible)||g_bEditUI) && (*it)->IsWorking())
		{
			ID id = (*it)->OnKeyUp(nChar, nRepCnt, nFlags);
			if(id)
				return id;
		}
		it++;
	}

	if(m_isFocus)
	{
		return m_ID;
	}
	return 0;

}



VOID CGsUIPanel::PickScreenToClient(GPOINT &point)
{
	if(NULL!=m_pParent)
	{
		m_pParent->PickScreenToClient(point);
	}
	point	-= 	m_rcClient.top_left();
}

VOID CGsUIPanel::PickClientToScreen(GPOINT &point)
{
	if(NULL!=m_pParent)
	{
		m_pParent->PickClientToScreen(point);
	}
	point	+= m_rcClient.top_left();
}

VOID CGsUIPanel::SetTopMost()
{
	if(m_pParent)
	{
		m_pParent->_SetCtlTopMost(this);
	}
}
VOID CGsUIPanel::SetBackMost()
{
	if(m_pParent)
	{
		m_pParent->_SetCtlBackMost(this);
	}
}

VOID CGsUIPanel::_SetCtlTopMost(CGsUIPanel *pPanel)
{
	PANEL_ARRAY::iterator	it	= std::find(m_panel_array.begin(), m_panel_array.end(), pPanel);
	if(it==m_panel_array.end())
		return;
	m_panel_array.erase(it);
	m_panel_array.push_front(pPanel);
}


VOID CGsUIPanel::_SetCtlBackMost(CGsUIPanel *pPanel)
{
	PANEL_ARRAY::iterator	it	= std::find(m_panel_array.begin(), m_panel_array.end(), pPanel);
	if(it==m_panel_array.end())
		return;
	m_panel_array.erase(it);
	m_panel_array.push_back(pPanel);

}



LRESULT CGsUIPanel::MsgProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	if(!m_pEngine)
		return 0;
//	if(m_pDlg)
//	{
//		if(m_pDlg->m_isEnable && m_pDlg->m_isVisible && m_pDlg->IsWorking())
//			return m_pDlg->MsgProc(uMsg, wParam, lParam);
//	}
	PANEL_ARRAY::iterator it	= m_panel_array.begin();
	while(it!=m_panel_array.end())
	{
		if((*it)->m_isEnable && (*it)->m_isVisible && (*it)->IsWorking())
			(*it)->MsgProc(uMsg, wParam, lParam);
		it++;
	}


	return 0;
}

BOOL CGsUIPanel::HitTest(GPOINT ptHit)
{
	if(NULL==m_pParent)
		return TRUE;
	m_pParent->PickScreenToClient(ptHit);
	return is_point_in_rect(ptHit, m_rcClient);
}







BOOL CGsUIPanel::HitTest_Touch(GPOINT point)
{
	GPOINT pt = point;
	if(is_point_in_rect(pt, m_rcHeader) || m_isDrag)
	{
		return	 TRUE;
	}
	else
	{
		return	 FALSE;
	}

}

BOOL CGsUIPanel::HitTest_Press(GPOINT point)
{
	return HitTest_Touch(point);
}

BOOL CGsUIPanel::HitTest_Drag(GPOINT point)
{
	return is_point_in_rect(point, m_rcHeader);
}


VOID CGsUIPanel::SetCanMove(BOOL bCanMove)
{
	m_can_move		= bCanMove;


}

VOID CGsUIPanel::SetBackLayer(BOOL bBackLayer)
{
	m_isBackLayer	= bBackLayer;
	if(m_pParent && FALSE==m_pParent->m_isBackLayer)
		m_isBackLayer	= FALSE;

}

VOID CGsUIPanel::SetHeaderRect(const GRECT &rc)
{
	m_rcHeader		= rc;

}

VOID CGsUIPanel::SetSize(const GPOINT &point)
{
	m_rcClient.right = m_rcClient.left + point.x;
	m_rcClient.bottom = m_rcClient.top + point.y;

}

VOID CGsUIPanel::SetImage(const char *strKey, const char *strImage)
{
	if(strKey && KEY("normal")==KEY(strKey))
	{
		m_image_normal.SetGsEngine(m_pEngine);
		m_image_normal.Create(strImage);
		return;
	}
	if(strKey && KEY("normal_touch")==KEY(strKey))
	{
		m_image_normal_touch.SetGsEngine(m_pEngine);
		m_image_normal_touch.Create(strImage);
		return;
	}

}


VOID CGsUIPanel::SetImageNormal(const char* strImage)
{
		m_image_normal.SetGsEngine(m_pEngine);
		m_image_normal.Create(strImage);
		OnTouch(m_isTouch);
}

VOID CGsUIPanel::SetImageNormalTouch(const char* strImage)
{
		m_image_normal_touch.SetGsEngine(m_pEngine);
		m_image_normal_touch.Create(strImage);
		OnTouch(m_isTouch);

}

VOID CGsUIPanel::SetImagePress(const char* strImage)
{
		m_image_press.SetGsEngine(m_pEngine);
		m_image_press.Create(strImage);

}

VOID CGsUIPanel::SetImagePressTouch(const char* strImage)
{
		m_image_press_touch.SetGsEngine(m_pEngine);
		m_image_press_touch.Create(strImage);

}

VOID CGsUIPanel::SetImageSense(const char* strImage)
{
		m_image_sense.SetGsEngine(m_pEngine);
		m_image_sense.Create(strImage);

}
VOID CGsUIPanel::SetImageDisable(const char *strImage)
{
		m_image_disable.SetGsEngine(m_pEngine);
		m_image_disable.Create(strImage);

}

VOID CGsUIPanel::SetSoundTouch(const char* strSound)
{
	SAFE_DELETE(m_sound_touch);
	m_sound_touch	= m_pEngine->FindSound(strSound);
}

VOID CGsUIPanel::SetSoundClick(const char* strSound)
{
	SAFE_DELETE(m_sound_click);
	m_sound_click	= m_pEngine->FindSound(strSound);
}

VOID CGsUIPanel::UpdateState()
{
	if(!IsEnable())
	{
		m_isTouch	= FALSE;
		if(m_image_disable.IsReady())
		{
			m_pImage	= &m_image_disable;
		}
		else
		{
			if(m_isPress || m_isChecked)
			{
				if(m_image_press.IsReady())
					m_pImage	= &m_image_press;
			}
			else
			{
				if(m_image_normal.IsReady())
					m_pImage	= &m_image_normal;
			}
		}
	}
	else
	{
		if(m_isTouch)
		{
			if(m_isPress || m_isChecked)
			{
				if(m_image_press_touch.IsReady())
				{
					m_pImage	= &m_image_press_touch;
				}
				else if(m_image_press.IsReady())
				{
					m_pImage	= &m_image_press;
				}
			}
			else
			{
				if(m_image_normal_touch.IsReady())
				{
//					if(m_sound_touch)
//						m_sound_touch->Play();
					m_pImage	= &m_image_normal_touch;
				}
				else if(m_image_normal.IsReady())
				{
					m_pImage	= &m_image_normal;
				}
			}
		}
		else
		{
			if(m_isPress || m_isChecked)
			{
				if(m_image_press.IsReady())
					m_pImage	= &m_image_press;
			}
			else
			{
				if(m_image_normal.IsReady())
					m_pImage	= &m_image_normal;
			}
		}
	}
	if(m_pImage)
		m_pImage->Play(GS_ANI_PLAY_LOOP);

	PANEL_ARRAY::iterator it	= m_panel_array.end();
	it--;
	while(it!=m_panel_array.end())
	{
		CGsUIPanel*	pPanel	= *it;
		if(pPanel)
			pPanel->UpdateState();
		it--;
	}
	
	//To do: play sound?
}


HRESULT CGsUIPanel::UpdateCaption()
{
	if(m_isCaption)
	{
		m_tex_caption.Clear(0);
		HRESULT hr;
			GRECT rc = m_rcHeader -m_rcHeader.top_left();
// 		m_tex_caption.Clear(m_tex_caption.ConvertColor(D3DRGBA(1.0f, 1.0f, 1.0f, 1.0f)));
//		HFONT font	= CGsFunc::Font_QuickCreateFont(m_font);
		if(m_isNumber)
		{
			hr = m_tex_caption.DrawNumber(m_hfont,
									m_caption.c_str(),
									&rc,
									m_rcHeader.width(),
									m_rcHeader.height(),
									m_align|DT_SINGLELINE|DT_VCENTER,
									m_color,
									RGBA_MAKE(0,0,0,0)
									);

		}
		else
		{
			hr = m_tex_caption.DrawText(m_hfont,
									m_caption.c_str(),
									&rc,
									m_rcHeader.width(),
									m_rcHeader.height(),
									m_align|DT_SINGLELINE|DT_VCENTER,
									m_color,
									RGBA_MAKE(0,0,0,0)
									);
//		DeleteObject(font);
		}
		return hr;
	}
	return S_OK;
}

VOID CGsUIPanel::SetFont()
{
	if(m_hfont)
		DeleteObject(m_hfont);
	m_hfont	= CGsFunc::Font_QuickCreateFont(m_font);
}


HRESULT CGsUIPanel::RestoreSource()
{
	HRESULT hr = m_tex_caption.CreateEx(m_rcHeader.width(), m_rcHeader.height());
	if(FAILED(hr))
		return hr;
	UpdateCaption();
	PANEL_ARRAY::iterator it	= m_panel_array.begin();
	while(it!=m_panel_array.end())
	{
		hr = (*it)->RestoreSource();
		if(FAILED(hr))
			return hr;
		it++;
	}
	return hr;
}

VOID	CGsUIPanel::ReleaseSource()
{
	m_tex_caption.ReleaseObjects();
	PANEL_ARRAY::iterator it	= m_panel_array.begin();
	while(it!=m_panel_array.end())
	{
		(*it)->ReleaseSource();
		it++;
	}
}

VOID	CGsUIPanel::SetCaption(const char* caption)			
{
	m_caption = caption;
	m_isNumber		= FALSE;
	UpdateCaption();
}

VOID	CGsUIPanel::SetCaption(int nValue)
{
	char str[255];
	sprintf(str, "%d", nValue);
	m_caption = str;
	m_isNumber		= TRUE;
	UpdateCaption();

}

⌨️ 快捷键说明

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