|
|
|
|
|
SftPrintPreview_RenderRicheditWindow_Callback |
The SftPrintPreview_RenderRicheditWindow_Callback function implements a callback used to print/preview RichEdit controls.
C
BOOL CALLBACK SftPrintPreview_RenderRicheditWindow_Callback(
LPSFTPRINTPREVIEW_DRAWINFO lpInfo);
Parameters
lpInfo
A pointer to a SFTPRINTPREVIEW_DRAWINFO structure defining the current rendering operation.
Returns
The return value is TRUE if the function was successful, FALSE otherwise.
Comments
The SftPrintPreview_RenderRicheditWindow_Callback function implements a callback used to print/preview RichEdit controls.
It is used with the FilePrintPreview function (C++) or as the lpDrawInfoProc member of the SFTPRINTPREVIEW_CONTROL structure (C) when printing/previewing RichEdit controls.
Example
Actual Implementation of the SftPrintPreview_RenderRicheditWindow_Callback for RichEdit controls, built into SftPrintPreview/DLL.
C
BOOL CALLBACK SftPrintPreview_RenderRicheditWindow_Callback(
LPSFTPRINTPREVIEW_DRAWINFO lpInfo)
{
ASSERT(lpInfo->hwndContent);
if (!lpInfo->hwndContent) return FALSE;
switch (lpInfo->function) {
case SFTPRINTPREVIEW_PRINT_CLEARCACHE:
AU(SendMessage)(lpInfo->hwndContent, EM_FORMATRANGE, 0, (LPARAM)NULL);
return TRUE;
case SFTPRINTPREVIEW_PRINT_DIMENSIONS:
lpInfo->contentWidth = -1;
return TRUE;
case SFTPRINTPREVIEW_PRINT_ONEPAGE:
break;// continue below;
default:
return TRUE;
}
//SFTPRINTPREVIEW_PRINT_ONEPAGE
FORMATRANGE fr;
memset(&fr, 0, sizeof(fr));
fr.hdc = lpInfo->hDC;
fr.hdcTarget = lpInfo->hDCPrinter;
fr.rc.left = (int) (((float)lpInfo->ClientRect.left)/GetDeviceCaps(lpInfo->hDC, LOGPIXELSX)*1440);
fr.rc.top = (int) (((float)lpInfo->ClientRect.top)/GetDeviceCaps(lpInfo->hDC, LOGPIXELSX)*1440);
fr.rc.right = fr.rc.left + (int) (((float)(lpInfo->ClientRect.right-lpInfo->ClientRect.left))/GetDeviceCaps(lpInfo->hDC, LOGPIXELSX)*1440);
fr.rc.bottom = fr.rc.top + (int) (((float)(lpInfo->ClientRect.bottom-lpInfo->ClientRect.top))/GetDeviceCaps(lpInfo->hDC, LOGPIXELSY)*1440);
fr.rcPage = fr.rc;
fr.chrg.cpMin = (int) (lpInfo->absPage > 0) ? lpInfo->previousVisitedPageInfo : 0;
fr.chrg.cpMax = -1;
long nextProcessChar = 0;
nextProcessChar = AU(SendMessage)(lpInfo->hwndContent, EM_FORMATRANGE, TRUE, (LPARAM)&fr);
GETTEXTLENGTHEX gtl;
gtl.flags = GTL_DEFAULT;
#if defined(UNICODE)
gtl.codepage = 1200;
#else
gtl.codepage = CP_ACP;
#endif
int len = AU(SendMessage)(lpInfo->hwndContent, EM_GETTEXTLENGTHEX, (WPARAM)>l, 0);
if (nextProcessChar >= len)
lpInfo->lastPage = lpInfo->absPage;
lpInfo->visitedPageInfo = nextProcessChar;
return TRUE;
}
See Also C/C++ API | C++ Classes | Notifications