OSDN Git Service

PATCH: [ 1286629 ] print support
authorKimmo Varis <kimmov@gmail.com>
Wed, 12 Oct 2005 20:17:43 +0000 (20:17 +0000)
committerKimmo Varis <kimmov@gmail.com>
Wed, 12 Oct 2005 20:17:43 +0000 (20:17 +0000)
 - submitted by Markus Rollmann

29 files changed:
Src/Changes.txt
Src/Common/SplitterWndEx.cpp
Src/Common/SplitterWndEx.h
Src/Languages/Brazilian/MergeBrazilian.rc
Src/Languages/Bulgarian/MergeBulgarian.rc
Src/Languages/Catalan/MergeCatalan.rc
Src/Languages/ChineseSimplified/MergeChineseSimplified.rc
Src/Languages/ChineseTraditional/MergeChineseTraditional.rc
Src/Languages/Czech/MergeCzech.rc
Src/Languages/Danish/MergeDanish.rc
Src/Languages/Dutch/MergeDutch.rc
Src/Languages/French/MergeFrench.rc
Src/Languages/German/MergeGerman.rc
Src/Languages/Hungarian/MergeHungarian.rc
Src/Languages/Italian/MergeItalian.rc
Src/Languages/Japanese/MergeJapanese.rc
Src/Languages/Korean/MergeKorean.rc
Src/Languages/Norwegian/MergeNorwegian.rc
Src/Languages/Polish/MergePolish.rc
Src/Languages/Russian/MergeRussian.rc
Src/Languages/Slovak/MergeSlovak.rc
Src/Languages/Spanish/MergeSpanish.rc
Src/Languages/Swedish/MergeSwedish.rc
Src/Languages/Turkish/MergeTurkish.rc
Src/MainFrm.cpp
Src/Merge.rc
Src/MergeEditView.cpp
Src/MergeEditView.h
Src/editlib/ccrystaltextview.cpp

index c32ef39..4198182 100644 (file)
@@ -2,6 +2,12 @@
  PATCH: [ 1323107 ] Patch for crash on save filenames with different cases
   From anonymous submitter
   Src: DirDcoc.cpp
+ PATCH: [ 1286629 ] print support
+  Submitted by Markus Rollmann
+  Src: MainFrm.cpp Merge.rc MergeEditView.cpp MergeEditView.h
+  Src/Common: SplitterWndEx.cpp SplitterWndEx.h
+  Src/editlib: ccrystaleditview.cpp
+  Src/Languages: *.rc
 
 2005-10-05 Perry
  PATCH: [ 1242008 ] Update status to binary if open fails because binary
index 8dd7146..a714bbc 100644 (file)
@@ -12,6 +12,7 @@
 
 #include "stdafx.h"
 #include "SplitterWndEx.h"
+#include "MergeEditView.h"  // For printing - MasterPrint()
 
 #ifdef _DEBUG
 #undef THIS_FILE
@@ -213,4 +214,21 @@ void CSplitterWndEx::OnSize(UINT nType, int cx, int cy)
 
 }
 
-
+void CSplitterWndEx::MasterPrint(CDC* pDC, CPrintInfo* pInfo)
+{
+       CRect rDraw = pInfo->m_rectDraw;
+       CSize sz = rDraw.Size();
+       int midX = sz.cx / 2;
+       
+       // print left pane      
+       pInfo->m_rectDraw.right = midX;
+       CMergeEditView* pLeftPane = (CMergeEditView*)GetPane(0,0);
+       pLeftPane->SlavePrint(pDC,pInfo);
+
+       // print right pane
+       pInfo->m_rectDraw = rDraw;
+       pInfo->m_rectDraw.left = midX;
+
+       CMergeEditView* pRightPane = (CMergeEditView*)GetPane(0,1);
+       pRightPane->SlavePrint(pDC,pInfo);
+}
index 7c1ad62..c5d6bbc 100644 (file)
@@ -28,6 +28,8 @@ public:
        void EqualizeRows(); 
        void EqualizeCols(); 
 
+       void MasterPrint(CDC* pDC, CPrintInfo* pInfo);
+
 private:
        BOOL m_bBarLocked;
        BOOL m_bResizePanes;
