Drucken mit Druckereinrichtung
-
Hallo allerseits,
Ich habe ein Problem mit dem Drucken. Erst mal die Funktion dazu:
/* Datei drucken */ BOOL PrintFile(HWND hwndEdit) { PRINTDLG printer; DOCINFO docinfo; HDC hDCprinter; HANDLE hFile; LPSTR pszFileText; DWORD dwFileSize; BOOL bSuccess = FALSE; ZeroMemory(&printer, sizeof(PRINTDLG)); printer.lStructSize = sizeof(PRINTDLG); printer.hwndOwner = hwndEdit; printer.hDevMode = NULL; printer.hDevNames = NULL; printer.Flags = PD_RETURNDC|PD_PRINTSETUP; ZeroMemory(&docinfo, sizeof(DOCINFO)); docinfo.cbSize = sizeof(DOCINFO); docinfo.lpszDocName = szFileName; /* Datei zum Drucken in pszFileText laden */ hFile = CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if(hFile != INVALID_HANDLE_VALUE) { dwFileSize = GetFileSize(hFile, NULL); if(dwFileSize != 0xFFFFFFFF) { pszFileText = GlobalAlloc(GPTR, dwFileSize + 1); if(pszFileText != NULL) { DWORD dwRead; if(ReadFile( hFile, pszFileText, dwFileSize, &dwRead, NULL ) ) { pszFileText[dwFileSize] = '\0'; if(SetWindowText(hEdit, pszFileText)) bSuccess = TRUE; } GlobalFree(pszFileText); } } } else return FALSE; CloseHandle(hFile); /* Gibt es überhaupt etwas zum ausdrucken? */ if(pszFileText[0] == '\0') return FALSE; hDCprinter = CreateCompatibleDC(printer.hDC); PrintDlg((LPPRINTDLG)&printer); StartDoc(printer.hDC,&docinfo); StartPage(printer.hDC); /* Jetzt den Text der Datei ausdrucken */ TextOut(printer.hDC,50,50,pszFileText, dwFileSize); EndPage(printer.hDC); EndDoc(printer.hDC); DeleteDC(printer.hDC); DeleteDC(hDCprinter); if (printer.hDevMode != NULL) GlobalFree(printer.hDevMode); if (printer.hDevNames != NULL) GlobalFree(printer.hDevNames); return bSuccess; }
Ich öffne den Text der Datei szFileName, lese Ihn aus, womit der Text sich in pszFileText befindet. Wenn ich aber etwas ausdrucke passt etwas nicht mit den Zeichen. Dabei werde häufig Vierecke oder Zeichen jenseits des Ascii-Codes über 128 angezeigt. Außer dem passte es auch nicht mit den Zeilenumbrüche.
Ich vermute also ich muss den Text noch vor der Funktion TextOut() konvertieren. Oder? Weiß jemand eine Lösung auf das Problem?
Danke und Gruss
JonathanP.S.: Bitte keine ShellExecute()-Lösung dazu
-
Hallo nochmals,
Tut mir leide wegen dem schnellen Doppelposting. Ein Teil des Problems habe ich eben selbst gelöst. Ich Dusel habe mit
GlobalFree(pszFileText);
den Text noch vor dem Ausdruck freigegeben
Nur habe jetzt noch das Problem mit den Leerzeichen. Diese werden nun noch als Viereck dargestellt. Was kann ich dagegeben tun, ohne gleich Zeichen für Zeichen abzugraben? Gibt es ein Funktion dafür?
Gruss
Jon
-
Eine Frage dazu: Spaces werden bei dir von alleine nicht als Space gedruckt sondern als Viereck und CarriageReturns, Newlines, Tabs etc. werden sofort richtig gedruckt?
Bei mir ist es genau umgekehrt
-
Versuch doch mal einen anderen Font auszuwählen.
Mach mal
SelectObject(printer.hDC, GetStockObject(ANSI_FIXED_FONT));
zum testen.
Wofür brauchst du eigentlich hDCprinter?Jockel