tags:

views:

77

answers:

1

Hello,

I have a control and I want to paint it different way in Form and when printting. Here the way I did it:

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
        Rectangle rect = myControl.ClientRectangle;
        myControl.Render(e.Graphics, rect);
        e.HasMorePages = false;
    }

and in Render function

public void Render(Graphics g, Rectangle rect) {
      DeviceCapTechnology dct = (DeviceCapTechnology)GetDeviceCaps(hDC, (int)DeviceCap.TECHNOLOGY);
      if((dct & DeviceCapTechnoloy.DT_RASPRINTER) == DeviceCapTechnoloy.DT_RASPRINTER) {
           //logic for print to printer
      } else {
           //normal logic
      }
}
public enum DeviceCapTechnology
    {
        DT_PLOTTER = 0, //Vector plotter
        DT_RASDISPLAY = 2, //Raster display
        DT_RASPRINTER = 4, //Raster printer
        DT_RASCAMERA = 6, //Raster camera
        DT_CHARSTREAM = 8, //Character stream
        DT_METAFILE = 10, //Metafile
        DT_DISPFILE = 12 //Display file
    }

But when the PrintDocumentDialog show, the result of the test always is DT_RASDISPLAY not what I expected to be DT_RASPRINTER.

So what is the right way to do it?

Thank you

+1  A: 

Your DeviceCapTechnology enumeration is wrong

/* Device Technologies */

define DT_PLOTTER 0 /* Vector plotter */

define DT_RASDISPLAY 1 /* Raster display */

define DT_RASPRINTER 2 /* Raster printer */

define DT_RASCAMERA 3 /* Raster camera */

define DT_CHARSTREAM 4 /* Character-stream, PLP */

define DT_METAFILE 5 /* Metafile, VDM */

define DT_DISPFILE 6 /* Display-file */

Harry