index de2d7ff..24e7b26 100644 (file)
@@ -284,6 +284,9 @@ BEGIN
             MENUITEM "Save &As...",                 ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "L&eft Read-only",             ID_FILE_LEFT_READONLY
         MENUITEM "Ri&ght Read-only",            ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index 3383856..324b3e1 100644 (file)
@@ -284,6 +284,9 @@ BEGIN
             MENUITEM "Ñúõðàíè &êàòî...",                 ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "Î&ò ëÿâî ñàìî çà ÷åòåíå",             ID_FILE_LEFT_READONLY
         MENUITEM "Îò äÿñ&íî ñàìî çà ÷åòåíå",            ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index abb6c86..f5fb6cd 100644 (file)
@@ -284,6 +284,9 @@ BEGIN
             MENUITEM "&Anomena i desa...",          ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "Fes l'es&querra només de lectura", ID_FILE_LEFT_READONLY
         MENUITEM "Fes la dre&ta només de lectura", ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index 5ed1d19..54acba5 100644 (file)
@@ -284,6 +284,9 @@ BEGIN
             MENUITEM "Áí´æΪ(&A)...",               ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "×ó²àÖ»¶Á(&E)",                ID_FILE_LEFT_READONLY
         MENUITEM "ÓÒ²àÖ»¶Á(&G)",                ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index 378f391..a8f7553 100644 (file)
@@ -284,6 +284,9 @@ BEGIN
             MENUITEM "¥t¦s·sÀÉ(&A)...",         ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "¥ªÃä°ßŪ(&E)",                ID_FILE_LEFT_READONLY
         MENUITEM "¥kÃä°ßŪ(&G)",                ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index c36480b..d85afa4 100644 (file)
@@ -284,6 +284,9 @@ BEGIN
             MENUITEM "Save &As...",                 ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "L&eft Read-only",             ID_FILE_LEFT_READONLY
         MENUITEM "Ri&ght Read-only",            ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index ac3037e..68987ab 100644 (file)
@@ -284,6 +284,9 @@ BEGIN
             MENUITEM "Gem &som...",                 ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "V&enstre skrivebeskyttet",             ID_FILE_LEFT_READONLY
         MENUITEM "&Højre skrivebeskyttet",            ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index 372cbd5..88134fc 100644 (file)
@@ -285,6 +285,9 @@ BEGIN
             MENUITEM "Opslaan &als...",         ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "Links all&een lezen",         ID_FILE_LEFT_READONLY
         MENUITEM "Re&chts alleen lezen",        ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index 3df8f2d..15580fe 100644 (file)
@@ -284,6 +284,9 @@ BEGIN
             MENUITEM "Enregistrer &sous...",     ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "Côté gauc&he lecture seulement",  ID_FILE_LEFT_READONLY
         MENUITEM "Côté droi&t  lecture seulement",  ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index da29f89..3fe84f1 100644 (file)
@@ -288,6 +288,9 @@ BEGIN
             MENUITEM "Speichern &unter...",         ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "L&inks schreibgeschützt",      ID_FILE_LEFT_READONLY
         MENUITEM "R&echts schreibgeschützt",     ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index de08c58..c384ba9 100644 (file)
@@ -284,6 +284,9 @@ BEGIN
             MENUITEM "Menté&s más néven...",                 ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "Bal oldal csak &olvasható",             ID_FILE_LEFT_READONLY
         MENUITEM "Jobb oldal csak o&lvasható",            ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index 18570fa..c3a2bd7 100644 (file)
@@ -284,6 +284,9 @@ BEGIN
             MENUITEM "S&alva con nome...",      ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "Fil&e di sinistra di Sola lettura", ID_FILE_LEFT_READONLY
         MENUITEM "F&ile di destra di Sola lettura", ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index 03bcbfd..e1b591c 100644 (file)
@@ -284,6 +284,9 @@ BEGIN
             MENUITEM "\96¼\91O\82ð\95t\82¯\82Ä\95Û\91¶(&A)...", ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "\8d\82ð\93Ç\82Ý\8eæ\82è\90ê\97p(&E)",        ID_FILE_LEFT_READONLY
         MENUITEM "\89E\82ð\93Ç\82Ý\8eæ\82è\90ê\97p(&I)",        ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index 718e3d6..c8a935b 100644 (file)
