📄 pmpdesktop.cpp
字号:
#include "gpmp.h"
#include "pmpdesktop.h"
LRESULT CPMPDesktop::MsgProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_ACTIVECONTROL:
OnActiveControl(PWND(wParam),PWND(lParam));
break;
case WM_COMMAND:
OnCommand(PWND(wParam),lParam);
break;
case WM_GETSYSMETRICS:
wParam=OnGetSysMetrics(wParam,lParam);
break;
case WM_CREATE:
RemoveStyle(WS_CLIPSIBLINGS);
break;
default:
wParam=CDesktop::MsgProc(message,wParam,lParam);
}
return wParam;
}
BOOL CPMPDesktop::Create(CThread* pThread,CDisplay* pDisplay,CDrvMouse* pMouse,CDrvKeyboard* pKeyboard)
{
CDesktop::Create(pThread,pDisplay,pMouse,pKeyboard);
m_pCharSet=new CChsCharSet();
m_pCharSet->SetFontFace(new CChsFontFace());
m_font.CreateFont(0);
m_dcOwnDC.SelectObject(&m_font);
m_pActiveDlg=NULL;
CRect r;
GetItemRect(0,r);m_item[0].Create(g_bmpVideo,"视频",r);
GetItemRect(1,r);m_item[1].Create(g_bmpMusic,"音乐",r);
GetItemRect(2,r);m_item[2].Create(g_bmpCamera,"照相机",r);
GetItemRect(3,r);m_item[3].Create(g_bmpGame,"游戏",r);
GetItemRect(4,r);m_item[4].Create(g_bmpEBook,"电子书",r);
GetItemRect(5,r);m_item[5].Create(g_bmpFolder,"文件夹",r);
GetItemRect(6,r);m_item[6].Create(g_bmpTV,"电视",r);
GetItemRect(7,r);m_item[7].Create(g_bmpRadio,"收音机",r);
GetItemRect(8,r);m_item[8].Create(g_bmpSetting,"设置",r);
GetClientRect(r);
r.bottom=r.top+20;
m_barTitle.Create(r,this);
r.bottom=GetClientRect().bottom;
r.top=r.bottom-20;
m_barOP.Create(r,this);
return TRUE;
}
void CPMPDesktop::GetItemRect(int i,CRect& r)
{
CSize size=GetClientRect().Size();
size.cy-=40;
if(size.cy>size.cx)
{
size.cx/=3;size.cy/=3;
r.top=20+(i/3)*size.cy;
r.bottom=r.top+size.cy;
r.left=(i%3)*size.cx;
r.right=r.left+size.cx;
}
else
{
size.cx/=4;size.cy/=2;
r.top=20+(i/4)*size.cy;
r.bottom=r.top+size.cy;
r.left=(i%4)*size.cx;
r.right=r.left+size.cx;
}
}
void CPMPDesktop::OnActiveControl(CWnd* pOld,CWnd* pNew)
{
DWORD nStyle=WS_PARENT|WS_MODALDLG;
if(pNew &&
((pNew->GetStyle()&nStyle)==nStyle))
{
m_pActiveDlg=PDIALOG(pNew);
m_barTitle.SetAppInfo(NULL,pNew->GetWindowText());
}
else
m_barTitle.SetAppInfo(NULL,"权智掌上媒体");
}
int CPMPDesktop::OnGetSysMetrics(WPARAM wParam, LPARAM lParam)
{
switch(wParam)
{
case SM_DlgMaxmizeRect:
GetClientRect(LPRECT(lParam));
LPRECT(lParam)->top+=20;
LPRECT(lParam)->bottom-=20;
break;
default:
wParam=CDesktop::OnGetSysMetrics(wParam,lParam);
break;
}
return wParam;
}
void CPMPDesktop::OnCommand(CWnd* pWnd,int nCmd)
{
CFileBrowser dlg;
dlg.DoModal();
}
LRESULT CPdItem::MsgProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_PAINT:
OnPaint(PDC(wParam));
break;
default:
wParam=CButton::MsgProc(message,wParam,lParam);
}
return wParam;
}
void CPdItem::Create(PCVOID pBmpRes,LPCTSTR pszText,LPCRECT pRect)
{
CButton::Create(pszText,WS_SCRBKGND,pRect,g_pDesktop);
m_bmp.CreateBitmap(PBITMAPFILEHEADER(pBmpRes),&g_pDesktop->m_dcOwnDC);
}
void CPdItem::OnPaint(CDC* pDC)
{
CRect r;
DWORD clr0,clr=GetStyle();
CSize size;
GetClientRect(r);
r.top+=16;
r.bottom=r.top+32;
DrawBitmap(pDC,r,&m_bmp,BS_ICON|(clr&BS_STATEMASK));
r.top=r.bottom+8;
clr0=GetCtlColor((GetStyle()&WS_FOCUSED)?COLOR_HIGHLIGHT:COLOR_WINDOW);
if(!(GetStyle()&BS_PUSHED))
clr0|=128<<24;
clr=GetCtlColor((GetStyle()&WS_FOCUSED)?COLOR_HIGHLIGHTTEXT:COLOR_WINDOWTEXT);
clr=pDC->SetTextColor(clr);
clr0=pDC->SetBkColor(clr0);
pDC->DrawText(this,r,DT_TOP|DT_WORDBREAK);
pDC->SetBkColor(clr0);
pDC->SetTextColor(clr);
}
LRESULT CPdIcon::MsgProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_PAINT:
OnPaint(PDC(wParam));
break;
default:
wParam=CButton::MsgProc(message,wParam,lParam);
}
return wParam;
}
void CPdIcon::OnPaint(CDC* pDC)
{
CRect r;
DWORD clr0,clr=GetStyle();
SIZE size;
GetClientRect(r);
clr=GetStyle();
size=pDC->GetTextExtent(GetWindowText(),GetWindowTextLength());
size.cx+=22;
size.cy=r.right;
if(clr & BS_RIGHT)
r.left=r.right-size.cx;
else if(!(clr & BS_LEFT))
r.left=(r.left+r.right-size.cx)>>1;
r.left+=2;
r.right=r.left+16;
DrawBitmap(pDC,r,&m_bmp,BS_ICON|BS_ZOOMOUT|(clr&BS_STATEMASK));
r.left=r.right+2;
r.right=size.cy;
clr=(GetStyle()&WS_FOCUSED)?COLOR_HIGHLIGHTTEXT:COLOR_WINDOWTEXT;
clr=GetCtlColor(clr);
clr=pDC->SetTextColor(clr);
clr0=pDC->SetBkColor(CLR_NONE);
pDC->DrawText(this,r,DT_LEFT);
pDC->SetTextColor(clr);
pDC->SetBkColor(clr0);
}
void CPdIcon::SetInfo(LPCVOID pBmpRes,LPCTSTR pszText)
{
if(pBmpRes)
{
m_bmp.DeleteObject();
m_bmp.CreateBitmap(PBITMAPFILEHEADER(pBmpRes),&g_pDesktop->m_dcOwnDC);
}
SetWindowText(pszText);
}
void CPdTitleBar::Create(LPCRECT pRect,CPWnd* pParent)
{
CRect r(pRect);
PDC pDC;
int x;
CPWnd::Create(WS_HALFSCRBKGND|WS_TOPWND,r,pParent);
pDC=GetDC();
r.SetRect(CPoint(0,0),r.Size());
x=r.right-52;
r.SetRect(CPoint(x,0),CSize(50,20));
m_btnTime.Create("12:00",WS_TRANSPARENT|WS_NOBKGND|BS_OWNERDRAW,r,this);
x-=20;
r.SetRect(CPoint(x,0),CSize(16,20));
m_btnVolume.Create(WS_TRANSPARENT|WS_NOBKGND|BS_ICON,r,this);
m_btnVolume.SetBitmap(&m_bmpVolume);
m_bmpVolume.CreateBitmap(PBITMAPFILEHEADER(g_bmpVolume),pDC);
x-=24;
r.SetRect(CPoint(x,0),CSize(20,20));
m_btnBattery.Create(WS_TRANSPARENT|WS_NOBKGND|BS_ICON,r,this);
m_btnBattery.SetBitmap(&m_bmpBattery);
m_bmpBattery.CreateBitmap(PBITMAPFILEHEADER(g_bmpBattery),pDC);
r.SetRect(CPoint(pRect->left,0),CSize(x,20));
m_btnApp.Create(WS_TRANSPARENT|BS_LEFT|WS_NOBKGND,r,this);
SetAppInfo(g_bmpHome,"权智掌上媒体");
SetTimer(8001,1000,PriorityIdle);
}
LRESULT CPdTitleBar::MsgProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_CTLCOLOR:
switch(lParam)
{
case COLOR_WINDOWTEXT:
wParam=RGB(255,255,255);
break;
case COLOR_WINDOW:
wParam=RGB(0,64,255);
break;
case COLOR_HIGHLIGHTTEXT:
wParam=RGB(255,255,0);
break;
default:
wParam=CPWnd::MsgProc(message,wParam,lParam);
}
break;
case WM_TIMER:{
CString str;
LONG nTick=GetTickCount()/1000;
str.Format("%02d:%02d",(nTick/60)%60,nTick%60);
m_btnTime.SetWindowText(str);
}break;
case WM_DRAWITEM:{
CRect r;
PDC pDC=PDC(lParam);
m_btnTime.GetClientRect(r);
wParam=pDC->SetBkColor(CLR_NONE);
lParam=(m_btnTime.GetStyle()&WS_FOCUSED)?RGB(255,255,0):RGB(255,255,255);
lParam=pDC->SetTextColor(lParam);
pDC->DrawText(m_btnTime.GetWindowText(),
m_btnTime.GetWindowTextLength(),r,0);
pDC->SetTextColor(lParam);
pDC->SetBkColor(wParam);
}break;
case WM_COMMAND:
if(wParam==WPARAM(&m_btnApp))
{
CPMPDesktop* pScr=(CPMPDesktop*)GetDesktopWindow();
if(pScr->m_pActiveDlg)
{
pScr->m_pActiveDlg->PostMessage(WM_QUIT,IDCANCEL,0);
pScr->m_pActiveDlg=NULL;
}
}
break;
case WM_PAINT:
break;
default:
wParam=CPWnd::MsgProc(message,wParam,lParam);
}
return wParam;
}
void CPdTitleBar::SetAppInfo(LPCVOID pBmpRes,LPCTSTR pszText)
{
m_btnApp.SetInfo(pBmpRes,pszText);
}
void CPdTitleBar::SetBattery(int nLevel)
{
m_bmpBattery.DeleteObject();
m_bmpBattery.CreateBitmap(PBITMAPFILEHEADER(g_bmpBattery),&g_pDesktop->m_dcOwnDC);
Invalidate(NULL);
}
void CPdTitleBar::SetVolume(int nLevel)
{
m_bmpBattery.DeleteObject();
m_bmpBattery.CreateBitmap(PBITMAPFILEHEADER(g_bmpVolume),&g_pDesktop->m_dcOwnDC);
Invalidate(NULL);
}
void CPdOPBar::Create(LPCRECT pRect,CPWnd* pParent)
{
CRect r(pRect);
int w=r.Width()/3;
CPWnd::Create(WS_HALFSCRBKGND|WS_TOPWND,r,pParent);
r.SetRect(CPoint(0,0),r.Size());
r.right=r.left+w;
m_btnLeft.Create(WS_TRANSPARENT|WS_NOBKGND|BS_LEFT,r,this);
m_btnLeft.SetInfo(g_bmpArrowLeft,"下一个");
r.right=pRect->right;
r.left=r.right-w;
m_btnRight.Create(WS_TRANSPARENT|WS_NOBKGND|BS_RIGHT,r,this);
m_btnRight.SetInfo(g_bmpArrowRight,"下一个");
r.left=pRect->left+w;
r.right=pRect->right-w;
m_btnCenter.Create(WS_TRANSPARENT|WS_NOBKGND,r,this);
m_btnCenter.SetInfo(g_bmpRunApp,"运行");
}
LRESULT CPdOPBar::MsgProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_CTLCOLOR:
switch(lParam)
{
case COLOR_WINDOWTEXT:
wParam=RGB(255,255,255);
break;
case COLOR_WINDOW:
wParam=RGB(0,64,255);
break;
case COLOR_HIGHLIGHTTEXT:
wParam=RGB(255,255,0);
break;
default:
wParam=CPWnd::MsgProc(message,wParam,lParam);
}
break;
case WM_PAINT:
break;
default:
wParam=CPWnd::MsgProc(message,wParam,lParam);
}
return wParam;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -