分类: C/C++
2008-08-07 17:38:39
public:CPdf m_PdfFile;响应ID_OPEN_PDFFILE"打开"代码:
void CPdfReaderDlg::OnOpenPdffile() { char szFileFilter[]="PDF File(*.pdf)|*.pdf|All File(*.*)|*.*||"; CFileDialog FileDialog(true,"","",OFN_EXPLORER,szFileFilter,this); if(FileDialog.DoModal()==IDOK) { CString FilePath=FileDialog.GetPathName(); m_PdfFile.LoadFile(FilePath); } }因为在上面的代码中我们直接引用PDF控件所产生类的函数的LoadFile(),很显然我们需要在"PdfReaderDlg.h"中加入"#include "pdf.h"."也许心情迫切的你想编译现在的程序,行啊。运行一下,没有什么错误。选择"打开",找到具有".pdf"格式的文件,可是会出现系统的警告错误。是什么原因呢,请想一想啊。对,我们还没有给控件在对话框内分配其存在空间呢。下面就是我们要做的。 利用Classwizard(类向导),为WM_CREATE消息映射个函数OnCtreate().其代码如下:
int CPdfReaderDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) == -1) return -1; CRect rect; GetWindowRect(&rect); m_PdfFile.Create(NULL,WS_VISIBLE,rect,this,0); return 0; }这时候你再编译,是不是可以观看PDF格式电子图书了?但是,细心的你,是不是发现,我们的窗口既没有最大化、最小化按钮,也不能在对话框边角位置拖动其大小。不用急,下面我们就准备做这些工作。
void CPdfReaderDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); m_PdfFile.MoveWindow(0,0,cx,cy); //我们就需要加入这么一行就行了。 }在我们的菜单里就"打开"这么一个选择未免太单调,我们可以自己手动加入一些东西。比如,"上页""下页""首页""末页""退出",其对应ID分别为:ID_PREVIOUS_PAGE,ID_NEXT_PAGE,ID_FIRST_PAGE,ID_LAST_PAGE,IDCANCEL(这里要说的是,在其菜单属性里把"Pop-up"前钩去掉),其对应函数分别为:
void CPdfReaderDlg::OnFirstPage() { m_PdfFile.gotoFirstPage(); } void CPdfReaderDlg::OnLastPage() { m_PdfFile.gotoLastPage(); } void CPdfReaderDlg::OnNextPage() { m_PdfFile.gotoNextPage(); } void CPdfReaderDlg::OnPreviousPage() { m_PdfFile.gotoPreviousPage(); } void CPdfReaderDlg::OnCancel() { CDialog::OnCancel(); }我们能不能控制PDF格式电子图书显示的大小呢,答案是肯定的。在菜单中加入"视图",其子项为"放大","缩小",对应ID为ID_CHANG_BIG,ID_CHANG_SMALL。相应函数可为:
void CPdfReaderDlg::OnChangBig() { i=i 50; //设定i的变化范围。你可以改变一下i每次变化的大小。 m_PdfFile.setZoom(i); } void CPdfReaderDlg::OnChangSmall() { i=i-50; m_PdfFile.setZoom(i); }注意:要在PdfReaderDlg.cpp前面加上
int i=100; //初始化i的大小当然,你也可以添加一个新的对话框 ,用来设定PDF格式电子图书显示的大小。新加一个对话框后,生成相应的类,如CFind。在新生成的对话框内添加"Static"和 "Edit"控件。见下表和图8:
Static Text 控件 自定义大小: Edit Box 控件 IDC_FIND
void CPdfReaderDlg::OnSetSize() { CFind getsize; getsize.DoModal(); m_PdfFile.setZoom(getsize.m_find); }仅仅加入这些代码,还不行,在OSetSize()直接使用CFind,这个类还没有声明,因此我们需要在"PdfReaderDlg.h"里加入"Find.h". 如果考虑到"打印"的话,在菜单里加入"打印",ID为ID_PRINT_PDFFILE,映射对应函数:
void CPdfReaderDlg::OnPrintPdffile() { m_PdfFile.Print(); }到此时,我们的这个PDF电子图书浏览器算是初具规模了。下面我们要添加一些小的功能。 比如在窗口栏内显示阅读PDF电子图书的名称。这项功能可在下面函数里添加:
void CPdfReaderDlg::OnOpenPdffile() { CString m_Caption; //新添加的一个变量,用于显示窗口标题 CString m_Word=" 现在正在观看:";//也是新添加的 char szFileFilter[]="PDF File(*.pdf)|*.pdf|All File(*.*)|*.*||"; CFileDialog FileDialog(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); if(FileDialog.DoModal()==IDOK) { CString FileName=FileDialog.GetFileTitle(); m_Caption=m_Word FileName;//CString类型的重载操作。 SetWindowText(m_Caption);//设置在窗口显示 CString PathName=FileDialog.GetPathName(); m_PdfFile.LoadFile(PathName); } }我们要对这个浏览器整容,我们要给对话框添加红色背景。 SetDialogBkColor(RGB(255,0,0) ); 把上面这句添加到InitInstance()里既可。我们运行出来的对话框左上角的那个系统默认图标,实在没有个性。好办,我们要换成我们喜欢的小图标。首先用鼠标选中,按"Delete"键删除系统默认ICO图标,然后在Menu上右键单击,选择"Insert",在下面的出现的对话框中选中"Icon",单击"Import"按钮选择你要插入的Icon图标。在新插入的Icon图标上单击右键,选择"Properties",把其ID修改为"IDR_MAINFRAME",现在运行一下,看看效果。
BOOL CPdf::LoadFile(LPCTSTR fileName) void CPdf::Print() //用于打印文件 void CPdf::setZoom(float percent)//设置页面的大小 void CPdf::gotoFirstPage()//到第一页 void CPdf::gotoLastPage()//到最后一页 void CPdf::gotoNextPage()//到下一页 void CPdf::gotoPreviousPage()//到上一页这些函数相对于类"CPdf"来说,只是很少的一部分,下面就要看各位的努力去丰富我们的"PdfReader"浏览器了。因为,本文的目的,不仅仅是教会您如何做一个PDF浏览器,而是通过做这么个简易的浏览器,触类旁通。如果您仔细的阅读了本文,那么首先庆祝您现在利用FLASH控件"Shockwave Flash Object ",Windows Media Player提供的"ActiveMovieObject Control"控件,还有RealOne Player播放器提供的控件"RealPlayer G2 Control"(前提是你的电脑上面安装有RealOne)等一类控件可以自己制作完全属于自己的FLASH播放器,Windows Media播放器,以及RealOne 播放器等。 最后需要说明的是,关于添加控件,也可以在对话框内右键单击,选择"Insert ActiveX Control",在下面出现的控件选择对话框里选择我们需要用到的控件既可。下面的步骤和我们在前面所介绍的步骤类似,在此不再介绍。至于,本文所牵涉到的源码,如果各位想参考的话,其下载地址为:
有什么问题可发信到:nie_yong@163.com,定会全力解答。祝愿各位,都能在编程的天空自由翱翔!