2012-05-03 15 views
2

Windows CE 6.0でARMプラットフォーム上にデバイスを開発しています。目標の1つは、ユーザーがデバイスから直接印刷する可能性(テキストだけでなく)を提供することです。つまり、Windowsはさまざまな種類のプリンタを処理する必要があります。どのようにしてこのような機能を実現できますか?Windows CE 6.0での印刷

私の推測は、次のとおりです。 - PCL印刷(あなたはまだPCLプリンタを得ることができますか?) - ネットワーク印刷(それを行う方法 - 任意の例?)

ありがとう!

答えて

3

Windows CE 6.0で印刷できます。 "\ WINCE600 \ PUBLIC \ COMMON \ OAK \ DRIVERS \ PRINTER \ PCL"にPCLドライバの例があります。それをOSデザインに含めるには、構成プロパティー - >環境でSYSGEN_PRINTING、SYSGEN_PCLおよびSYSGEN_USB_PRINTERを1に設定します。サンプルをコンパイルし、pcl.dllをOS Designに追加します。 USB Printer Classドライバも追加されます。アクションの上

は、私たちは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; 
    } 
関連する問題