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

📄 uitemplateview.cpp

📁 一个windows ce上的notepad
💻 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 + -