2012-05-03 3 views
2

Windows CE 6.0이 포함 된 ARM 플랫폼에서 장치를 개발 중입니다. 목표 중 하나는 사용자가 장치에서 직접 인쇄 할 수있는 가능성을 제공하는 것입니다 (텍스트뿐 아니라!). 즉, Windows는 다양한 유형의 프린터를 처리해야합니다. 어떻게 이러한 기능을 실현할 수 있습니까?Windows CE 6.0에서 인쇄

내 추측은 다음과 같습니다 - PCL 인쇄 (당신은 여전히 ​​PCL 프린터를 얻을 수 있습니까?) - 네트워크 인쇄 -

감사 (그것을 수행하는 방법에 어떤 예를 들어?)!

답변

3

Windows CE 6.0에서 인쇄가 가능합니다. "\ WINCE600 \ PUBLIC \ COMMON \ OAK \ DRIVERS \ PRINTER \ PCL"에 PCL 드라이버의 예제가 있습니다. OS Design에 포함 시키려면 Configuraiton Properties -> Environment에서 SYSGEN_PRINTING, SYSGEN_PCL 및 SYSGEN_USB_PRINTER를 1로 설정하십시오. 샘플을 컴파일하고 pcl.dll을 OS Design에 추가하게됩니다. USB 프린터 클래스 드라이버도 추가됩니다. 액션 위

는 ASCII 코드로 인쇄 텍스트 우리를 보자

// initialize printing 
    //hPrinter = CreateFile(L"LPT1:", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); 
    //if (hPrinter == NULL) RETAILMSG(TRUE, (L"Error in OnClick5 (GUI): CreateFile() returned NULL")); 

    // print text WORKS 
    //WriteFile(hPrinter, szText, sizeof(szText), &cBytes, NULL); 

    // close printer port 
    //CloseHandle(hPrinter); 

그러나 예를 BMP 파일을 인쇄하려면, 우리가 정말 PCL 드라이버 (다음 코드를 보면)를 사용해야합니다. 문제는 내가 버그를 없앨 수 없다는 것입니다. StartDoc()은 항상 "네트워크 요청이 지원되지 않습니다"를 반환합니다. 인쇄 작업을 시작하는 적절한 방법은 무엇입니까?

LPVOID lpMsgBuf = NULL; 
    HDC hdc = NULL; 
    DOCINFO di; 
    DEVMODE dm; 

    // initialize DEVMODE struct 
    memset(&dm, 0, sizeof(DEVMODE)); 
    wcscpy(dm.dmDeviceName, L"Hewlett-Packard LaserJet P3010 Series"); 
    dm.dmSize = sizeof(DEVMODE); 
    dm.dmPaperSize = DMPAPER_A4; 
    dm.dmPrintQuality = DMRES_DRAFT; 
    dm.dmFields = DM_PAPERSIZE | DM_PRINTQUALITY; 

    //PAGESETUPDLG psd; 
    //memset(&psd, 0, sizeof(psd)); 
    //psd.hwndOwner = NULL; 
    //psd.hDevMode = NULL; 
    //psd.hDevNames = NULL; 
    //psd.Flags = PSD_RETURNDEFAULT; 
    //psd.lStructSize = sizeof(psd); 

    //PageSetupDlg(&psd); 
    //RETAILMSG(TRUE, (L"GUI: PageSetupDlg() result 0x%x", CommDlgExtendedError())); 

    //if (psd.hDevMode == NULL) return -1; 

    //DEVMODE* lpdm = (DEVMODE*)psd.hDevMode; 

    DEVMODE* lpdm = &dm; 

    // initialize device context 
    hdc = CreateDC(L"pcl.dll", L"Printer", L"LPT1:", lpdm); 
    if (hdc == NULL) { 
     RETAILMSG(TRUE, (L"GUI: CreateDC() error 0x%x", GetLastError())); 
     return -1; 
    } 

    // register abort procedure 
    SetAbortProc(hdc, AbortProc); 

    // initialize DOCINFO struct 
    memset(&di, 0, sizeof(DOCINFO)); 
    di.cbSize = sizeof(DOCINFO); 
    di.lpszDocName = L"logo.bmp"; 
    di.lpszOutput = NULL; 
    di.lpszDatatype = 0; 
    di.fwType = 0; 

    // print file 
    if (StartDoc(hdc, &di) <= 0) { 
     RETAILMSG(TRUE, (L"Error in OnClick5 (GUI): StartDoc() returned non-positive value")); 
     FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, 
      NULL, GetLastError(), 0, (LPTSTR)&lpMsgBuf, 0, NULL); 
     RETAILMSG(TRUE, ((LPWSTR)lpMsgBuf)); 
     LocalFree(lpMsgBuf); 
     DeleteDC(hdc); 
     return -1; 
    }