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

📄 gsuipanel.cpp

📁 网络泡泡被.net管理
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		{
			if(pPanel->OnUpdate()<0)
			{
				it	= m_panel_array.erase(it);
				SAFE_DELETE(pPanel);
			}
			if(pPanel->IsVisible()||g_bEditUI)
				hr = pPanel->Draw(point + pPanel->m_rcClient.top_left());
			if(FAILED(hr))
				return hr;
		}
		it--;
	}
	return S_OK;
}

HRESULT CGsUIPanel::OnDraw(GPOINT point)
{
	if(m_bk_color>0)
	{
		GRECT rc = m_rcClient - m_rcClient.top_left() + point;
		m_pEngine->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
		m_pEngine->Render_DrawRect(&rc, TRUE, m_bk_color, m_isBackLayer ? 0.99f : 0.0f);
		if(m_isCanEdit)
		{
			if(m_isFocus)
			{
				float fv = m_pEngine->ValueCycle(0.5f, 1,0,300);
				int r = (255)*fv;
				int g = (255)*fv;
				int b = (255)*fv;
				D3DCOLOR cr = RGBA_MAKE(r, g, b, 255);
				m_pEngine->Render_DrawRect(&rc, FALSE, cr, m_isBackLayer ? 0.99f : 0.0f);
			}
			else if(m_isTouch)
			{
				D3DCOLOR cr = RGBA_MAKE(255, 255, 255, 255);
				m_pEngine->Render_DrawRect(&rc, FALSE, cr, m_isBackLayer ? 0.99f : 0.0f);
			}
		}
		m_pEngine->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE2X);
	}
	if(m_pImage)
	{
		if (!m_isEnable && !m_image_disable.IsReady())
			m_pImage->Draw(point.x, point.y, m_isBackLayer ? 0.99f : 0.0f, 1.0f, 1.0f, 0.5f);
		else
			m_pImage->Draw(point.x, point.y, m_isBackLayer ? 0.99f : 0.0f);
	}
	else
	{
		if(!m_isCaption)
		{
			GRECT rc = m_rcClient - m_rcClient.top_left() + point;
			m_pEngine->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
			if (!m_isEnable)
			{
				m_pEngine->Render_LightRect(&rc, 0.7f);
 				m_pEngine->PreparePaint();
			}
			else 
			{
				float fr= m_pEngine->ValueCycle(1.0f, 2.0f, 0, 100);
				if (m_isTouch)
				{
					m_pEngine->Render_DrawRect(&rc, FALSE, D3DRGBA(1.0f, 1.0f, 1.0f, 1.0f), m_isBackLayer ? 0.99f : 0.0f);
				}
				if (m_isPress || m_isChecked)
				{
					m_pEngine->Render_LightRect(&rc, 1.5f);
 					m_pEngine->PreparePaint();
				}
			}
			m_pEngine->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE2X);
		}
	}
	if(m_isCaption)
	{
		m_pEngine->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTFN_POINT );
		m_pEngine->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTFN_POINT );
// 		m_pEngine->PreparePaint();
//		UpdateCaption();
//		if (m_isTouch)
//			m_pEngine->Render_PaintFast(point.x + m_rcHeader.left, point.y + m_rcHeader.top, &m_tex_caption, m_isBackLayer ? 1.0f : 0.0f, 1.0f, 1.0f, 1.0f, D3DRGBA(1.0F, 1,0F, 1,0F, 1.0F));
//		else
			m_pEngine->Render_PaintFast(point.x + m_rcHeader.left, point.y + m_rcHeader.top, &m_tex_caption, m_isBackLayer ? 1.0f : 0.0f);
	}
	return S_OK;
}

