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