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

📄 pmpdesktop.cpp

📁 一个更为先进的嵌入式操作系统.采用RMS线程调度算法,具有信号量等同步对象.亦包括GUI. 通过该系统您可以极大知道Windows的内部秘密.
💻 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 + -