我想做一个打印预览的界面,类似于word,但功能要求很简单,只要能把打印机上要显示的先显示在一个新的最大化窗口里就行。
我是这样创建最大化窗口的:
 CFrameWnd *pFWnd = new CFrameWnd;
  pFWnd->Create(....);
往窗口中画图时出现了异常:
  HDC hdc = GetDC(AfxGetMainWnd()->GetSafeHwnd());
    LineTo(200,200);
    ReleaseDC(...);  
以上语句没有实现在新建的窗口中画图。
问题:
1。我应该怎样在这个新开的窗口中画图?
2。我如果想在窗口顶部加几个按钮,(类似word的打印预览界面)应该怎样实现?
3。如果大家有实现的好想法,欢迎给我emai:[email protected]

解决方案 »

  1.   

    (轉)
    void CMyReportView::OnFileOpen()
    {
    char Filter[] = "Crystal Report files(*.rpt)|*.rpt|All files(*.*)|*.*||";
    CRect rect;
    CFileDialog OpenDlg(TRUE,0,0,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,(LPCTSTR)Filter,NULL);
    if(OpenDlg.DoModal()!=IDOK) ///显示文件对话框
    return;
    CString m_fName=OpenDlg.GetPathName(); ///取得文件名
    if(m_CrystalReport)
    m_CrystalReport.DestroyWindow();
    GetClientRect(rect);
    ///////////////////创建控件///////////////
    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知识库\""); ///将报表中的Company变量的值设置为VC知识库
    m_CrystalReport.SetDestination(0); ///设置输出对象是屏幕
    m_CrystalReport.PrintReport(); ///显示报表

    void CMyReportView::OnFilePrint() 
    {
    if(m_CrystalReport && m_CrystalReport.GetReportFileName() != "")
    {
    m_CrystalReport.SetDestination(1); ///设置输出对象是打印机 
    m_CrystalReport.PrintReport(); ///打印------------
    請看:http://passmatlab.myetang.com/vc/dat/18.htm
      

  2.   

    参考一下下面这个程序对话框中使用打印/预览的演示代码--作者:hrx
    http://www.vckbase.com/code/downcode.asp?id=386
      

  3.   

    AfxGetMainWnd()???
    你设置mainwnd了吗?