📄 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();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -