A Framework for a Printing Application

Environment: Visual C++ 5.0
This code demonstrates some of the things you will need to implement for a single page printing program.
Its features include
- a WYSIWYG interface with Zooming capability: from 75% to 150% , with FitWidth and FitHeight mode
- Allowing user to set margins using the Page Setup Dialog
- Using double buffers to reduce flickering
- Automatically updating the page size when it is changed by the user using the Print Setup Dialog
- Rulers with markings that will change according to the scale and position of the paper
- Scrolling of Text
To suit your drawing needs, edit the DrawHere method in the TextBmpView.cpp file. This function will pass 3 arguments to you:
- PaperRect : The paper rectangle in logical coordinates.
- PrintableRect : The region where your printer will print (This is slightly smaller than the paper rect).
- MarginsRect : The margin rectangle in logical coordinates. (This area is defined by the user, and you might choose to ignore it)
void CTextbmpView::DrawHere(CDC* pDC,CRect PaperRect,
CRect PrintableRect,CRect MarginsRect)
{
/////////////////////////////////////////
//ADD Drawing code here!!!
}
These 3 arguments will vary according to the paper size currently selected, but will not vary with respect to the current zoom mode.
Your code will have to draw according to these dimensions, within the rectangular area given. You can use the
MFC drawing functions like DrawText, LineTo, CreateFont etc. to create your drawing.
Units:
- The units are in twips (1 inch = 1440 twips), so to draw a 1 inch line, do the following: pDC->MoveTo(0,-2000); pDC->LineTo(1440,-2000);
- The y-values of most points are negative. The lower the point, the smaller/more negative is the y-value.
- The origin (0,0) is located at the top-left of the dotted rectangle (printable area).
- Typical values for the PrintableRect of an A4 sized paper is top=0, left=0, right=11568, bottom=-15876.
The display:
- The printable area is represented by the dotted rectangle.
- The paper rectangle is indicated by the white area in gray background.
- The margins are shown as the gray regions on the ruler.
- To convert a point clicked on the screen into a logical point on the paper, use the ScreenToPaper method. For an example, look at the CTextBmpView::OnLButtonDown method. There is another method PaperToScreen which will convert a point on the paper to a point on the screen.
Limitations:
This program may not work with large paper size: e.g. A3 sized paper
Downloads
Download Source: Textbmp.zip 37.5 KB

Comments
Great work
Posted by Legacy on 02/06/2002 12:00amOriginally posted by: ashutosh
ReplyExcellent But What About .....
Posted by Legacy on 01/14/2002 12:00amOriginally posted by: Shah Khusro
The work done is excellent. But these days I am working on the implementation of a Network Printing Management software and I need some help. I know that a large number of systems are available for this purpose but as a student assignment I have to implement the software and learn the concepts. Its capabilities should include:
-> intercepting each print request
-> examining the user, his rights and previllages
-> assigning and checking page quota etc
-> and based on this information making some decisions
like allowing the print operation to complete.
IF ANYBODY CAN HELP
ReplyI WILL BE GREATFUL
Thanks
A problem with bitmap
Posted by Legacy on 10/16/2001 12:00amOriginally posted by: Anonymous
This view supports simple drawing functions such as line, circle. When I put a bitmap into the DC ( in routine DrawHere), the picture appears in the view and preview, but does NOT the into the real printer. It seems to be a DC mode / reference frame problem.
Reply
How to save the print information
Posted by Legacy on 08/31/2001 12:00amOriginally posted by: koundinya
Hi,
This is a good program .
And I need some small code that saves the print information and later if we pass this information to the printer, it should able to print the information with out help of our application.
I mean we have to implemet Print to file procedure.How can we implement that functionality
ReplyThanks
Koundinya
A small problem....
Posted by Legacy on 02/08/2001 12:00amOriginally posted by: Vasu
ReplyWonderful ... but,
Posted by Legacy on 10/05/2000 12:00amOriginally posted by: Anonymous
it'll be great if this can be integrated into a splitter view ... Anyone if ideas or sample solutions, kindly post them on this site :)
Thanks!
Reply
Printer's Escape
Posted by Legacy on 04/14/2000 12:00amOriginally posted by: QuangND
Can U send me Escape string of LQ2080 to down load user font to printer.
ReplyThanks alot
Great framework, what about multiple pages
Posted by Legacy on 04/11/2000 12:00amOriginally posted by: Allan Petersen
This is a great framework for single page printing applications. What about a framework for a multiple page printing application?
ReplyGood...but
Posted by Legacy on 10/07/1999 12:00amOriginally posted by: TLC
Quite a pontential program! Can be extend to do lot more...However, the source code was really messy...
Reply
VC 6.0 fix
Posted by Legacy on 07/29/1999 12:00amOriginally posted by: Joe Ismert
Reply