VC++ 無內建報表工具,但搭配 Seagate Crystal Reports 可輕鬆實現專業報表功能。Crystal Reports 4.6 免費隨 VB5/NT BackOffice 附贈,含設計工具與列印控制項;發行時僅需部署控制項相關檔案。最新版 8.0 功能更強但免費版無設計器,建議 4.6 設計報表、8.0 控制項顯示列印,兩版相容。
sample.rpt (參考官方說明)CCrystalReport 包裝類別)IDD_ABOUTBOX 對話方塊ReportFileName 設為 sample.rptm_CrystalReportBOOL CAboutDlg::OnInitDialog() {
CDialog::OnInitDialog();
// 設定父視窗控制代碼 (關鍵步驟)
m_CrystalReport.SetWindowParentHandle((long)(this->m_hWnd));
// 列印報表到視窗
m_CrystalReport.PrintReport();
return TRUE;
}
ID_FILE_OPEN → OnFileOpen()ID_FILE_PRINT → OnFilePrint()void CMyReportView::OnFileOpen() {
char Filter[] = "Crystal Report files (*.rpt)|*.rpt|All files (*.*)|*.*||";
CRect rect;
GetClientRect(&rect);
CFileDialog OpenDlg(TRUE, 0, 0, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, Filter, NULL);
if (OpenDlg.DoModal() != IDOK) return;
CString m_fName = OpenDlg.GetPathName();
// 銷毀舊控制項
if (m_CrystalReport) m_CrystalReport.DestroyWindow();
// 動態建立控制項
if (!m_CrystalReport.Create(
AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)),
WS_CHILD | WS_VISIBLE, rect, this, IDC_CRYSTALREPORT1)) {
AfxMessageBox("控制項建立失敗!");
return;
}
// 設定控制項屬性
m_CrystalReport.SetWindowParentHandle((long)(this->m_hWnd));
m_CrystalReport.SetWindowBorderStyle(0); // 無邊框
m_CrystalReport.SetWindowLeft(0);
m_CrystalReport.SetWindowTop(0);
m_CrystalReport.SetWindowControls(FALSE); // 隱藏工具列
m_CrystalReport.SetReportFileName(m_fName); // 設定報表檔
m_CrystalReport.SetWindowWidth(rect.Width());
m_CrystalReport.SetWindowHeight(rect.Height());
// 設定報表公式參數 (範例: 公司名稱)
m_CrystalReport.SetFormulas(0, "Company=\"VC知識庫\"");
// 顯示到螢幕
m_CrystalReport.SetDestination(0); // 0=螢幕, 1=印表機
m_CrystalReport.PrintReport();
}
void CMyReportView::OnFilePrint() {
if (m_CrystalReport && m_CrystalReport.GetReportFileName() != "") {
m_CrystalReport.SetDestination(1); // 輸出到印表機
m_CrystalReport.PrintReport();
}
}
| 方法 | 用途 | 參數說明 |
|---|---|---|
| SetWindowParentHandle | 設定父視窗 | HWND 控制代碼 |
| SetReportFileName | 指定 .rpt 檔案 | 完整路徑 |
| SetFormulas | 設定報表公式 | 索引, "FormulaName=Value" |
| SetDestination | 設定輸出目標 | 0=螢幕, 1=印表機, 2=匯出檔案 |
| PrintReport | 執行列印/顯示 | 無 |
| SetWindowControls | 顯示/隱藏工具列 | TRUE/FALSE |
| 版本 | 設計器 | 控制項 | 建議用途 |
|---|---|---|---|
| 4.6 | ✅ 免費 | 舊版 | 報表設計 |
| 8.0 | ❌ 付費 | ✅ 強大、相容 4.6 格式 | 部署顯示/列印 |
掌握此整合技術,即可為 MFC 應用程式快速加入專業級報表功能。