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