Click here to Skip to main content
Click here to Skip to main content

A Simple Printing Mechanism

, 16 May 2000
Rate this:
Please Sign up or sign in to vote.
Learn how to implement print support in your applications.
  • Download source files - 6 Kb

    A question that frequently arises is "How do I print?" In many cases, the full-blown print handling of a document/view class is inappropriate; in other cases, such as a dialog-based application, it is not available directly via the MFC library. This little class provides for some simple line-printer-simulation output, suitable for printing files, simple text, etc. This is the print mechanism I use for my logging control (and the code for this accompanies that project as well).

    void CMyClass::Print()
        CPrintDialog dlg(FALSE,
    		      PD_ALLPAGES |
    		      PD_NOPAGENUMS |
    		      PD_RETURNDC |
        if(has a selection)
    	{ /* enable selection */
            dlg.m_pd.Flags |= PD_SELECTION;
        } /* enable selection */
        { /* use selection */
            dlg.m_pd.Flags |= PD_NOSELECTION;
        } /* use selection */
        { /* DoModal */
        case 0:
        case IDCANCEL:
        case IDOK:
            ASSERT(FALSE); // impossible condition
        } /* DoModal */
        CDC dc;
        printer = new CPrinter(&dc);
        { /* success */
            for(some sample loop condition)
            { /* print line */
                CString s;
                ... // form the string you want to print
            } /* print line */
        } /* success */
        delete printer;
    } // CTraceList::Print

    This is listed as a simple printing mechanism. It is not as elaborate as the one in our book Win32 Programming., but that is a pure-C version. This is a simpler, but pure MFC, example.

    You can download just this printing code here, or you can download it as part of the Logging Control project.


    CPrinter::CPrinter(CDC * dc)
    Constructs a printer object with the DC of a printer. This is typically obtained from the CPrintDialog by using the flag PD_RETURNDC, then using CDC::FromHandle to get an MFC object for the DC.

    This terminates the print job. It calls the necessary EndPage and EndDoc functions. If the CPrinter object is destroyed while a print job is active, the destructor will call this method.

    int CPrinter::GetPageNumber()
    This function can be called by a subclass's PageHeading routine to get the current page number.

    virtual void CPrinter::PageHeading()
    This method can be overridden in a subclass to print a page heading. The default effect in the base class is to print the program name on the left and the page number on the right.

    void CPrinter::PrintLine(const CString & line)
    This method prints a single line to the printer. No attempt is made to do line wrapping. Implicit left and top margins are assumed. If the line would overflow the existing printable page area, the current page is terminated and a new page is started. The page number is incremented, and heading is printed on the new page (see CPrinter::PageHeading()).

    virtual void CPrinter::SetPrinterFont()
    In the base class, this establishes the printer font as the stock ANSI_FIXED_FONT. A subclass may override this to provide its own font.

    Starts a document on the printer. This must be called before any PrintLine calls are made. This sets up default margins and performs the necessary ::StartDoc call.

    The views expressed in these essays are those of the author, and in no way represent, nor are they endorsed by, Microsoft.

    Send mail to with questions or comments about this article.
    Copyright © 2000, <!--webbot bot="Substitution" s-variable="CompanyLongName" startspan -->The Joseph M. Newcomer Co.<!--webbot bot="Substitution" endspan i-checksum="64444" --> All Rights Reserved
  • License

    This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

    A list of licenses authors might use can be found here


    About the Author

    Joseph M. Newcomer

    United States United States
    No Biography provided

    Comments and Discussions

    QuestionPrinting Problum Pinmemberlcloonkar10-Jan-10 5:15 
    Questionwhen printer is not configured? Pinmember723Alex20-Jul-07 11:41 
    GeneralMFC Print preview problem PinmemberEngineer Masood30-Mar-06 17:52 
    GeneralTnx Pinmemberquistiun8-Mar-06 19:26 
    GeneralProblem found in StartPrinting Pinmemberapargeter24-Sep-05 10:14 
    GeneralProblem when Print Arabic fonts Pinmemberbushka12-Jun-05 12:25 
    GeneralRe: Problem when Print Arabic fonts PinmemberJoseph M. Newcomer12-Jun-05 18:11 
    I can understand -18, 0, 0, 0, but what is 700? Oh, you meant FW_BOLD. 0, 0, 0 you probably meant FALSE, FALSE, FALSE. What the hell is 178? 3? 2? 1? 2? Those numbers are completely meaningless! Perhaps by 178 you meant ARABIC_CHARSET? If so, why didn't you write that? And I haven't a clue as to what those other numbers could possibly mean. The code may or may not be correct, but I have no idea if it is or not.

    When the code is written intelligibly, I might have a fraction of chance of guessing what is wrong. Or maybe not. But something this unintelligible is not something I would even offer an opinion on. Note that once it is rewritten, I may not see anything wrong, but I can't tell anything from such a piece of incorrect code.
    GeneralRe: Problem when Print Arabic fonts PinsussAnonymous13-Jun-05 6:54 
    GeneralPrinting files from VB/VC PinmemberfranklinjIssac4-Apr-05 2:50 
    GeneralRe: Printing files from VB/VC PinmemberJoseph M. Newcomer4-Apr-05 11:25 
    QuestionHow could i print Multiple pages in Java PinsussAnonymous8-Feb-05 18:54 
    GeneralGood job but... Pinmemberscoroop12-Dec-04 7:00 
    Generalprinting strings Pinmembervivadotnet16-Jul-04 12:34 
    GeneralRe: printing strings PinmemberJoseph M. Newcomer16-Jul-04 22:32 
    GeneralIts not working Pls help Pinmemberjssuthar18-Jan-04 20:35 
    GeneralAuto Line Wrap PinmemberWouter Dhondt22-Jan-03 3:41 
    GeneralRe: Auto Line Wrap Pinmemberheggum26-Aug-03 12:36 
    GeneralGetting values from Print Setup PinmemberJack_pt4-Nov-02 9:58 
    GeneralRe: Getting values from Print Setup PinmemberJoseph M. Newcomer4-Nov-02 10:12 
    GeneralRe: Getting values from Print Setup PinmemberJack_pt4-Nov-02 18:18 
    GeneralNT prob PinmemberKwakkie29-Aug-02 23:20 
    GeneralCancel causes "Debug Assertion Failed"!!! PinsussKristijan14-Aug-02 3:59 
    GeneralFixed width Probs Pinmemberdazinith11-Jun-02 9:21 
    GeneralRe: Fixed width Probs PinsussAnonymous11-Jul-02 11:36 
    GeneralPrintDialog without user intervention PinmemberGünter29-May-02 12:04 

    General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

    Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

    | Advertise | Privacy | Terms of Use | Mobile
    Web03 | 2.8.150414.1 | Last Updated 17 May 2000
    Article Copyright 2000 by Joseph M. Newcomer
    Everything else Copyright © CodeProject, 1999-2015
    Layout: fixed | fluid