www.pudn.com > WinGOS.rar > 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; 
}