LONG CGsUIPanel::OnUpdate()
{
//	if(m_isTouch && m_image_normal_touch.IsReady())
	if(m_pImage)
		m_pImage->Update();

	if(m_isPress)
	{
		m_dwPressTime		+= m_pEngine->m_dwPassTime;
		if(m_dwPressCount==0 && m_dwPressTime>6000)
		{
			m_dwPressCount = 1;
			m_dwPressTime		= 0;
			PostMessage(m_pEngine->m_hWnd, UI_CMD_PRESS, m_ID, 0);
		}
		else if(m_dwPressTime>1000)
		{
			m_dwPressCount++;
			m_dwPressTime		= 0;
			PostMessage(m_pEngine->m_hWnd, UI_CMD_PRESS, m_ID, 0);
		}
	}
	else
	{
		m_dwPressTime		= 0;
		m_dwPressCount		= 0;
	}
//	m_image_normal.Update();
//	m_image_normal_touch.Update();
	return 0;
}


VOID CGsUIPanel::CloseDialog()			
{
	m_pDlg		= NULL;
	return;
}

BOOL CGsUIPanel::IsVisible()							
{
	if(m_pParent)
	{
		return (m_isVisible && m_pParent->IsVisible());
	}
	else
	{
		return TRUE;
	}
	return m_isVisible;
}
BOOL CGsUIPanel::IsEnable()							
{
	if(m_pParent)
	{
		return (m_isEnable && m_pParent->IsEnable());
	}
	return m_isEnable;
}
BOOL CGsUIPanel::IsWorking()
{
	if(m_pParent)
	{
		return (true && m_pParent->IsWorking());
	}
	return true;
}


VOID CGsUIPanel::SetFocus(BOOL bFocus)				
{
	m_isFocus = bFocus;
	//if(m_pParent)
	//	m_pParent->SetFocus();
}
VOID CGsUIPanel::SetChecked(BOOL bChecked)			
{
	m_isChecked = bChecked;
	UpdateState();
}

VOID CGsUIPanel::SetEnable(BOOL bEnable)				
{
	BOOL bOld	= m_isEnable;
	m_isEnable	= bEnable;
	if(FALSE==m_isEnable)
	{
		m_isTouch	= FALSE;
	}
	if(bOld!=m_isEnable)
	{
		UpdateState();
	}
}

VOID CGsUIPanel::OnTouch(BOOL bTouch)
{
	if(bTouch && m_sound_touch)
		m_sound_touch->Play();
	UpdateState();


}

VOID CGsUIPanel::OnClick()
{
	if(m_pEngine)
		PostMessage(m_pEngine->m_hWnd, UI_CMD_CLICK, m_ID, 0);
}

ID CGsUIPanel::OnMouseMove( UINT nFlags, GPOINT point )					
{ 
	if(FALSE==m_isEnable && FALSE==g_bEditUI)
		return 0;
	BOOL bTouch	= FALSE;
//	if(m_pDlg)
//	{
//		if(m_pDlg->m_isEnable && m_pDlg->m_isVisible && m_pDlg->IsWorking())
//		{
//			return m_pDlg->OnMouseMove(nFlags, point-	m_rcClient.top_left());
//		}
//		return FALSE;
//	}

	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)->OnMouseMove(nFlags, point-	(*it)->m_rcClient.top_left());
			if( id )
			{
				bTouch	= TRUE;
				return id;
			}
		}
		it++;
	}

	GPOINT	pt;//	= point + m_rcClient.top_left();
