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

📄 savefileview.cpp

📁 学习内幕第伍版时基于ScrollView类做的一个小程序
💻 CPP
字号:
// SaveFileView.cpp : implementation of the CSaveFileView class
//

#include "stdafx.h"
#include "SaveFile.h"

#include "SaveFileDoc.h"
#include "SaveFileView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSaveFileView

IMPLEMENT_DYNCREATE(CSaveFileView, CScrollView)

BEGIN_MESSAGE_MAP(CSaveFileView, CScrollView)
	//{{AFX_MSG_MAP(CSaveFileView)
	ON_COMMAND(ID_FindPdf, OnFindPdf)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSaveFileView construction/destruction

CSaveFileView::CSaveFileView()
{
	vPos=0;
	sizeTotal.cx=30000;
	sizeTotal.cy=60000;
	nYline=80;
	nYclient=400;

}

CSaveFileView::~CSaveFileView()
{
}

BOOL CSaveFileView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CSaveFileView drawing

void CSaveFileView::OnDraw(CDC* pDC)
{
	CSaveFileDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	
	TEXTMETRIC tm;
	pDC->GetTextMetrics(&tm);	
	CString out,namebuffer,pathbuffer;
	namebuffer=pDoc->m_pdfWorker.m_strName;
	pathbuffer=pDoc->m_pdfWorker.m_strPath;
	while((!namebuffer.IsEmpty())&&(!pathbuffer.IsEmpty()))
	{
		
		{
			int ndex=namebuffer.Find("  ",0);
			out="";
			out=namebuffer.Left(ndex);
			namebuffer=namebuffer.Right(namebuffer.GetLength()-ndex-2);
			
			int hPos=(ndex)*tm.tmMaxCharWidth;
			ndex=pathbuffer.Find("  ",0);
			pDC->TextOut(0,vPos,out+"      "+pathbuffer.Left(ndex));
			pathbuffer=pathbuffer.Right(pathbuffer.GetLength()-ndex-2);
			
		}

		vPos-=(tm.tmHeight + tm.tmExternalLeading);
	}
	vPos=0;


}

void CSaveFileView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();

	
	/////////////////////////////////////////

    CSize sizePage(sizeTotal.cx /2 , sizeTotal.cy / nYclient);
    CSize sizeLine(sizeTotal.cx / 80, sizeTotal.cy / nYline);
    SetScrollSizes(MM_HIMETRIC, sizeTotal, sizePage, sizeLine);

	/////////////////////////////////////////
}

/////////////////////////////////////////////////////////////////////////////
// CSaveFileView diagnostics

#ifdef _DEBUG
void CSaveFileView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CSaveFileView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}

CSaveFileDoc* CSaveFileView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSaveFileDoc)));
	return (CSaveFileDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CSaveFileView message handlers


void CSaveFileView::deepfind(CString path, CSaveFileDoc* pDoc)
{   
        CFileFind   finder;  
        path += _T("\\*.*");   
        BOOL   bWorking   =   finder.FindFile(path);   
        while   (bWorking)   
        {   
              bWorking = finder.FindNextFile();   

              if (finder.IsDots())   
                  continue;   
    
              if  (finder.IsDirectory())   
              { 
                 CString   str   =   finder.GetFilePath();   
                 deepfind(str, pDoc);   
              }
			 else if (finder.GetFileName().Right(4)==".pdf")
				{
   
				pDoc->m_pdfWorker.m_strPath+=(finder.GetFilePath()+"  ");
				pDoc->m_pdfWorker.m_strName+=(finder.GetFileTitle()+"  ");
				}
    
        }   
    
        finder.Close();   
}   


void CSaveFileView::OnFindPdf() 
{
	CString dir;
	//从对话框打开文件
	CFileDialog dlg(TRUE, NULL, "*.*");
	if (dlg.DoModal() == IDOK)
	{
    dir=dlg.GetPathName();
	}
	//获得该文件所在的文件夹路径
	while (dir.GetAt(dir.GetLength()-1)!='\\')
	{
	 dir.Delete(dir.GetLength()-1);
	}
	CSaveFileDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	CClientDC dc(this);
    OnPrepareDC(&dc);

	deepfind(dir, pDoc);

	CRect rectClient;
	GetClientRect(rectClient);
	nYclient=rectClient.Height();
	TEXTMETRIC tm;
	dc.GetTextMetrics(&tm);
	sizeTotal.cx=tm.tmMaxCharWidth*80;
	sizeTotal.cy=((pDoc->m_pdfWorker.m_strName.GetLength()+
		pDoc->m_pdfWorker.m_strPath.GetLength())*(tm.tmHeight+tm.tmExternalLeading) / 2) /20;
	OnInitialUpdate();
	
	InvalidateRect(rectClient);

	
}

⌨️ 快捷键说明

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