本文不僅教你建立一個 PDF 閱讀器,更著重示範如何在 MFC 專案中正確整合 ActiveX 控件——以 Adobe Acrobat Control for ActiveX 為例。掌握此流程後,你同樣能嵌入 Flash、Windows Media Player、RealPlayer 等控件,快速開發多媒體播放器。
AppWizard 建立對話框專案時,第二步務必勾選 "ActiveX Controls",否則後續需手動補充大量樣板碼。
CPdf(對應 pdf.h)。ID_OPEN_PDFFILE),取消 Pop-up 勾選。OnOpenPdffile 訊息處理函式。CPdf m_PdfFile;,並在 PdfReaderDlg.h 引入 #include "pdf.h"。void CPdfReaderDlg::OnOpenPdffile()
{
char szFileFilter[] = "PDF File(*.pdf)|*.pdf|All File(*.*)|*.*||";
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_EXPLORER, szFileFilter, this);
if (dlg.DoModal() == IDOK)
{
CString path = dlg.GetPathName();
m_PdfFile.LoadFile(path); // 載入 PDF
SetWindowText("正在閱讀:" + dlg.GetFileTitle()); // 更新標題列
}
}
關鍵步驟!若略過此步,呼叫 LoadFile 時會觸發系統錯誤。
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;
}
WM_SIZE 讓控件隨對話框縮放:m_PdfFile.MoveWindow(0,0,cx,cy);CPdf 內建方法實現翻頁、縮放、列印:gotoFirstPage()、gotoLastPage()、gotoNextPage()、gotoPreviousPage()、setZoom(percent)、Print()。float m_find,呼叫 setZoom。SetDialogBkColor(RGB(255,0,0)) 放入 InitInstance。IDR_MAINFRAME。對話框右鍵 → Insert ActiveX Control 即可選擇 Shockwave Flash Object、ActiveMovie Control、RealPlayer G2 Control 等,後續步驟雷同。掌握此模式,你就能快速打造專屬的多媒體播放器。