Aracılığıyla paylaş


Zengin Düzenleme Denetimlerinin İçeriğini Yazdırma

Bu bölüm, zengin düzenleme denetimlerinin içeriğini yazdırma hakkında bilgi içerir.

Bilmeniz gerekenler

Teknolojileri

Önkoşullar

  • C/C++
  • Windows Kullanıcı Arabirimi Programlama

Talimatlar

Baskı Önizleme'yi kullanma

Zengin düzenleme denetimindeki metni hedef cihazda (genellikle yazdırılan sayfada) görünecek şekilde biçimlendirmek için, tutamacı hedef cihazın cihaz bağlamına (HDC) ve istenen çizgi genişliğine geçirerek EM_SETTARGETDEVICE iletisini gönderin. Genellikle hedef HDC için GetDeviceCaps çağırarak çizgi genişliğini elde edersiniz.

Belirli Bir Cihaz için Yazdırmayı Biçimlendir

Belirli bir cihaz için zengin düzenleme denetiminin içeriğinin bir bölümünü biçimlendirmek için EM_FORMATRANGE iletisini gönderin. Bu iletiyle birlikte kullanılan FORMATRANGE yapısı, hem biçimlendirecek metin aralığını hem de hedef cihaz için HDC'yi belirtir. İsteğe bağlı olarak, bu ileti metni yazıcıya da gönderir.

Bantlamayı kullan

Şerit oluşturma, bir veya daha fazla ayrı dikdörtgen veya şerit kullanılarak tek bir çıkış sayfasının oluşturulması işlemidir. Tüm bantlar sayfaya yerleştirildiğinde, tam bir görüntü elde edilir. Bu yaklaşım, genellikle yeterli belleğe sahip olmayan veya bir seferde tam bir sayfayı görüntüleme yeteneği olmayan raster yazıcılar tarafından kullanılır.

Bant oluşturma uygulamak için EM_DISPLAYBAND iletisini kullanarak zengin düzenleme denetiminin içeriğinin birbirini izleyen bölümlerini cihaza gönderin. Bu mesaj, EM_FORMATRANGEile ilgili daha önceçağrısında belirtilmiş olan cihaza yazdırılmak üzere gönderilir. Yazdırmanın bu ileti tarafından başlatılmaması için EM_FORMATRANGE iletisinin wParam parametresi sıfır olmalıdır.

PrintRTF Kod Örneği

Aşağıdaki örnek kod, zengin düzenleme denetiminin içeriğini belirtilen yazıcıya yazdırır.

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

Zengin Düzenleme Denetimleri Kullanarak

Windows ortak denetimler tanıtımı (CppWindowsCommonControls)