ActiveReports 2 是基於 ActiveX Designer 的報表控件,提供類 VB 的設計體驗、完整 VB 代碼支援、ActiveX/OLE 物件嵌入、向導式快速建報。本文記錄在 VC++ 6.0 MFC 單文檔專案中以控件宿主方式整合的完整步驟。
arpro2.dll 及 Viewer 控件。ClassWizard → Add Class → From TypeLib → 註冊表選 ActiveReports Viewer 2 <1.0> → 生成 CARViewer(介面 IARViewer)。Common Files\Data Dynamics\ActiveReports Pro\arpro2.dll → 生成 CActiveReport(介面 IActiveReport)。向導生成的 GetClsid() 往往不正確,需手動修正:
// CActiveReport
CLSID const& GetClsid() {
static CLSID const clsid =
{ 0x9EB8768B, 0xCDFA, 0x44DF, { 0x8F,0x3E,0x85,0x7A,0x84,0x05,0xE1,0xDB } };
return clsid;
}
// CARViewer
CLSID const& GetClsid() {
static CLSID const clsid =
{ 0x8569D715, 0xFF88, 0x44BA, { 0x8D,0x1D,0xAD,0x3E,0x59,0x54,0x3D,0xDE } };
return clsid;
}
// 視圖類成員
CARViewer m_arViewer;
CActiveReport m_arReport;
int CMyView::OnCreate(LPCREATESTRUCT lpCS) {
if (CView::OnCreate(lpCS) == -1) return -1;
m_arViewer.Create(_T(""), WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this, 1);
m_arReport.Create(_T(""), WS_POPUP, CRect(0,0,0,0), this, 2);
m_arReport.put_documentName(_T("test"));
m_arViewer.put_RulerVisible(TRUE);
m_arViewer.put_ToolbarVisible(TRUE);
m_arViewer.put_TOCEnabled(FALSE);
COleVariant varRpx(_T("Report.rpx")); // 報表模板檔
m_arReport.LoadLayout(varRpx);
m_arViewer.put_ReportSource(m_arReport.GetReport());
m_arViewer.Refresh();
return 0;
}
void CMyView::OnSize(UINT nType, int cx, int cy) {
CView::OnSize(nType, cx, cy);
m_arViewer.SetWindowPos(NULL, -1, -1, cx, cy,
SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER);
}
Report.rpx,放置專案目錄或指定完整路徑。程式啟動即在視圖區顯示報表預覽,工具列支援列印、導出、縮放、頁碼導航,尺寸隨視圖自適應。
LoadLayout 失敗,檢查 Report.rpx 路徑與版本是否匹配(AR2 專用)。Project → Settings → General → Microsoft Foundation Classes: Use MFC in a Shared DLL 並勾選 Automation)。此方案讓 VC++ 快速擁有專業級報表設計/預覽/列印能力,無需自行開發報表引擎。