@@ -284,6 +284,9 @@ BEGIN
             MENUITEM "´Ù¸¥ À̸§À¸·Î ÀúÀå(&A)...",   ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "¿ÞÂÊÀ» ÀбâÀü¿ëÀ¸·Î(E&)",     ID_FILE_LEFT_READONLY
         MENUITEM "¿À¸¥ÂÊÀ» ÀбâÀü¿ëÀ¸·Î(&G)",   ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index e7ab966..abda307 100644 (file)
@@ -284,6 +284,9 @@ BEGIN
             MENUITEM "Lagre &som...",           ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "V&entsre skrivebeskyttet",    ID_FILE_LEFT_READONLY
         MENUITEM "H&øyre skrivebeskyttet",      ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index fad92b0..ec8fab7 100644 (file)
@@ -284,6 +284,9 @@ BEGIN
             MENUITEM "Zachowaj &jako...",                 ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "Lewa tylko &odczyt",             ID_FILE_LEFT_READONLY
         MENUITEM "Prawa t&ylko odczyt",            ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index b871015..2e60e35 100644 (file)
@@ -288,6 +288,9 @@ BEGIN
             MENUITEM "Ñîõðàíèòü &êàê...",           ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "Ôàéë ñ&ëåâà òîëüêî äëÿ ÷òåíèÿ", ID_FILE_LEFT_READONLY
         MENUITEM "Ôàéë ñ&ëåâà òîëüêî äëÿ ÷òåíèÿ", ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index 7e15b1f..b457fa0 100644 (file)
@@ -284,6 +284,9 @@ BEGIN
             MENUITEM "Save &As...",                 ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "L&eft Read-only",             ID_FILE_LEFT_READONLY
         MENUITEM "Ri&ght Read-only",            ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index 6bce777..a7de544 100644 (file)
@@ -284,6 +284,9 @@ BEGIN
             MENUITEM "Guardar &como...",                 ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "Lado i&zquierdo sólo lectura",             ID_FILE_LEFT_READONLY
         MENUITEM "Lado d&erecho sólo lectura",            ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index e6f1124..99a80d9 100644 (file)
@@ -283,6 +283,9 @@ BEGIN
             MENUITEM "Spara so&m...",               ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "V&änster fil skrivskyddad",   ID_FILE_LEFT_READONLY
         MENUITEM "Hö&ger fil skrivskyddad",     ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index 1cc9cd9..30e5e07 100644 (file)
@@ -283,6 +283,9 @@ BEGIN
             MENUITEM "&Farklý Kaydet",              ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "Salt Okunur S&ol",            ID_FILE_LEFT_READONLY
         MENUITEM "Salt Okunu&r Sað",            ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index baadf7d..d9379a3 100644 (file)
