VC++ D2D呈现水晶报表并实时刷新

    最近项目中需要使用到水晶报表,在Win32工程中使用Direct2D来呈现,百度谷歌查找了很多资料发现水晶报表在VC中应用的相关资料不多,所以这里共享下给有需要的朋友。
    首先导入水晶报表控件,因为VS2010开始就不再自带水晶报表控件,所以需要自己去下载安装crystal reports for visual studio 2010,百度一下应该就能找到,在VS2012中照样能用。安装之后找到安装目录下的craxddrt.dll,根据路径导入。因为使用的ADO连接的数据库,这里一并写上代码:
#import "..\\CrystalReports\SAP BusinessObjects Enterprise XI 4.0\win32_x86\craxddrt.dll" no_namespace rename ("FindText", "FindMyText") rename ("EnumFontFamilies", "MyEnumFontFamilies")  
using namespace CrystalActiveXReportViewerLib13;
#import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" no_namespace rename("EOF", "EndOfFile")
在这里我使用了ATL窗口来当容器导入和打开水晶报表,然后通过抓取ATL窗口DC生成D2DBitmap在我的工程中呈现,第一步创建ATL窗口打开*.rpt文件,并使用ADO连接现有数据库,
private
    CAxWindow m_WindowContainer;// 用于添加 报表控件的窗口
    CComPtr<CrystalActiveXReportViewerLib13::ICrystalReportViewer12> m_pCrytalReporterViewer; //ReportViewer
    IApplicationPtr m_Application;
    IReportPtr m_Report;

    RECT m_rcAxWindow; //ATL窗口rect
    HWND m_hwndAtlAxWinMain; //ATL窗口句柄
    _ConnectionPtr   m_ADOConnectionPtr;
    _RecordsetPtr    m_ADORecordsetPtr;
    _CommandPtr      m_ADOCommandPtr;
HRESULT  hr = S_FALSE;
try
{
    m_rcAxWindow.left = 0;
    m_rcAxWindow.top = 0;
    m_rcAxWindow.right = m_rcAxWindow.left + ::GetSystemMetrics(SM_CXSCREEN)* 0.57f;
    m_rcAxWindow.bottom = m_rcAxWindow.top + ::GetSystemMetrics(SM_CYSCREEN)* 0.57f;

    AtlAxWinInit();
    RECT rcClient = { m_rcAxWindow.left, m_rcAxWindow.top, m_rcAxWindow.right - m_rcAxWindow.left,m_rcAxWindow.bottom - m_rcAxWindow.top};

    LPCTSTR p=L"CrystalReports13.ActiveXReportViewer.1";
    m_hwndAtlAxWinMain = m_WindowContainer.Create(g_hViewWindow, rcClient, p, WS_POPUP|WS_VISIBLE );
    if(!m_hwndAtlAxWinMain)
        return FALSE;
    MoveWindow(m_hwndAtlAxWinMain,m_rcAxWindow.left-1000, m_rcAxWindow.top, m_rcAxWindow.right - m_rcAxWindow.left,m_rcAxWindow.bottom - m_rcAxWindow.top,FALSE);   
    hr = m_WindowContainer.QueryControl(__uuidof(ICrystalReportViewer12),(void**)&m_pCrytalReporterViewer); 

    char tempRptPath[ARRAY_MAX] = {
  0};      
    WCHAR tempSrcFile[ARRAY_MAX]= {
  0};
    WCHAR tempDBIP[ARRAY_MAX] ={
  0};
    WCHAR tempDBName[ARRAY_MAX] ={
  0};
    WCHAR tempDBUser[ARRAY_MAX] ={
  0};
    WCHAR tempDBPWD[ARRAY_MAX] ={
  0};


    strca
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值