我的打印预览中,默认是纵向的预览,因为要打印报表,纵向一般都打不下,需要手动改成横向,请问可不可以在程序中设置,默认是横向打印啊??谢谢了

解决方案 »

  1.   

    #define FONTSIZE 14
      //获取打印机的设备属性
      CPrintDialog dlgPrint(FALSE);
      //得到当前系统缺省打印机设置
      if(!dlgprint.GetDefau1ts() )return FALSE;
      LPDEVMODE pDM=dlgPrint.GetDevMode();
      if (pDM==NULL)return FALSE;
      //调整打印方向
      //pDM->dm0rientation=DMORIENT_LANDSCAPE(横向)‖
      DMORIENT_PORTRAIT(纵向);
      //调整纸张大小
      //制式纸张:pDM->dmPaperSize=DMPAPER_A3等;
      //或自定义大小:单位:1/10毫米
      //pDM->dmPaperSize=DMPAPER_USER;
      //pDM->dmPaperLength=纸张高度;
      //pDM->dmPaperWidth=纸张宽度;
      //解锁由CPrintDialog::GetDevMode()封锁的内存
      ::GlobalUn1ock(pDM);
      //联结打印DC,m_hDC是定义为HDC m_hDC的类成员变量
      m_hDC=dlgPrint.CreatePrinterDC();
      //m_DC是定义为CDC m_DC的类成员变量
      if (!m_DC.Attach(m_hDC)return FALSE;
      //设置打印廯 标志
      m_DC.m_bPrinting=TRUE;
      //根据打印机分辨率建立打印字体
      //得到每英寸点数
      short cxInch=m_DC.GetDeviceCaps(LOGPIXELSX);
      short cyInch=m_DC.GetDeviceCaps(LOGPIXELSY);
      //建立打印字体,m_fontPrint是定义为CFont m_fontPrint的类成员变量
      if (!m_fontPrint.CreateFont(MulDiv(FONTSIZE,-cyInch,
    72),
      0,0,0,FW_NORMAL,0,0,0,
      GB2312_CHARSET,OUT_CHARACTER_PRECIS,CLIP_CHA
    RACTER_PRECIS,
      DEFAULT_QUALITY,DEFAULT_PITCH|FF—DONTCARE,HFONTNAME)
    ...................................
      

  2.   

    下面是我用ATL写的一个直接设置打印机的函数,你在mfc找到响应的类就可完成
    我不常来,如果有问题不能保证及时回复
    //*****************************************************************
    // 函数名称 :CReportJobInfo::MySetPrinter2
    //
    // 功能描述 : 不用设置对话框,直接改变打印机设置
    //
    // 返回值 :BOOL
    //
    // 参数 :
    // [LPTSTR pPrinterName] :目标打印机名称
    // [short dmPaperSize] :纸张大小A3...
    // [short  dmOrientation] :方向
    // [short  dmPaperLength] :自定义尺寸时用
    // [short  dmPaperWidth] :自定义尺寸时用
    //*****************************************************************BOOL CReportJobInfo::MySetPrinter2(LPTSTR pPrinterName, short dmPaperSize,short  dmOrientation,short  dmPaperLength, short  dmPaperWidth)
    {
    CPrinterInfo<1> pi;
    LONG lSize;
    HANDLE hPrn;
    BOOL bClosePrn=FALSE; pi.GetPrinterInfo(m_printer);
    //换打印机
    if(pPrinterName&&lstrcmpi(pPrinterName,pi.m_pi->pName)!=0)
    {
    //打开打印机
    if(!OpenPrinter(pPrinterName, &hPrn,NULL)) 
    return FALSE;
    bClosePrn=TRUE;
    }
    else
    hPrn=m_printer; //取最新的打印机信息
    pi.GetPrinterInfo(hPrn);
    //打印机属性
    lSize = DocumentProperties(NULL,hPrn,pi.m_pi->pName,NULL,NULL,0);
    if(lSize<0) 
    {
    if(bClosePrn) ClosePrinter(hPrn);
    return FALSE;
    } DEVMODE * pDM = (DEVMODE *)malloc(lSize);
    if(pDM==NULL)
    return FALSE; //取打印机缺省设置
    if(DocumentProperties(NULL,hPrn,pi.m_pi->pName,pDM,pDM,DM_OUT_BUFFER)<0)
    {
    free(pDM);
    if(bClosePrn) ClosePrinter(hPrn);
    return FALSE;
    } pDM->dmPaperSize = dmPaperSize;
    pDM->dmFields |= DM_PAPERSIZE;
    pDM->dmOrientation=dmOrientation;
    pDM->dmFields |= DM_ORIENTATION; if(dmPaperSize==DMPAPER_USER)
    {
    pDM->dmPaperLength =dmPaperLength; //纸张长度
    pDM->dmPaperWidth =dmPaperWidth;  //纸张宽度
    pDM->dmFields |=DM_PAPERLENGTH|DM_PAPERWIDTH;
    } //设置用户打印设置
    if(DocumentProperties(NULL,hPrn,pPrinterName,pDM,pDM,DM_IN_BUFFER|DM_OUT_BUFFER)<0)
    {
    free(pDM);
    if(bClosePrn) ClosePrinter(hPrn);
    return FALSE;
    } //设置为当前打印机
    if(bClosePrn) m_printer.Attach(hPrn);
    m_devmode.CopyFromDEVMODE(pDM);
    free(pDM);
    return TRUE;
    }