?? uitemplateview.cpp
字號:
//
#include "stdafx.h"
#include "UITemplate.h"
#include "UITemplateDoc.h"
#include "UITemplateView.h"
#include "SADirRead.h"
#include "ShowTxtFileDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define EXIT_READ 0
#define PRE_PAGE 1
#define NEXT_PAGE 2
#define START_DIR _T("\\SDMMC\\eBook") //默認的打開文件夾
/////////////////////////////////////////////////////////////////////////////
// CUITemplateView
IMPLEMENT_DYNCREATE(CUITemplateView, CView)
BEGIN_MESSAGE_MAP(CUITemplateView, CView)
//{{AFX_MSG_MAP(CUITemplateView)
ON_WM_LBUTTONDOWN()
ON_WM_KEYDOWN()
ON_WM_KEYUP()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CUITemplateView construction/destruction
CUITemplateView::CUITemplateView()
{
// TODO: add construction code here
m_bDrawBasicBtn = true;
m_nBtnCount = 0;
m_nPreBtnIndex = -2;
}
CUITemplateView::~CUITemplateView()
{
if (pFont != NULL)
{
pFont->DeleteObject();
delete pFont;
pFont = NULL;
}
}
BOOL CUITemplateView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
InitControls();
cs.x = 0;
cs.y = 0;
cs.cx = 320;
cs.cy = 240;
cs.style &= ~WS_BORDER;
// HWND hwnd;
// hwnd=AfxGetm
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CUITemplateView drawing
void CUITemplateView::OnDraw(CDC* pDC)
{
// CUITemplateDoc* pDoc = GetDocument();
// ASSERT_VALID(pDoc);
// if(!m_bDrawBack)
// {
CDC ImageDc;
CRect rc(0,0,320,241);
CBitmap image,*pOldImg;
image.LoadBitmap(IDB_BACKGROUND);
ImageDc.CreateCompatibleDC(pDC);
pOldImg=ImageDc.SelectObject(&image);
pDC->BitBlt(rc.left,rc.top,rc.Width(),rc.Height(),&ImageDc,0, 0,SRCCOPY);
ImageDc.SelectObject(pOldImg);
ImageDc.DeleteDC();
if(m_bDrawBasicBtn)
{
for(int i=0; i<3; i++)
this->ReDrawBmpButton(i);
m_bDrawBasicBtn = true;
}
// }
for(int i=3; i<m_nBtnCount; i++)
this->ReDrawBmpButton(i);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CUITemplateView diagnostics
#ifdef _DEBUG
void CUITemplateView::AssertValid() const
{
CView::AssertValid();
}
void CUITemplateView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CUITemplateDoc* CUITemplateView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CUITemplateDoc)));
return (CUITemplateDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CUITemplateView message handlers
void CUITemplateView::AddBmpButton(int BtnID, CRect rc, int UpBmpID, int DownBmpID, CString sText)
{
WIDGET_NODE wn;
wn.rect = rc;
wn.nBtnID = BtnID;
wn.nCurState = 1;
wn.nDownBitmapID = DownBmpID;
wn.nUpBitmapId = UpBmpID;
wn.strText = sText;
m_WidgetNode.Add(wn);
m_nBtnCount++;
}
int CUITemplateView::GetCurPrsBtnIndex(CPoint pt)
{
int IDindex=-1;
for(int i=0;i<m_nBtnCount;i++)
{
if(m_WidgetNode.GetAt(i).rect.PtInRect(pt))
{
IDindex = i;
break;
}
}
return IDindex;
}
void CUITemplateView::DeleteBmpButton(int BtnIndex)
{
if(BtnIndex >= 0 && BtnIndex < m_WidgetNode.GetSize())
{
m_WidgetNode.RemoveAt(BtnIndex);
m_nBtnCount--;
}
}
void CUITemplateView::ReDrawBmpButton(int BtnIndex)
{
CRect rc = m_WidgetNode.GetAt(BtnIndex).rect;
int SrcBmpID;
if(m_WidgetNode.GetAt(BtnIndex).nCurState == 0)
SrcBmpID = m_WidgetNode.GetAt(BtnIndex).nDownBitmapID;
else
SrcBmpID = m_WidgetNode.GetAt(BtnIndex).nUpBitmapId;
CDC *pDC = GetDC();
CDC ImageDc;
CBitmap image,*pOldImg;
image.LoadBitmap(SrcBmpID);
ImageDc.CreateCompatibleDC(pDC);
pOldImg=ImageDc.SelectObject(&image);
pDC->BitBlt(rc.left,rc.top,rc.Width(),rc.Height(),&ImageDc,0, 0,SRCCOPY);
CString btnText = m_WidgetNode.GetAt(BtnIndex).strText;
if(btnText.IsEmpty() == false) //有字符串則要進行顯示
{
CFont *pFont=NULL;
pFont = new CFont();
pFont->CreateFont( 14, 8, 0, 0, FW_NORMAL,
FALSE, FALSE,FALSE,
GB2312_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,//缺省裁減精度
DEFAULT_QUALITY, //nQuality=缺省值
DEFAULT_PITCH, //nPitchAndFamily=缺省值
_T("Arial") ); //字體名=@system
CFont *pOldFont=pDC->SelectObject(pFont); //選入設備描述表
COLORREF proColor = pDC->SetTextColor(RGB(1,0,0));
int y1,y2;
y1 = rc.top + (rc.bottom - rc.top - 16)/2;
y2 = y1+16;
CRect rect(rc.left+2,y1,rc.right,y2);
pDC->SetBkMode(TRANSPARENT);//TRANSPARENT
pDC->DrawText(btnText,btnText.GetLength(),rect,0 );
pDC->SelectObject(pOldFont); //將myFont從設備環境中分離
pDC->SetTextColor( proColor);
pDC->SelectObject(pOldFont);
}
ImageDc.SelectObject(pOldImg);
ImageDc.DeleteDC();
ReleaseDC(pDC);
}
void CUITemplateView::InitControls()
{
AddBasicBtn();
m_pTxtFileList = ImportFileItems();
AddFileItemBtn();
}
void CUITemplateView::OnLButtonDown(UINT nFlags, CPoint point)
{
int idCurIndex = GetCurPressBtnID(point);
WIDGET_NODE wn;
if(idCurIndex != -1 ) //有按鈕按下
{
if(m_nPreBtnIndex != -2 )
{
if(idCurIndex != m_nPreBtnIndex) //按下的不是同一個按鈕
{
wn = m_WidgetNode.GetAt(m_nPreBtnIndex);
if(wn.nCurState == 0)
{
wn.nCurState = 1;
m_WidgetNode.SetAt(m_nPreBtnIndex,wn);
ReDrawBmpButton(m_nPreBtnIndex);
}
}
else //按下的是同一個按鈕
{
wn = m_WidgetNode.GetAt(idCurIndex);
if( wn.nBtnID >= 20 && wn.nBtnID < 30) //點擊的是文件列表按鈕
{
CString sFilePath = START_DIR;
sFilePath += _T("\\");
sFilePath += wn.strText;
CShowTxtFileDlg dlg;
dlg.SetFilePath(sFilePath);
dlg.DoModal();
}
}
}
wn = m_WidgetNode.GetAt(idCurIndex);
if(wn.nCurState == 1)
{
wn.nCurState = 0;
m_WidgetNode.SetAt(idCurIndex,wn);
ReDrawBmpButton(idCurIndex);
}
m_nPreBtnIndex = idCurIndex;
switch(m_WidgetNode.GetAt(idCurIndex).nBtnID)
{
case EXIT_READ:
PostQuitMessage(0);
break;
case NEXT_PAGE:
NextFilePage();
break;
case PRE_PAGE:
PreFilePage();
break;
default:
break;
}
}
else
{
if(m_nPreBtnIndex != -2 )
{
wn = m_WidgetNode.GetAt(m_nPreBtnIndex);
wn.nCurState = 1;
m_WidgetNode.SetAt(m_nPreBtnIndex,wn);
ReDrawBmpButton(m_nPreBtnIndex);
}
}
// CView::OnLButtonDown(nFlags, point);
}
int CUITemplateView::GetCurPressBtnID(CPoint pt)
{
int IDindex=-1;
if(m_nBtnCount>0)
{
for(int i=0;i<m_nBtnCount;i++)
{
if(m_WidgetNode.GetAt(i).rect.PtInRect(pt))
{
// btnID = m_WidgetNode.GetAt(i).nBtnID;
IDindex = i;
break;
}
}
}
return IDindex;
}
CCPITFileList * CUITemplateView::ImportFileItems()
{
CSADirRead dr;
dr.ClearDirs(); // start clean
dr.GetDirs(START_DIR, true); // get all folders under c:\temp
dr.ClearFiles(); // start clean
dr.GetFiles(_T("*.txt")); // get all *.txt files in c:\temp and below
// get the file array
CString strTemp;
// m_pFileList->RemoveAll();
CCPITFileList * m_pFileList = new CCPITFileList(10);
CSADirRead::SAFileVector &files = dr.Files();
for (CSADirRead::SAFileVector::iterator fit = files.begin();
fit!=files.end(); fit++)
{
CPIT_FILEINFO TextFileInfo;
strTemp=(*fit).m_sName;
TextFileInfo.strFilePath=strTemp;
// if ( !strTemp.IsEmpty() )
// {
// int p=strTemp.ReverseFind('\\')+1;
// TextFileInfo.strTile=strTemp.Mid(p);
// }s
int nstrLen;
nstrLen=TextFileInfo.strFilePath.GetLength();
TextFileInfo.strTile=TextFileInfo.strFilePath.Right(nstrLen-13);
// TextFileInfo.strSize.Format(_T("%d KB"),(*fit).size/1024);
m_pFileList->Add(TextFileInfo);
}
if ( m_pFileList->GetSize() >0 )
return m_pFileList;
return NULL;
}
void CUITemplateView::NextFilePage()
{
if(NULL != m_pTxtFileList)
{
if(m_pTxtFileList->GetCurPage() < m_pTxtFileList->PageCount())
{
for(int j = m_nBtnCount-1; j >= 3 ; j--)
DeleteBmpButton(j);
m_pTxtFileList->NextPage();
AddFileItemBtn();
Invalidate(false);
}
/* for(int j = m_nBtnCount-1; j >= 3 ; j--)
DeleteBmpButton(j);
// m_bDrawListBtn = false;
// Invalidate(false);
CPIT_FILEINFO cfo;
int nCurPage = m_pTxtFileList->GetCurPage();
int nItemCount = m_pTxtFileList->GetSize();
// AfxMessageBox(_T("run here"));
int x = 20,y= 29;
for(int i=0;i<2;i++)
{
cfo = m_pTxtFileList->GetAt(i+10);
AddBmpButton(i+20,CRect(x,y+i*18+1,x+280,y+(i+1)*18+1),IDB_LIST_01+i,IDB_LIST_D,cfo.strTile);
}
m_bDrawListBtn = true;
Invalidate(false);
*/
}
}
void CUITemplateView::PreFilePage()
{
if(NULL != m_pTxtFileList)
{
if(m_pTxtFileList->GetCurPage() > 1)
{
for(int j = m_nBtnCount-1; j >= 3 ; j--)
DeleteBmpButton(j);
m_pTxtFileList->PrePage();
AddFileItemBtn();
Invalidate(false);
}
}
}
void CUITemplateView::AddFileItemBtn()
{
if(m_pTxtFileList != NULL)
{
CPIT_FILEINFO cfo;
int nCurPage = m_pTxtFileList->GetCurPage();
int nItemCount = m_pTxtFileList->GetSize();
if(nCurPage <= m_pTxtFileList->PageCount())
{
int x = 9,y= 25;
for(int i=0;i<10;i++)
{
if((nCurPage-1)*10+i >= nItemCount)
break;
cfo = m_pTxtFileList->GetAt((nCurPage-1)*10+i);
//strFileInfo.Format(_T("%.2d %s"),cfo.strTile);
//strFileInfo.Format(_T("%.2d %s"),i+1,cfo.strTile);
AddBmpButton(i+20,CRect(x,y+i*18+1,x+412,y+(i+1)*18+1),IDB_LIST_01+i,IDB_LIST_D,cfo.strTile);
}
}
}
}
void CUITemplateView::DeleteAllBmpBtn()
{
m_WidgetNode.RemoveAll();
m_nBtnCount=0;
m_nPreBtnIndex = -2;//刪除后則沒有按鈕被按下
}
void CUITemplateView::AddBasicBtn()
{
AddBmpButton(EXIT_READ,CRect(0,217,109,240),IDB_RETURN_UP, IDB_RETURN_DOWN);//退出
AddBmpButton(PRE_PAGE,CRect(108,217,218,240),IDB_PRE_PAGE_UP, IDB_PRE_PAGE_DOWN);//上一頁
AddBmpButton(NEXT_PAGE,CRect(217,217,320,240),IDB_NEXT_PAGE_UP, IDB_NEXT_PAGE_DOWN);//下一頁
}
void CUITemplateView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CUITemplateView::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(nChar==195)
{
AfxGetMainWnd()->PostMessage(WM_CLOSE, 0, 0);
}
CView::OnKeyUp(nChar, nRepCnt, nFlags);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -