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

📄 filebrowser.cpp

📁 一个更为先进的嵌入式操作系统.采用RMS线程调度算法,具有信号量等同步对象.亦包括GUI. 通过该系统您可以极大知道Windows的内部秘密.
💻 CPP
字号:
#include "gpmp.h"
#include "filebrowser.h"
#include "list.h"

static PCVOID m_aBmp[]=
{
	g_bmpVideo,g_bmpMusic,g_bmpCamera,
	g_bmpGame,g_bmpEBook,g_bmpFolder,
	g_bmpTV,g_bmpRadio,g_bmpSetting,
	g_bmpHome,g_bmpVolume,g_bmpBattery,
	g_bmpRunApp,g_bmpArrowLeft,g_bmpArrowRight,
};

static int m_nBmpID=0;

LRESULT CGCFile::MsgProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message)
	{
	case gcmDrawCell:
		{
			PDC pDC=PDC(wParam);
			PGCDRAWCELLARG pArg=PGCDRAWCELLARG(lParam);
			CRect r=pArg->rect;
			COLORREF clr=(pArg->nStyle&GCS_ROWSELECTED)?
				COLOR_HIGHLIGHT:COLOR_WINDOW;
			clr=GetCtlColor(clr);
			clr|=128<<24;
			switch(pArg->nCol)
			{
			case 0:
				r.DeflateRect(0,0,0,1);
				pDC->FillSolidRect(r,clr);
				pArg->rect.DeflateRect(2,2);
				OnDrawCell(pDC,pArg);
				pArg->rect.InflateRect(2,2);
				break;
			case 2:
				r.DeflateRect(0,0,0,1);
				pDC->FillSolidRect(r,clr);
				OnDrawCell(pDC,pArg);
				break;
			default:
				r.DeflateRect(0,0,1,1);
				pDC->FillSolidRect(r,clr);
				OnDrawCell(pDC,pArg);
			}
		}
		break;
	case gcmGetRowState:
		wParam=lParam==m_nCurGridRow?GCS_ROWSELECTED:0;
		break;
	case gcmGetDSRow:
		if(lParam>0)
		{
			if(!wParam)
				wParam=(WPARAM)m_aItem.GetHeadPosition();
			while(wParam && lParam--)
				m_aItem.GetNext(*(POSITION*)&wParam);
		}
		else if(lParam<0)
		{
			if(!wParam)
				wParam=(WPARAM)m_aItem.GetTailPosition();
			while(wParam && lParam--)
				m_aItem.GetPrev(*(POSITION*)&wParam);
		}
		else 
		{
			if(!wParam)
				wParam=(WPARAM)m_aItem.GetHeadPosition();
		}
		break;
	case gcmGetDSCellData:
		{
			FILEITEM& fi=m_aItem.GetAt(POSITION(wParam));
			switch(lParam)
			{
			case 0:
				wParam=(WPARAM)fi.pIcon;
				break;
			case 1:
				wParam=(WPARAM)fi.pszName;
				break;
			case 2:
				wParam=(WPARAM)fi.pszSize;
				break;
			}
		}
		break;
	case WM_COMMAND:
		{
			FILEITEM& fi=this->m_aItem.GetAt(POSITION(wParam));
			GetParent()->PostMessage(WM_COMMAND,
				WPARAM(this),LPARAM(fi.pData));
		}
		break;
	case WM_CREATE:
		OnCreate();
		break;
	default:
		wParam=CGridCtrl::MsgProc(message,wParam,lParam);
	}
	return wParam;
}

void CGCFile::AddItem(CBitmap* pIcon,LPCTSTR pszName,LPCTSTR pszSize,PCVOID pData)
{
	FILEITEM fi;
	fi.pIcon=pIcon;
	fi.pszName=pszName;
	fi.pszSize=pszSize;
	fi.pData=pData;
	m_aItem.AddTail(fi);
}

