Freigeben über


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;
    
}

Verwenden von Rich Edit-Steuerelementen

Demo allgemeiner Windows-Steuerelemente (CppWindowsCommonControls)