@@ -2350,7 +2350,13 @@ void CMainFrame::OnReloadPlugins()
 
 void CMainFrame::UpdatePrediffersMenu()
 {
-       HMENU hMainMenu = GetMenu()->m_hMenu;
+       CMenu* menu = GetMenu();
+       if (menu == NULL)
+       {
+               return;
+       }
+
+       HMENU hMainMenu = menu->m_hMenu;
        HMENU prediffersSubmenu = GetPrediffersSubmenu(hMainMenu);
        if (prediffersSubmenu != NULL)
        {
index d8f1c2f..332e2c2 100644 (file)
@@ -292,6 +292,9 @@ BEGIN
             MENUITEM "Save &As...",                 ID_FILE_SAVEAS_RIGHT
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Print...",                   ID_FILE_PRINT
+        MENUITEM "Print P&review",              ID_FILE_PRINT_PREVIEW
+        MENUITEM SEPARATOR
         MENUITEM "L&eft Read-only",             ID_FILE_LEFT_READONLY
         MENUITEM "Ri&ght Read-only",            ID_FILE_RIGHT_READONLY
         MENUITEM SEPARATOR
index a55e20f..71b0a26 100644 (file)
@@ -42,6 +42,7 @@
 #include "WMGotoDlg.h"
 #include "OptionsDef.h"
 #include "SyntaxColors.h"
+#include "SplitterWndEx.h" // For printing (OnPrint, SlavePrint)
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -2665,3 +2666,13 @@ void CMergeEditView::OnUpdateViewLineDiffs(CCmdUI* pCmdUI)
        pCmdUI->Enable(TRUE);
        pCmdUI->SetCheck(m_bWordDiffHighlight);
 }
+
+void CMergeEditView::OnPrint(CDC* pDC, CPrintInfo* pInfo) 
+{
+       ((CSplitterWndEx*)GetParentSplitter(this, FALSE))->MasterPrint(pDC, pInfo);
+}
+
+void CMergeEditView::SlavePrint(CDC* pDC, CPrintInfo* pInfo)
+{
+       CGhostTextView::OnPrint(pDC,pInfo);
+}
index 47bc8a0..7ffceea 100644 (file)
@@ -99,6 +99,7 @@ enum MERGE_LINEFLAGS
 
 class IMergeEditStatus;
 class CLocationView;
+class CMergeDoc;
 
 /**
 This class is the base class for WinMerge editor panels.
@@ -181,6 +182,7 @@ public:
        int GetTopLine() { return m_nTopLine; };
        int GetScreenLines() { return CCrystalTextView::GetScreenLines(); };
        void RepaintLocationPane();
+       void SlavePrint(CDC* pDC, CPrintInfo* pInfo);
 
        // to customize the mergeview menu
        static HMENU createScriptsSubmenu(HMENU hMenu);
@@ -195,6 +197,7 @@ public:
        virtual void OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView);
        virtual void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint);
        virtual BOOL PreTranslateMessage(MSG* pMsg);
+       virtual void OnPrint(CDC* pDC, CPrintInfo* pInfo);
        //}}AFX_VIRTUAL
 
 // Implementation
index c3d38f2..bfe40b6 100644 (file)
@@ -2358,14 +2358,18 @@ PrintLineHeight (CDC * pdc, int nLine)
   ASSERT (nLine >= 0 && nLine < GetLineCount ());
   ASSERT (m_nPrintLineHeight > 0);
   int nLength = GetLineLength (nLine);
-  if (nLength == 0)
-    return m_nPrintLineHeight;
-
   CString line;
-  LPCTSTR pszChars = GetLineChars (nLine);
-  ExpandChars (pszChars, 0, nLength, line, 0);
+  if (nLength == 0)
+  {
+    line = "X";
+  } else
+  {
+    LPCTSTR pszChars = GetLineChars (nLine);
+    ExpandChars (pszChars, 0, nLength, line, 0);
+  }
+  
   CRect rcPrintArea = m_rcPrintArea;
-  pdc->DrawText (line, &rcPrintArea, DT_LEFT | DT_NOPREFIX | DT_TOP | DT_WORDBREAK | DT_CALCRECT);
+  pdc->DrawText (line, &rcPrintArea, DT_LEFT | DT_NOPREFIX | DT_TOP |  DT_CALCRECT);
   return rcPrintArea.Height ();
 }
 
@@ -2486,6 +2490,12 @@ RecalcPageLayouts (CDC * pdc, CPrintInfo * pInfo)
 void CCrystalTextView::
 OnBeginPrinting (CDC * pdc, CPrintInfo * pInfo)
 {
+  if (m_pnPages != NULL)
+    {
+      delete[] m_pnPages;
+      m_pnPages = NULL;
+    }
+
   ASSERT (m_pnPages == NULL);
   ASSERT (m_pPrintFont == NULL);
   CFont *pDisplayFont = GetFont ();
@@ -2529,6 +2539,29 @@ OnEndPrinting (CDC * pdc, CPrintInfo * pInfo)
 void CCrystalTextView::
 OnPrint (CDC * pdc, CPrintInfo * pInfo)
 {
+  LOGFONT lf;
+  memset (&lf, 0, sizeof (lf));
+  _tcscpy (m_lfBaseFont.lfFaceName, _T ("FixedSys"));
+  lf.lfHeight = -MulDiv (11, pdc->GetDeviceCaps (LOGPIXELSY), 72);
+  lf.lfWeight = FW_NORMAL;
+  lf.lfItalic = FALSE;
+  lf.lfCharSet = DEFAULT_CHARSET;
+  lf.lfOutPrecision = OUT_DEFAULT_PRECIS;
+  lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
+  lf.lfQuality = DEFAULT_QUALITY;
+  lf.lfPitchAndFamily = DEFAULT_PITCH;
+
+  CFont font;
+  font.CreateFontIndirect(&lf);
+  CFont* prevFont = pdc->SelectObject(&font);
+
+  const COLORREF defaultLineColor = RGB(0,0,0);
+  const COLORREF defaultBgColor = RGB(255,255,255);
+
+  // TODO: calc maximum chars on a line; 
+  // GetScreenChars() doesn't work right while printing
+  const int maxLineChars = 100;
+
   if (m_pnPages == NULL)
     {
       RecalcPageLayouts (pdc, pInfo);
@@ -2536,35 +2569,59 @@ OnPrint (CDC * pdc, CPrintInfo * pInfo)
     }
 
   ASSERT (pInfo->m_nCurPage >= 1 && (int) pInfo->m_nCurPage <= m_nPrintPages);
-  int nLine = m_pnPages[pInfo->m_nCurPage - 1];
+  int nLine    = m_pnPages[pInfo->m_nCurPage - 1];
   int nEndLine = GetLineCount ();
+
   if ((int) pInfo->m_nCurPage < m_nPrintPages)
-    nEndLine = m_pnPages[pInfo->m_nCurPage];
-  TRACE (_T ("Printing page %d of %d, lines %d - %d\n"), pInfo->m_nCurPage, m_nPrintPages,
-         nLine, nEndLine - 1);
+    {
+      nEndLine = m_pnPages[pInfo->m_nCurPage];
+    }
+
+  TRACE (_T ("Printing page %d of %d, lines %d - %d\n"), 
+        pInfo->m_nCurPage, m_nPrintPages,nLine, nEndLine - 1);
+
+  pdc->SetTextColor(defaultLineColor);
+  pdc->SetBkColor(defaultBgColor);
 
   if (m_bPrintHeader)
-    PrintHeader (pdc, pInfo->m_nCurPage);
+    {
+      PrintHeader (pdc, pInfo->m_nCurPage);
+    }
+
   if (m_bPrintFooter)
-    PrintFooter (pdc, pInfo->m_nCurPage);
+    {
+      PrintFooter (pdc, pInfo->m_nCurPage);
+    }
 
   int y = m_rcPrintArea.top;
   for (; nLine < nEndLine; nLine++)
     {
+      CRect rcPrintRect = m_rcPrintArea;
+      rcPrintRect.top = y;
+
       int nLineLength = GetLineLength (nLine);
-      if (nLineLength == 0)
+      CString line;
+
+      if (nLineLength > 0)
         {
-          y += m_nPrintLineHeight;
-          continue;
+          LPCTSTR pszChars = GetLineChars (nLine);
+          ExpandChars (pszChars, 0, nLineLength, line, 0);
         }
 
-      CRect rcPrintRect = m_rcPrintArea;
-      rcPrintRect.top = y;
-      LPCTSTR pszChars = GetLineChars (nLine);
-      CString line;
-      ExpandChars (pszChars, 0, nLineLength, line, 0);
-      y += pdc->DrawText (line, &rcPrintRect, DT_LEFT | DT_NOPREFIX | DT_TOP | DT_WORDBREAK);
+      line += CString(' ', maxLineChars - line.GetLength());
+
+      BOOL bDrawWhitespace = FALSE;
+      COLORREF crBkgnd, crText;
+      GetLineColors (nLine, crBkgnd, crText, bDrawWhitespace);
+
+      pdc->SetTextColor((crText == CLR_NONE) ? defaultLineColor : crText);
+      pdc->SetBkColor((crBkgnd == CLR_NONE) ? defaultBgColor : crBkgnd);
+
+      CString str;
+      y += pdc->DrawText (line, &rcPrintRect, DT_LEFT | DT_NOPREFIX | DT_TOP );
     }
+
+  pdc->SelectObject(prevFont);
 }