如提

解决方案 »

  1.   

    你看看这个例子:
    http://www.codeproject.com/printing/PrintExtension.asp?target=dialog%7Cprint
      

  2.   

    响应你的按键,写上这段代码
    void MyWnd::PrintBaseInfo()
    {
    CWinApp *pApp = ::AfxGetApp();
    CPrintInfo printInfo;
    CDC dcPrint; //打印确认对话框
    if(pApp->DoPrintDialog(printInfo.m_pPD) != IDOK)
    return; ASSERT(printInfo.m_pPD != NULL);
    ASSERT(printInfo.m_pPD->m_pd.hDC != NULL); //当前预览页数
    printInfo.m_nNumPreviewPages = pApp->m_nNumPreviewPages;
    //页码显示方式采用预览方式
    VERIFY(printInfo.m_strPageDesc.LoadString(AFX_IDS_PREVIEWPAGEDESC)); DOCINFO docInfo;//打印任务信息
    memset(&docInfo, 0, sizeof(DOCINFO));
    docInfo.cbSize = sizeof(DOCINFO);
    docInfo.lpszDocName = "MyAPP";//打印任务标题 //attach printer dc
    dcPrint.Attach(printInfo.m_pPD->m_pd.hDC);  
    dcPrint.m_bPrinting = TRUE; //准备开始打印
    OnBeginPrinting(&dcPrint, &printInfo); // disable main window
    AfxGetMainWnd()->EnableWindow(false); if(!printInfo.m_bDocObject && dcPrint.StartDoc(&docInfo) == SP_ERROR)
    {
    //初始化失败退出打印
    AfxGetMainWnd()->EnableWindow(TRUE);
    OnEndPrinting(&dcPrint, &printInfo);
    dcPrint.Detach();
    AfxMessageBox(AFX_IDP_FAILED_TO_START_PRINT);
    return;
    } //用户数据用以保存当前打印位置(当前已打印到多少行)
    printInfo.m_lpUserData = new int;
    memset(printInfo.m_lpUserData, 0, 4); BOOL bError = FALSE;
    if (printInfo.m_bDocObject == NULL)
    {
    for (printInfo.m_nCurPage = 0; 
    printInfo.m_bContinuePrinting; 
    printInfo.m_nCurPage++)
    {
    // set up drawing rect to entire page (in logical coordinates)
    printInfo.m_rectDraw.SetRect(0, 0, 
    dcPrint.GetDeviceCaps(HORZRES),
    dcPrint.GetDeviceCaps(VERTRES));
    dcPrint.DPtoLP(&printInfo.m_rectDraw);

    // attempt to start the current page
    if (dcPrint.StartPage() < 0)
    {
    bError = TRUE;
    break;
    }

    //向打印机DC输出内容
    ASSERT(printInfo.m_bContinuePrinting);
    OnPrint(&dcPrint, &printInfo); if (dcPrint.EndPage() < 0)
    {
    bError = TRUE;
    break;
    }
    }
    }

    // cleanup document printing process
    if (!printInfo.m_bDocObject)
    {
    if (!bError)
    dcPrint.EndDoc();
    else
    dcPrint.AbortDoc();
    }

    AfxGetMainWnd()->EnableWindow(true);    // enable main window
    dcPrint.Detach(); if(printInfo.m_lpUserData != NULL)
    {
    delete printInfo.m_lpUserData;
    printInfo.m_lpUserData = NULL;
    }
    }//自己再根据需要定制下面的函数
    void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
    void OnPrint(CDC* pDC, CPrintInfo* pInfo);
    void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
    我想应该可以满足你的打印需求