void CGCFile::OnCreate()
{
	PDC pDC=GetDC();
	LPCTSTR psz;
	int w=GetClientRect().Width();
	
	m_bmpVideo.CreateBitmap(PBITMAPFILEHEADER(g_bmpVideo),pDC);
	m_bmpMusic.CreateBitmap(PBITMAPFILEHEADER(g_bmpMusic),pDC);
	m_bmpTV.CreateBitmap(PBITMAPFILEHEADER(g_bmpTV),pDC);

	w-=80;
	InsertColumn(0,"",GCS_ICON|GCS_ZOOM,20);
	InsertColumn(1,"文件名",GCS_LEFT,w);
	InsertColumn(2,"大小",0,60);
	
	psz="最新猛片";
	AddItem(&m_bmpVideo,"超人归来","120MB",psz);

	psz="一位美丽老师的情感历程"
		"\r\n超值视觉享受";
	AddItem(&m_bmpTV,"中大回忆录","800KB",psz);
	
	psz="动画大片";
	AddItem(&m_bmpVideo,"怪物史来克","203MB",psz);
	
	psz="不老的爱情\n永远的旋律";
	AddItem(&m_bmpMusic,"和兰花在一起","203MB",psz);


	m_nHeaderHeight=0;
	
}

CFileBrowser::CFileBrowser(void)
{
	RemoveStyle(-1);
	AddStyle(WS_SCRBKGND);
}

CFileBrowser::~CFileBrowser(void)
{
}

LRESULT CFileBrowser::MsgProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message)
	{
	case WM_COMMAND:
		if(wParam==WPARAM(&m_lstFile))
		{
			m_btnInfo.SetWindowText(LPCTSTR(lParam));
			m_nFrameSkipCount=50;
			SetTimer(m_hTimer,20);
		}
		break;
	case WM_CREATE:
		OnCreate();
		break;
	case WM_DESTROY:
		RemoveMessage(m_hTimer);
		CDialog::OnDestroy();
		break;
	case WM_TIMER:
		if(m_nFrameSkipCount>0)
		{
			m_nFrameSkipCount--;
			if(!m_nFrameSkipCount)
				SetTimer(m_hTimer,2000);
		}
		m_nBmpID++;
		if(m_nBmpID>=sizeof(m_aBmp)/sizeof(PCVOID))
			m_nBmpID=0;
		m_bmpView.DeleteObject();
		m_bmpView.CreateBitmap(
			PBITMAPFILEHEADER(m_aBmp[m_nBmpID]),GetDC());
		m_btnView.Invalidate();
		break;
	case WM_CTLCOLOR:
		if(wParam==WPARAM(&m_btnAddress) &&
			lParam==COLOR_HIGHLIGHTTEXT)
			wParam=RGB(0,0,128);
		else
			wParam=CDialog::MsgProc(message,wParam,lParam);
		break;
	default:
		wParam=CDialog::MsgProc(message,wParam,lParam);
	}
	return wParam;
}

void CFileBrowser::OnCreate()
{
	CRect r,rclClient;
	GetClientRect(rclClient);

	r.SetRect(CPoint(4,5),CSize(48,25));
	m_lblAddrTitle.Create("地址",WS_HALFSCRBKGND,r,this);
	
	r.left=r.right;
	r.right+=rclClient.Width()-56;
	m_btnAddress.Create(WS_HALFSCRBKGND|WS_BORDER|BS_LEFT,r,this);
	m_btnAddress.SetInfo(g_bmpFolder,"C:\\My Video\\");

	r.bottom=rclClient.Height();
	r.left=0;
	r.top=r.bottom-rclClient.Width()/3;
	r.right=r.left+rclClient.Width()/2;
	r.DeflateRect(4,0,2,4);
	m_btnView.Create(WS_HALFSCRBKGND|BS_ICON|BS_ZOOM|WS_BORDER,r,this);
	m_bmpView.CreateBitmap(PBITMAPFILEHEADER(g_bmpTV),GetDC());
	m_btnView.SetBitmap(&m_bmpView);

	r.bottom=rclClient.Height();
	r.top=r.bottom-rclClient.Width()/3;
	r.right=rclClient.Width();
	r.left=r.right-rclClient.Width()/2;
	r.DeflateRect(2,0,4,4);

	m_btnInfo.Create("Info",WS_HALFSCRBKGND|BS_WORDBREAK,r,this);
	
	r.CopyRect(rclClient);
	r.TopLeft()=CPoint(0,0);
	r.top+=35;
	r.bottom-=25+rclClient.Width()/3;
	r.DeflateRect(4,0);
	m_lstFile.Create(WS_SCRBKGND|WS_BORDER,r,this);

	SetWindowText("Documents");
	m_hTimer=SetTimer(8001,50);
	m_nFrameSkipCount=10;
	CDialog::OnCreate();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -