Drucken des Inhalts von Rich-Edit-Steuerelementen
Dieser Abschnitt enthält Informationen zum Drucken des Inhalts von Rich-Edit-Steuerelementen.
Wichtige Informationen
Technologien
Voraussetzungen
- C/C++
- Programmierung der Windows-Benutzeroberfläche
Anweisungen
Verwenden der Druckvorschau
Um Text in einem Rich-Edit-Steuerelement so zu formatieren, wie er auf einem Zielgerät (normalerweise der gedruckten Seite) angezeigt wird, senden Sie die EM_SETTARGETDEVICE Nachricht, und übergeben Sie den Handle an einen Gerätekontext (HDC) des Zielgeräts und die gewünschte Zeilenbreite. Normalerweise erhalten Sie die Linienbreite, indem Sie GetDeviceCaps für die Ziel-HDC aufrufen.
Formatdruck für ein bestimmtes Gerät
Um einen Teil des Inhalts eines Rich-Edit-Steuerelements für ein bestimmtes Gerät zu formatieren, senden Sie die EM_FORMATRANGE Nachricht. Die FORMATRANGE-Struktur , die mit dieser Nachricht verwendet wird, gibt den zu formatierenden Textbereich sowie den HDC für das Zielgerät an. Optional sendet diese Nachricht den Text auch an den Drucker.
Verwenden von Banding
Banding ist der Prozess, bei dem eine einzelne Seite der Ausgabe mit einem oder mehreren separaten Rechtecken oder Bändern generiert wird. Wenn alle Bänder auf der Seite platziert werden, ergibt sich ein vollständiges Bild. Dieser Ansatz wird häufig von Rasterdruckern verwendet, die nicht über genügend Arbeitsspeicher oder die Möglichkeit verfügen, eine vollständige Seite gleichzeitig abzubilden.
Verwenden Sie zum Implementieren von Banding die EM_DISPLAYBAND Nachricht, um aufeinanderfolgende Teile des Inhalts des Rich-Edit-Steuerelements an das Gerät zu senden. Diese Nachricht wird auf dem Gerät ausgegeben, das in einem vorherigen Aufruf von EM_FORMATRANGE angegeben wurde. Natürlich sollte der wParam-Parameter der EM_FORMATRANGE Nachricht 0 sein, sodass das Drucken nicht von dieser Nachricht initiiert wird.
PrintRTF-Codebeispiel
Der folgende Beispielcode gibt den Inhalt eines Rich-Edit-Steuerelements auf dem angegebenen Drucker aus.
// hwnd is the HWND of the rich edit control.
// hdc is the HDC of the printer. This value can be obtained for the
// default printer as follows:
//
// PRINTDLG pd = { sizeof(pd) };
// pd.Flags = PD_RETURNDC | PD_RETURNDEFAULT;
//
// if (PrintDlg(&pd))
// {
// HDC hdc = pd.hDC;
// ...
// }
BOOL PrintRTF(HWND hwnd, HDC hdc)
{
DOCINFO di = { sizeof(di) };
if (!StartDoc(hdc, &di))
{
return FALSE;
}
int cxPhysOffset = GetDeviceCaps(hdc, PHYSICALOFFSETX);
int cyPhysOffset = GetDeviceCaps(hdc, PHYSICALOFFSETY);
int cxPhys = GetDeviceCaps(hdc, PHYSICALWIDTH);
int cyPhys = GetDeviceCaps(hdc, PHYSICALHEIGHT);
// Create "print preview".
SendMessage(hwnd, EM_SETTARGETDEVICE, (WPARAM)hdc, cxPhys/2);
FORMATRANGE fr;
fr.hdc = hdc;
fr.hdcTarget = hdc;
// Set page rect to physical page size in twips.
fr.rcPage.top = 0;
fr.rcPage.left = 0;
fr.rcPage.right = MulDiv(cxPhys, 1440, GetDeviceCaps(hDC, LOGPIXELSX));
fr.rcPage.bottom = MulDiv(cyPhys, 1440, GetDeviceCaps(hDC, LOGPIXELSY));
// Set the rendering rectangle to the pintable area of the page.
fr.rc.left = cxPhysOffset;
fr.rc.right = cxPhysOffset + cxPhys;
fr.rc.top = cyPhysOffset;
fr.rc.bottom = cyPhysOffset + cyPhys;
SendMessage(hwnd, EM_SETSEL, 0, (LPARAM)-1); // Select the entire contents.
SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM)&fr.chrg); // Get the selection into a CHARRANGE.
BOOL fSuccess = TRUE;
// Use GDI to print successive pages.
while (fr.chrg.cpMin < fr.chrg.cpMax && fSuccess)
{
fSuccess = StartPage(hdc) > 0;
if (!fSuccess) break;
int cpMin = SendMessage(hwnd, EM_FORMATRANGE, TRUE, (LPARAM)&fr);
if (cpMin <= fr.chrg.cpMin)
{
fSuccess = FALSE;
break;
}
fr.chrg.cpMin = cpMin;
fSuccess = EndPage(hdc) > 0;
}
SendMessage(hwnd, EM_FORMATRANGE, FALSE, 0);
if (fSuccess)
{
EndDoc(hdc);
}
else
{
AbortDoc(hdc);
}
return fSuccess;
}
Zugehörige Themen