Click here to Skip to main content
Licence 
First Posted 19 Dec 2000
Views 73,655
Bookmarked 37 times

CPrintPreviewListBox

By | 28 Dec 2000 | Article
A listbox derived class that allows printing and print preview in SDI and MDI applications
  • Download source files - 4 Kb
  • Download demo project - 22 Kb
  • Introduction

    CPrintPreviewListBox is a CListBox derived class which is designed for one simple task - printing and previewing in SDI and MDI applications (for the present not in dialog based applications).

    This is the first version of the class with print and preview capabilities, so the class has some constraints such as the maximum number of characters per line (81), fixed font (Courier New) and as I already mentioned this class does not support dialog based applications.

    However, this class is very useful for some special tasks such as print and print previewing the content of list boxes in your SDI or MDI application.

    This class also supports line breaking.

    Consequently I hope that following versions of this class will be able to change font and have other capabilities.

    The CPrintPreviewListBox class has several important functions that should all be self explanatory:

    void Print();
    void SetPrintTitle( CString sNewTitle = "Default title" );
    CString GetPrintTitle();
    void SetOnlySelectedItems( bool bOnlySelectedItems );
    bool GetOnlySelectedItems();
    virtual void OnBeginPrinting (CDC*, CPrintInfo*);
    virtual void OnPrint (CDC*, CPrintInfo*);
    virtual void OnEndPrinting (CDC*, CPrintInfo*);
    

    Using this class is very simple, as shown in the following lines of code (see the sampleView.h header file):

    #include "PrintPreviewListBox.h"
    
    class CSampleView : public CView
    {
    public:
    	CPrintPreviewListBox m_lstPPListBox;
    ...
    };
    

    The sampleView.cpp file demonstrates using the class as follows:

    int CSampleView::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    	if (CView::OnCreate(lpCreateStruct) == -1)
    		return -1;
    
    	// TODO: Add your specialized creation code here
    	CSampleApp* pApp = (CSampleApp*) AfxGetApp();
    	CRect rect;
    	rect.SetRectEmpty();
    
    	if( pApp->m_bSingleSelection )
    	{
    		if( m_lstPPListBox.Create( WS_CHILD | WS_BORDER | WS_VSCROLL, 
    			rect, this, 100 ) == -1 )
    			return -1;
    	}
    	else
    	{
    		if( m_lstPPListBox.Create( WS_CHILD | LBS_HASSTRINGS | LBS_MULTIPLESEL
    			| LBS_EXTENDEDSEL | LBS_NOTIFY | LBS_NOINTEGRALHEIGHT 
    			| LBS_USETABSTOPS | WS_VSCROLL,
    			rect, this, 100 ) == -1 )
    			return -1;
    	}
    	m_lstPPListBox.SetPrintTitle();
    	m_lstPPListBox.ShowWindow (SW_SHOW);
    
    	return 0;
    }
    
    void CSampleView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
    {
    	// TODO: add extra initialization before printing
    	m_lstPPListBox.OnBeginPrinting(pDC, pInfo);
    }
    
    void CSampleView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
    {
    	// TODO: add cleanup after printing
    	m_lstPPListBox.OnEndPrinting(pDC, pInfo);
    }
    
    void CSampleView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
    {
    	// TODO: Add your specialized code here and/or call the base class
    	m_lstPPListBox.OnPrint(pDC, pInfo);
    
    //	CView::OnPrint(pDC, pInfo);
    }
    
    void CSampleView::OnOnlySelectedItems()
    {
    	// TODO: Add your command handler code here
    	if( m_lstPPListBox.GetOnlySelectedItems() )
    	{
    		m_lstPPListBox.SetOnlySelectedItems( false );
    		m_bOnlySelectedItems = FALSE;
    	}
    	else
    	{
    		m_lstPPListBox.SetOnlySelectedItems( true );
    		m_bOnlySelectedItems = TRUE;
    	}
    }
    

    You can see entire code in attached files in details.

    Credits

    Parts of the code were based on Chris Maunder's Printing without the Document/View framework and Koay Kah Hoe's Print Previewing without the Document/View Framework.

    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

    Tesic Goran

    Web Developer

    Serbia Serbia

    Member



    Sign Up to vote   Poor Excellent
    Add a reason or comment to your vote: x
    Votes of 3 or less require a comment

    Comments and Discussions

     
    You must Sign In to use this message board. (secure sign-in)
     
    Search this forum  
     FAQ
        Noise  Layout  Per page   
      Refresh
    GeneralIt can also be used in dialog box app. Excellent! Pinmemberfredpu6:06 12 Oct '04  
    GeneralVery good article PinmemberNemanja Trifunovic12:15 28 Dec '00  
    QuestionWhy Necessary? PinmemberAnonymous6:30 28 Dec '00  
    AnswerRe: Why Necessary? Pinmember=[ Abin ]=13:01 12 Jan '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.

    Permalink | Advertise | Privacy | Mobile
    Web04 | 2.5.120517.1 | Last Updated 29 Dec 2000
    Article Copyright 2000 by Tesic Goran
    Everything else Copyright © CodeProject, 1999-2012
    Terms of Use
    Layout: fixed | fluid