提交 0a4d094a 编写于 作者: A alexsch

7185512: The printout doesn't match image on screen.

Reviewed-by: serb, bagiras
上级 46d54ef2
......@@ -131,48 +131,13 @@ AwtTextArea::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) {
MsgRouting mr = mrDoDefault;
switch (message) {
case WM_PRINTCLIENT:
{
FORMATRANGE fr;
HDC hPrinterDC = (HDC)wParam;
int nHorizRes = ::GetDeviceCaps(hPrinterDC, HORZRES);
int nVertRes = ::GetDeviceCaps(hPrinterDC, VERTRES);
int nLogPixelsX = ::GetDeviceCaps(hPrinterDC, LOGPIXELSX);
int nLogPixelsY = ::GetDeviceCaps(hPrinterDC, LOGPIXELSY);
// Ensure the printer DC is in MM_TEXT mode.
::SetMapMode ( hPrinterDC, MM_TEXT );
// Rendering to the same DC we are measuring.
::ZeroMemory(&fr, sizeof(fr));
fr.hdc = fr.hdcTarget = hPrinterDC;
// Set up the page.
fr.rcPage.left = fr.rcPage.top = 0;
fr.rcPage.right = (nHorizRes/nLogPixelsX) * 1440; // in twips
fr.rcPage.bottom = (nVertRes/nLogPixelsY) * 1440;
fr.rc.left = fr.rcPage.left;
fr.rc.top = fr.rcPage.top;
fr.rc.right = fr.rcPage.right;
fr.rc.bottom = fr.rcPage.bottom;
// start printing from the first visible line
LRESULT nLine = SendMessage(EM_GETFIRSTVISIBLELINE, 0, 0);
LONG startCh = static_cast<LONG>(SendMessage(EM_LINEINDEX,
(WPARAM)nLine, 0));
fr.chrg.cpMin = startCh;
fr.chrg.cpMax = -1;
SendMessage(EM_FORMATRANGE, TRUE, (LPARAM)&fr);
}
break;
case EM_SETCHARFORMAT:
case WM_SETFONT:
SetIgnoreEnChange(TRUE);
break;
}
retValue = AwtComponent::WindowProc(message, wParam, lParam);
retValue = AwtTextComponent::WindowProc(message, wParam, lParam);
switch (message) {
case EM_SETCHARFORMAT:
......
......@@ -215,6 +215,50 @@ done:
return c;
}
LRESULT
AwtTextComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) {
switch (message) {
case WM_PRINTCLIENT:
{
FORMATRANGE fr;
HDC hPrinterDC = (HDC)wParam;
int nHorizRes = ::GetDeviceCaps(hPrinterDC, HORZRES);
int nVertRes = ::GetDeviceCaps(hPrinterDC, VERTRES);
int nLogPixelsX = ::GetDeviceCaps(hPrinterDC, LOGPIXELSX);
int nLogPixelsY = ::GetDeviceCaps(hPrinterDC, LOGPIXELSY);
// Ensure the printer DC is in MM_TEXT mode.
::SetMapMode ( hPrinterDC, MM_TEXT );
// Rendering to the same DC we are measuring.
::ZeroMemory(&fr, sizeof(fr));
fr.hdc = fr.hdcTarget = hPrinterDC;
// Set up the page.
fr.rcPage.left = fr.rcPage.top = 0;
fr.rcPage.right = (nHorizRes/nLogPixelsX) * 1440; // in twips
fr.rcPage.bottom = (nVertRes/nLogPixelsY) * 1440;
fr.rc.left = fr.rcPage.left;
fr.rc.top = fr.rcPage.top;
fr.rc.right = fr.rcPage.right;
fr.rc.bottom = fr.rcPage.bottom;
// start printing from the first visible line
LRESULT nLine = SendMessage(EM_GETFIRSTVISIBLELINE, 0, 0);
LONG startCh = static_cast<LONG>(SendMessage(EM_LINEINDEX,
(WPARAM)nLine, 0));
fr.chrg.cpMin = startCh;
fr.chrg.cpMax = -1;
SendMessage(EM_FORMATRANGE, TRUE, (LPARAM)&fr);
}
break;
}
return AwtComponent::WindowProc(message, wParam, lParam);
}
LONG AwtTextComponent::EditGetCharFromPos(POINT& pt) {
return static_cast<LONG>(SendMessage(EM_CHARFROMPOS, 0,
reinterpret_cast<LPARAM>(&pt)));
......
......@@ -50,6 +50,7 @@ public:
static AwtTextComponent* Create(jobject self, jobject parent, BOOL isMultiline);
virtual LPCTSTR GetClassName();
LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
int RemoveCR(WCHAR *pStr);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册