ITextServices分页打印的问题
现在创建了一个无窗口的富文本控件。
可以用ITextServices::TxDraw绘出内容,
但是现在,希望把RTF内容分页(48Pixel*48Pixel每页)打印在内存中,
按照众多介绍,应该可用EM_FORMATRANGE/EM_DISPLAYBAND
用下面的函数希望实现打印第nPage页,//若指定的页非常大,则返回总共的页数
int PrintTest1(ITextServices *pTxService,HDC hdc, RECT rcPage,int nPage)
{
HRESULT hr;
int nMapMode =SetMapMode ( hdc, MM_TEXT );
FORMATRANGE fr;
ZeroMemory(&fr, sizeof(fr));
fr.hdc = fr.hdcTarget = hdc;
// Set up the page.1440 twips = 1 inch
fr.rcPage.left = rcPage.left * 1440 /GetDeviceCaps(hdc, LOGPIXELSX);
fr.rcPage.top = rcPage.top * 1440 /GetDeviceCaps(hdc, LOGPIXELSX);
fr.rcPage.right = rcPage.right* 1440 /GetDeviceCaps(hdc, LOGPIXELSX);
fr.rcPage.bottom = rcPage.bottom * 1440 /GetDeviceCaps(hdc, LOGPIXELSX);
fr.rc=fr.rcPage;
// Entire document.
fr.chrg.cpMin = 0;
fr.chrg.cpMax = -1;
if (pTxService==NULL)
{
SetMapMode ( hdc, nMapMode );
return -1;
}
LONG lTextLength = 0; // Length of document.
LONG lTextPrinted = 0; // Amount of document printed.
hr=pTxService->TxSendMessage(WM_GETTEXTLENGTH, 0, 0 ,(LRESULT*)<extLength);
if (!SUCCEEDED(hr))
{
::ErrorOut(hr);
return -1;
}
int nPageCnt=0;
do
{
if (nPageCnt==nPage)
{//nPageCnt is 0 based
hr=pTxService->TxSendMessage(EM_FORMATRANGE,
TRUE,
(LPARAM)&fr,
(LRESULT*)<extPrinted);
if (!SUCCEEDED(hr))
{
::ErrorOut(hr);
return -1;
}
}
else
{
hr=pTxService->TxSendMessage(EM_FORMATRANGE, FALSE//Just Measured
,(LPARAM)&fr,(LRESULT*)<extPrinted);
if (!SUCCEEDED(hr))
{
::ErrorOut(hr);
return -1;
}
hr=pTxService->TxSendMessage(EM_DISPLAYBAND, 0, (LPARAM)&fr.rc,NULL);
if (!SUCCEEDED(hr))
{
::ErrorOut(hr);
return -1;
}
}
nPageCnt++;//printed
// If there is more text to print, adjust the range of characters
// to start printing at the first character of the next page.
if (lTextPrinted < lTextLength)
{
fr.chrg.cpMin = lTextPrinted;
fr.chrg.cpMax = -1;
}
}
while (lTextPrinted < lTextLength&&nPageCnt<=nPage);//Here nPageCnt is 1 based
// Tell the control to release cached information.
hr=pTxService->TxSendMessage(EM_FORMATRANGE, 0, (LPARAM)NULL,NULL);
if (!SUCCEEDED(hr))
{
::ErrorOut(hr);
return -1;
}
SetMapMode ( hdc, nMapMode );
return nPageCnt;
}
可是,在计算的时候总是失败,在彩色标示的部分,返回的错误是“无效的矩形”;
请问这是哪里的错误亚?
请问大侠们,到底错在什么地方了?
或者是有其他的办法