Click here to Skip to main content
11,633,732 members (79,411 online)
Click here to Skip to main content

A Simple Printing Mechanism

, 16 May 2000 193.8K 2.6K 47
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_HIDEPRINTTOFILE |
    		      PD_NOPAGENUMS |
    		      PD_RETURNDC |
    		      PD_USEDEVMODECOPIES);
        if(has a selection)
    	{ /* enable selection */
            dlg.m_pd.Flags |= PD_SELECTION;
        } /* enable selection */
        else
        { /* use selection */
            dlg.m_pd.Flags |= PD_NOSELECTION;
        } /* use selection */
        
        switch(dlg.DoModal())
        { /* DoModal */
        case 0:
        case IDCANCEL:
            return;
        case IDOK:
            break;
        default:
            ASSERT(FALSE); // impossible condition
            return;
        } /* DoModal */
         
        CDC dc;
        dc.Attach(dlg.m_pd.hDC);
        printer = new CPrinter(&dc);
        if(printer->StartPrinting())
        { /* success */
            for(some sample loop condition)
            { /* print line */
                CString s;
                ... // form the string you want to print
                printer->PrintLine(s);
            } /* print line */
    
            printer->EndPrinting();
        } /* success */
        delete printer;
        ::DeleteDC(dc.Detach());
    } // 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::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.

    CPrinter::EndPrinting()
    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.

    CPrinter::StartPrinting()
    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 newcomer@flounder.com 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
    www.flounder.com/mvp_tips.htm
  • 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

    Share

    About the Author

    Joseph M. Newcomer
    Retired
    United States United States
    PhD, Computer Science, Carnegie Mellon University, 1975
    Certificate in Forensic Science and the Law, Duquesne University, 2008

    Co-Author, [i]Win32 Programming[/i]

    You may also be interested in...

    Comments and Discussions

     
    QuestionPrinting Problum Pin
    lcloonkar10-Jan-10 4:15
    memberlcloonkar10-Jan-10 4:15 
    Questionwhen printer is not configured? Pin
    723Alex20-Jul-07 10:41
    member723Alex20-Jul-07 10:41 
    GeneralMFC Print preview problem Pin
    Engineer Masood30-Mar-06 16:52
    memberEngineer Masood30-Mar-06 16:52 
    GeneralTnx Pin
    quistiun8-Mar-06 18:26
    memberquistiun8-Mar-06 18:26 
    GeneralProblem found in StartPrinting Pin
    apargeter24-Sep-05 9:14
    memberapargeter24-Sep-05 9:14 
    GeneralProblem when Print Arabic fonts Pin
    bushka12-Jun-05 11:25
    memberbushka12-Jun-05 11:25 
    GeneralRe: Problem when Print Arabic fonts Pin
    Joseph M. Newcomer12-Jun-05 17:11
    memberJoseph M. Newcomer12-Jun-05 17:11 
    GeneralRe: Problem when Print Arabic fonts Pin
    Anonymous13-Jun-05 5:54
    sussAnonymous13-Jun-05 5:54 
    From : Bushka
    to : Mr.Joseph M. Newcomer
    Very Thanks to email me and I'm sorry for numbers in function CreateFont this mean the number
    CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFacename );

    You can find more detail in MSDN and for the number 178 this ARABIC_CHARSET

    My problem in PrintView with arabic only, English no problem with it. printing like view with no any problem.

    Also I use only function OnDraw

    thanks again and i hope to find answer

    I can send the source code but where ???


    I use number
    GeneralPrinting files from VB/VC Pin
    franklinjIssac4-Apr-05 1:50
    memberfranklinjIssac4-Apr-05 1:50 
    GeneralRe: Printing files from VB/VC Pin
    Joseph M. Newcomer4-Apr-05 10:25
    memberJoseph M. Newcomer4-Apr-05 10:25 
    QuestionHow could i print Multiple pages in Java Pin
    Anonymous8-Feb-05 17:54
    sussAnonymous8-Feb-05 17:54 
    GeneralGood job but... Pin
    scoroop12-Dec-04 6:00
    memberscoroop12-Dec-04 6:00 
    Generalprinting strings Pin
    vivadotnet16-Jul-04 11:34
    membervivadotnet16-Jul-04 11:34 
    GeneralRe: printing strings Pin
    Joseph M. Newcomer16-Jul-04 21:32
    memberJoseph M. Newcomer16-Jul-04 21:32 
    GeneralIts not working Pls help Pin
    jssuthar18-Jan-04 19:35
    memberjssuthar18-Jan-04 19:35 
    GeneralAuto Line Wrap Pin
    Wouter Dhondt22-Jan-03 2:41
    memberWouter Dhondt22-Jan-03 2:41 
    GeneralRe: Auto Line Wrap Pin
    heggum26-Aug-03 11:36
    memberheggum26-Aug-03 11:36 
    GeneralGetting values from Print Setup Pin
    Jack_pt4-Nov-02 8:58
    memberJack_pt4-Nov-02 8:58 
    GeneralRe: Getting values from Print Setup Pin
    Joseph M. Newcomer4-Nov-02 9:12
    memberJoseph M. Newcomer4-Nov-02 9:12 
    GeneralRe: Getting values from Print Setup Pin
    Jack_pt4-Nov-02 17:18
    memberJack_pt4-Nov-02 17:18 
    GeneralNT prob Pin
    Kwakkie29-Aug-02 22:20
    memberKwakkie29-Aug-02 22:20 
    GeneralCancel causes "Debug Assertion Failed"!!! Pin
    Kristijan14-Aug-02 2:59
    sussKristijan14-Aug-02 2:59 
    GeneralFixed width Probs Pin
    dazinith11-Jun-02 8:21
    memberdazinith11-Jun-02 8:21 
    GeneralRe: Fixed width Probs Pin
    Anonymous11-Jul-02 10:36
    sussAnonymous11-Jul-02 10:36 
    GeneralPrintDialog without user intervention Pin
    Günter29-May-02 11:04
    memberGünter29-May-02 11:04 
    GeneralThanks.....a lot ! Pin
    Michel Dimanche12-Mar-02 22:35
    memberMichel Dimanche12-Mar-02 22:35 
    GeneralSetting the page length of the dot matrix printer Pin
    kumarseema22-Feb-02 11:25
    memberkumarseema22-Feb-02 11:25 
    GeneralRe: Setting the page length of the dot matrix printer Pin
    Been there20-Jan-03 16:01
    sussBeen there20-Jan-03 16:01 
    GeneralI NEEEEED HELP URGENTLYYYY Pin
    Marko Frelih14-Feb-02 8:26
    memberMarko Frelih14-Feb-02 8:26 
    GeneralRe: I NEEEEED HELP URGENTLYYYY Pin
    Joseph M. Newcomer16-Feb-02 17:36
    memberJoseph M. Newcomer16-Feb-02 17:36 
    GeneralPrinting in Win 98 Pin
    Brad Loyd11-Nov-01 4:24
    memberBrad Loyd11-Nov-01 4:24 
    GeneralRe: Printing in Win 98 Pin
    Joseph M. Newcomer19-Nov-01 1:27
    memberJoseph M. Newcomer19-Nov-01 1:27 
    GeneralGreat. Thanks Pin
    Kevin Pinkerton21-Aug-01 10:12
    memberKevin Pinkerton21-Aug-01 10:12 
    GeneralDoesn't work on 98 Pin
    Sam Levy26-Jul-01 21:36
    memberSam Levy26-Jul-01 21:36 
    GeneralRe: Doesn't work on 98 Pin
    Joseph M. Newcomer27-Jul-01 5:26
    memberJoseph M. Newcomer27-Jul-01 5:26 
    Generalprinter escape sequences Pin
    Rick Crone11-Jul-01 5:00
    memberRick Crone11-Jul-01 5:00 
    GeneralRe: printer escape sequences Pin
    Joseph M. Newcomer12-Jul-01 5:29
    memberJoseph M. Newcomer12-Jul-01 5:29 
    GeneralFormFeed Pin
    Rick Crone11-Jul-01 4:56
    memberRick Crone11-Jul-01 4:56 
    GeneralRe: FormFeed Pin
    Joseph M. Newcomer12-Jul-01 5:16
    memberJoseph M. Newcomer12-Jul-01 5:16 
    Generalproblem of printing several copies Pin
    xingda21-Jun-01 23:16
    memberxingda21-Jun-01 23:16 
    GeneralUnderlining Pin
    Andrew Stampor21-Jun-01 8:39
    memberAndrew Stampor21-Jun-01 8:39 
    GeneralRe: Underlining Pin
    Joseph M. Newcomer21-Jun-01 11:24
    memberJoseph M. Newcomer21-Jun-01 11:24 
    GeneralPrinting OK on every printers Pin
    cjacquel13-Jun-01 2:55
    membercjacquel13-Jun-01 2:55 
    GeneralRe: Printing OK on every printers Pin
    Joseph M. Newcomer13-Jun-01 4:53
    memberJoseph M. Newcomer13-Jun-01 4:53 
    GeneralThanks! Pin
    Rick Crone2-May-01 7:47
    memberRick Crone2-May-01 7:47 
    Generalline height Pin
    PeteB3-Apr-01 2:58
    memberPeteB3-Apr-01 2:58 
    QuestionHow to print a document Pin
    Dorian27-Jun-00 8:13
    sussDorian27-Jun-00 8:13 

    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.150728.1 | Last Updated 17 May 2000
    Article Copyright 2000 by Joseph M. Newcomer
    Everything else Copyright © CodeProject, 1999-2015
    Layout: fixed | fluid