//	if(is_point_in_rect(pt, m_rcClient) || m_isDrag)
//	{
//		bTouch	= TRUE;
//	}

	pt = point;
	PickClientToScreen(pt);
	if((m_can_move||g_bEditUI) && m_isDrag && MK_LBUTTON==nFlags)
	{
		m_rcClient += pt-m_ptBeginDrag;
		m_ptBeginDrag	= pt;
		return TRUE;
	}
	
	if(HitTest_Touch(point))
	{
		bTouch	= TRUE;
	}

	if(m_isTouch!=bTouch )
	{
		m_isTouch	= bTouch;
		OnTouch(bTouch);
	}

	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::OnMouseWheel( UINT nFlags, short zDelta, 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->OnMouseWheel(nFlags, zDelta, point-	m_rcClient.top_left());
//	}
//	BOOL	bRet;
	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)->OnMouseWheel(nFlags, zDelta, point-	(*it)->m_rcClient.top_left());
			if(id)
				return id;
		}
		it++;
	}

	if( m_isFocus )
		return m_ID;
	else
		return 0;
}
ID CGsUIPanel::OnLButtonDown( 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->OnLButtonDown(nFlags, point-	m_rcClient.top_left());
//	}
	BOOL bPress	= m_isPress;
	
	PANEL_ARRAY::iterator it	= m_panel_array.begin();
	CGsUIPanel* pPanel_focus	= NULL;
	while(it!=m_panel_array.end())
	{
		if((*it)->m_isFocus==TRUE)
		{
			pPanel_focus	= *it;
			pPanel_focus->m_isFocus	= FALSE;
			break;
		}
		it++;
	}
	it	= m_panel_array.begin();
	while(it!=m_panel_array.end())
	{
//		CGsUIPanel* p = *it;
		if((((*it)->m_isEnable && (*it)->m_isVisible)||g_bEditUI) && (*it)->IsWorking())
		{
			ID id = (*it)->OnLButtonDown(nFlags, point-	(*it)->m_rcClient.top_left());
			if(id)
			{
				if(FALSE==m_isBackLayer && m_can_move)
					SetTopMost();
				//m_isFocus	= TRUE;
				return id;
			}
		}
		it++;
	}
	if(m_isTouch && FALSE==m_isBackLayer && m_can_move)
	{
		SetTopMost();
	}
	m_isPress	= HitTest_Press(point);

	if(bPress!=m_isPress)
		UpdateState();

	m_isDrag	= HitTest_Drag(point);
	GPOINT pt = point + m_rcClient.top_left();
	GRECT rc = m_rcClient;
	rc.expand(10);
	if(g_bEditUI && is_point_in_rect(pt, rc))
	{
		m_isDrag	= TRUE;
//		m_isTouch	= TRUE;
	}
	m_isFocus	= m_isDrag || m_isPress;
	if(m_isFocus==FALSE&&pPanel_focus!=NULL)
	{
		pPanel_focus->m_isFocus	= TRUE;
	}
	m_ptBeginDrag	= point;
	PickClientToScreen(m_ptBeginDrag);
	if( m_isTouch || m_isDrag )
		return m_ID;
	else
		return 0;
}

ID CGsUIPanel::OnLButtonUp( 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->OnLButtonUp(nFlags, point-	m_rcClient.top_left());
//	}
//	m_isPress	= FALSE;
	m_isDrag	= false;

	if(m_isPress && HitTest_Press(point))
	{
		if(m_is_checked_style)
		{
			m_isChecked	^= 1;
		}
		if(m_sound_click)
			m_sound_click->Play();
		OnClick();
	}
	if(m_isPress)
	{
		m_isPress	= FALSE;
		UpdateState();
	}
	ID id=0;
	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 = (*it)->OnLButtonUp(nFlags, point-	(*it)->m_rcClient.top_left());
		}
		it++;
	}
	if(id)
	{
		if(FALSE==m_isBackLayer && m_can_move)
			SetTopMost();
		return id;
	}
	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::OnLButtonDbClk( 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->OnLButtonDbClk(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)->OnLButtonDbClk(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))
		{
			if(m_pEngine)
				PostMessage(m_pEngine->m_hWnd, UI_CMD_DBCLK, m_ID, 0);
			return m_ID;
		}
	}
		return 0;
}
ID CGsUIPanel::OnRButtonDown( 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->OnRButtonDown(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)->OnRButtonDown(nFlags, point-	(*it)->m_rcClient.top_left());
			if(id)
			{
				m_isTouch	= TRUE;
				if(FALSE==m_isBackLayer && m_can_move)
					SetTopMost();
				return TRUE;
			}
		}
		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::OnRButtonUp( 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->OnRButtonUp(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)->OnRButtonUp(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;
}

⌨️ 快捷键说明

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