SftTree/DLL 7.5 - Tree Control
SftBox/OCX 5.0 - Combo Box Control
SftButton/OCX 3.0 - Button Control
SftMask/OCX 7.0 - Masked Edit Control
SftTabs/OCX 6.5 - Tab Control (VB6 only)
SftTree/OCX 7.5 - Tree Control
SftPrintPreview/DLL 2.0 - Print Preview Control (discontinued)
SftTree/DLL 7.5 - Tree Control
SftBox/OCX 5.0 - Combo Box Control
SftButton/OCX 3.0 - Button Control
SftDirectory 3.5 - File/Folder Control (discontinued)
SftMask/OCX 7.0 - Masked Edit Control
SftOptions 1.0 - Registry/INI Control (discontinued)
SftPrintPreview/OCX 1.0 - Print Preview Control (discontinued)
SftTabs/OCX 6.5 - Tab Control (VB6 only)
SftTree/OCX 7.5 - Tree Control
SftTabs/NET 6.0 - Tab Control (discontinued)
SftTree/NET 2.0 - Tree Control
This sample illustrates application-generated output.
The source code is located at C:\Program Files (x86)\Softelvdm\SftPrintPreview OCX 1.0\Samples\Visual Studio - CSharp\PreviewPages\Form1.cs or C:\Program Files\Softelvdm\SftPrintPreview OCX 1.0\Samples\Visual Studio - CSharp\PreviewPages\Form1.cs (on 32-bit Windows versions).
private void menuExit_Click(object sender, System.EventArgs e) { Application.Exit(); } private void Form1_Load(object sender, System.EventArgs e) { axSftPrintPreview1.Dock = DockStyle.Fill; // Use the RenderContent event to render pages axSftPrintPreview1.ContentProviderCallback(0, IntPtr.Zero, IntPtr.Zero); Show(); // Show this form so we get the form and the messagebox at the same time MessageBox.Show("This example demonstrates application-generated output.\r\n\r\nIt prints one bitmap and 50 lines of text a total of 20 times. " + "The included source code illustrates how an application can print one page at a time, with an easy " + "mechanism to keep track of restart positions."); } private void axSftPrintPreview1_CloseWanted(object sender, System.EventArgs e) { Application.Exit(); } private void axSftPrintPreview1_HelpWanted(object sender, AxSftPrintPreviewLib10._ISftPrintPreviewEvents_HelpWantedEvent e) { MessageBox.Show("Sorry, this sample doesn't offer a help file"); } private void axSftPrintPreview1_PageSetupWanted(object sender, System.EventArgs e) { axSftPrintPreview1.PageSetup(0); } private void axSftPrintPreview1_RenderContent(object sender, AxSftPrintPreviewLib10._ISftPrintPreviewEvents_RenderContentEvent e) { // This function is called by SftPrintPreview to print pages, to initialize and // terminate printing (to prepare and free resources) and for page positioning if (e.function == SftPrintPreviewRenderContentConstants.renderSftPrintPreview_Init) m_PrintFont = new Font("Arial", 10); else if (e.function == SftPrintPreviewRenderContentConstants.renderSftPrintPreview_Term) m_PrintFont = null; else if (e.function == SftPrintPreviewRenderContentConstants.renderSftPrintPreview_1Page) PrintOnePage(ref e.visitedPageInfo, ref e.lastPage); } private void PrintOnePage(ref object visitedPageInfo, ref int lastPage) { // Print one page (can occur multiple times) // RenderingInfo.CurrentPage has the absolute page # to print (0..n) // RenderingInfo.PreviousVisitedPageInfo contains the value you returned in // RenderingInfo.VisitedPageInfo when you finished printing the previous page // This allows you to simply restart where you left off. // The information you return in RenderingInfo.VisitedPageInfo is of type // object, so it can be a simple counter or even a complex object, with cached // information. // In this example we print 1 bitmap, then 50 lines of text, // 20 times // We use RenderingInfo.PreviousVisitedPageInfo to resume printing. // We simply start at 0 and add 1 for each bitmap or line we // printed. Using a simple formula, we can determine where we // left off. In an application, the concept remains the same, but // instead of a simple counter, you could use RenderingInfo.VisitedPageInfo // to store more complex information. // Set up a Graphics object where we render the page Graphics g = Graphics.FromHdc((IntPtr)axSftPrintPreview1.RenderingInfo.hDC); g.PageUnit = GraphicsUnit.Pixel; // set it to pixel mode // It is also possible to set it to GraphicsUnit.Inch or GraphicsUnit.Millimeter or the other // unit modes. Information in RenderingInfo is available in pixels and inches. long counter = 0; SolidBrush brush = new SolidBrush(Color.Black);// Color printers support other colors too Rectangle outRect = new Rectangle(axSftPrintPreview1.RenderingInfo.OutputRectDisplayPix.left, axSftPrintPreview1.RenderingInfo.OutputRectDisplayPix.top, axSftPrintPreview1.RenderingInfo.OutputRectDisplayPix.right-axSftPrintPreview1.RenderingInfo.OutputRectDisplayPix.left, axSftPrintPreview1.RenderingInfo.OutputRectDisplayPix.bottom-axSftPrintPreview1.RenderingInfo.OutputRectDisplayPix.top); if (axSftPrintPreview1.RenderingInfo.PreviousVisitedPageInfo != null) counter = (long) axSftPrintPreview1.RenderingInfo.PreviousVisitedPageInfo;// we left off here on the previous page // starting output position on this page int xPrinter, yPrinter; xPrinter = outRect.Left; yPrinter = outRect.Top; for ( ; ; ) { if (counter >= (1+50)*20) // 1 bitmap, 50 lines of text, 20 times { // we have printed 1 bitmap and 50 lines 20 times, we're done lastPage = axSftPrintPreview1.RenderingInfo.CurrentPage; // return that this is the last page break; } if ((counter % (50+1)) == 0) { // Print a bitmap // get bitmap size Bitmap bmp = new Bitmap(pictureBox1.Image); int wPrinterPix, hPrinterPix, wDispPix, hDispPix; IntPtr hBmp = bmp.GetHbitmap(); axSftPrintPreview1.GetDDBSize((int) hBmp, (int) axSftPrintPreview1.RenderingInfo.hDC, out wPrinterPix, out hPrinterPix, out wDispPix, out hDispPix); // make sure entire image fits on remaining page if (yPrinter + hPrinterPix > outRect.Bottom) { DeleteObject(hBmp); break; } // print bitmap, horizontally centered axSftPrintPreview1.PrintDDB((int) hBmp, axSftPrintPreview1.RenderingInfo.hDC, xPrinter +(outRect.Width-wPrinterPix)/2, yPrinter, wPrinterPix, hPrinterPix, wDispPix, hDispPix); DeleteObject(hBmp); yPrinter += hPrinterPix; // next available space } else { // Print line // get text size SizeF s = g.MeasureString(m_drawText, m_PrintFont); // make sure text fits on remaining page if (yPrinter + s.Height > outRect.Bottom) break; Point pt = new Point(outRect.Left + (outRect.Width - (int) s.Width)/2, yPrinter); g.DrawString(m_drawText, m_PrintFont, brush, pt); yPrinter += (int) s.Height; } ++counter; // one more item done } visitedPageInfo = counter; // we left off here }