Hoe je de inhoud van rich text bewerkingselementen kunt afdrukken
Deze sectie bevat informatie over het afdrukken van de inhoud van uitgebreide besturingselementen voor bewerken.
Wat u moet weten
Technologieën
Voorwaarden
- C/C++
- Programmeren van Windows-gebruikersinterface
Aanwijzingen
Afdrukvoorbeeld gebruiken
Als u tekst wilt opmaken in een rich edit control zoals deze wordt weergegeven op een doelapparaat (meestal de afgedrukte pagina), verzendt u het EM_SETTARGETDEVICE bericht en geeft u de referentie van een apparaatcontext (HDC) van het doelapparaat en de gewenste regelbreedte door. Meestal krijgt u de lijnbreedte door GetDeviceCaps- aan te roepen voor de doel-HDC.
Afdrukken opmaken voor een specifiek apparaat
Als u een deel van de inhoud van een uitgebreid bewerkingsbesturingselement voor een specifiek apparaat wilt opmaken, verzendt u het EM_FORMATRANGE bericht. De FORMATRANGE structuur die met dit bericht wordt gebruikt, geeft het tekstbereik op dat moet worden opgemaakt, evenals de HDC voor het doelapparaat. Optioneel verzendt dit bericht ook de tekst naar de printer.
Banding gebruiken
Banding is het proces waarmee één pagina met uitvoer wordt gegenereerd met behulp van een of meer afzonderlijke rechthoeken of stroken. Wanneer alle banden op de pagina zijn geplaatst, ontstaat een complete afbeelding. Deze methode wordt vaak gebruikt door rasterprinters die onvoldoende geheugen of mogelijkheid hebben om een volledige pagina tegelijk weer te geven.
Als u banding wilt implementeren, gebruikt u het EM_DISPLAYBAND bericht om opeenvolgende delen van de inhoud van het rich edit-besturingselement naar het apparaat te verzenden. Dit bericht wordt afgedrukt op het apparaat dat in een vorige aanroep naar EM_FORMATRANGEis opgegeven. Natuurlijk moet de parameter wParam van het EM_FORMATRANGE bericht nul zijn, zodat het afdrukken niet door dat bericht wordt gestart.
Voorbeeld van PrintRTF-code
Met de volgende voorbeeldcode wordt de inhoud van een rich edit-besturingselement afgedrukt op de opgegeven printer.
// 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;
}
Verwante onderwerpen