2013-09-24 7 views
0

내 문서의 "기본"페이지 크기를 설정하는 데 문제가 있습니다. Windows에서 Visual C++를 사용하고 있으며 GDI 호출 (이전 버전과의 호환성을 위해 필요함)이 있습니다.C++ 인쇄용 GDI 페이지 설정 설정

지금까지 나의 기본 접근 방식은 기본값 인 DEVMODE을 얻고 원하는 속성을 설정 한 다음 사용자가 원하는대로 변경할 것인지 묻는 메시지를 표시합니다. 그러나 페이지 크기에 아무런 차이가없는 것처럼 보입니다. 오리엔테이션에서 작동합니다.

내가 뭘 잘못하고 있니?

HDC GetPrinterDC() { 
    // Initialize device 
    PRINTDLG pd = {0}; 
    pd.lStructSize = sizeof(pd); 
    pd.Flags = PD_RETURNDEFAULT; 
    PrintDlg(&pd); 

    // If device initialization failed, abort 
    if (pd.hDevMode == NULL) return NULL; 

    // Get the actual memory pointer 
    PDEVMODE dm = (PDEVMODE)GlobalLock(pd.hDevMode); 
    if (dm) { 
     // Set any properties that are specific for our document 
     if (dm->dmFields & DM_ORIENTATION) 
      dm->dmOrientation = DMORIENT_LANDSCAPE; 

     if (dm->dmFields & DM_PAPERSIZE) 
      dm->dmPaperSize = 0; 

     if (dm->dmFields & DM_PAPERLENGTH) 
      dm->dmPaperLength = 3302; // 13in 

     if (dm->dmFields & DM_PAPERWIDTH) 
      dm->dmPaperWidth = 4572; // 18in 

     GlobalUnlock(pd.hDevMode); 
    } 

    // Initialize a PRINTDLG structure. 
    pd.hwndOwner = GetForegroundWindow(); 
    pd.Flags = PD_RETURNDC | PD_HIDEPRINTTOFILE | PD_DISABLEPRINTTOFILE | PD_NOPAGENUMS | PD_NOSELECTION | PD_USEDEVMODECOPIESANDCOLLATE ; 

    // Retrieve the printer DC 
    HDC hdc = NULL; 
    if (PrintDlg(&pd)) hdc = pd.hDC; 

    // Free the resources allocated 
    if (pd.hDevMode != NULL) GlobalFree(pd.hDevMode); 
    if (pd.hDevNames != NULL) GlobalFree(pd.hDevNames); 

    return hdc; 
} 
+0

내가 그것을 현재 기본 프린터의 현재 기본 설정을 제공합니다 생각 - 어떻게 당신은하지 말? – chowey

답변

1

분명히 당신은 당신이 원하는 무엇이든 될하기 위해 DEVMODE 구조체에 dmFields을 지정할 수 있습니다.

코드는 다음과 같아야합니다

PDEVMODE dm = (PDEVMODE)GlobalLock(pd.hDevMode); 
    if (dm) { 
     // Set any properties that are specific for our document 
     dm->dmFields = dm->dmFields | DM_ORIENTATION | DM_PAPERSIZE 
      | DM_PAPERLENGTH | DM_PAPERWIDTH; 
     dm->dmOrientation = DMORIENT_LANDSCAPE; 
     dm->dmPaperSize = 0; 
     dm->dmPaperLength = 3302; // 13in 
     dm->dmPaperWidth = 4572; // 18in 

     GlobalUnlock(pd.hDevMode); 
    }