📄 gsuipanel.cpp
字号:
{
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 + -