用ATL做了个IE中用的打印控件,页面设置可以通过安装钩子,得到页面设置的窗口。
但是打印设置,用同样的方法得不到那个打印窗口,不知道到怎么进行打印设置,即打印机选择,打印份数,缩放比例等。打印是调用IE的打印命令,不是WinAPI的打印。
希望高手指点。

解决方案 »

  1.   

    自己做打印,完整的过程如下,可以获得打印份数,页面范围: int nMaxPage = 20;
    PRINTDLG pd;
    memset(&pd,0,sizeof(PRINTDLG));
    pd.lStructSize = sizeof(PRINTDLG);
    pd.Flags = PD_RETURNDC;
    pd.nMaxPage = nMaxPage;
    pd.nMinPage = 1;
    pd.nFromPage = 1;
    pd.nToPage = nMaxPage;
    pd.nCopies = 1;

    //显示打印对话框,由用户来设定纸张大小等。
    if(!PrintDlg(&pd)) return 0; 
    ASSERT(pd.hDC!=NULL);

    //设置DOCINFO结构
    DOCINFO di;
    memset(&di,0,sizeof(DOCINFO));
    di.cbSize = sizeof(DOCINFO);
    di.lpszDocName = "Doc's title"; 

    //启动打印
    if(StartDoc(pd.hDC, &di)!=SP_ERROR){
    // 获取页面范围
    UINT nEndPage = pd.nToPage;
    UINT nStartPage = pd.nFromPage;
    if (nEndPage < pd.nMinPage)
    nEndPage = pd.nMinPage;
    if (nEndPage > pd.nMaxPage)
    nEndPage = pd.nMaxPage;
    if (nStartPage < pd.nMinPage)
    nStartPage = pd.nMinPage;
    if (nStartPage > pd.nMaxPage)
    nStartPage = pd.nMaxPage;
    if (nEndPage<nStartPage)
    nEndPage = nStartPage; BOOL bError = FALSE;

    // begin page printing loop
    for (int nCurPage = nStartPage;
    nCurPage <= nEndPage && !dlg.m_bStop; nCurPage ++)
    {
    //处理其他消息
    MSG msg;
    while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    } if (StartPage(pd.hDC)< 0){
    bError = TRUE;
    break;
    }
                             
                            //这里添加打印内容
    char *szInfo="test";
    TextOut(pd.hDC,10,10,szInfo,strlen(szInfo));

    if (EndPage(pd.hDC) < 0)
    {
    bError = TRUE;
    break;
    }
    }

    if (bError)
    AbortDoc(pd.hDC);
    else
    EndDoc(pd.hDC); }

    //打印结束
    DeleteDC(pd.hDC);
      

  2.   

    楼上的方法,不知道怎么用来打印网页呢?
    我现在是想打印网页,所以调用的是IE的API,没敢用WIN API。