我有一个控件,我想在表单中和打印时以不同的方式绘制它。这是我的做法:
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
Rectangle rect = myControl.ClientRectangle;
myControl.Render(e.Graphics, rect);
e.HasMorePages = false;
}
Run Code Online (Sandbox Code Playgroud)
并在渲染函数中
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
}
Run Code Online (Sandbox Code Playgroud)
但是当PrintDocumentDialog显示时,测试的结果总是DT_RASDISPLAY而不是我期望的DT_RASPRINTER。
那么正确的做法是什么呢?
谢谢
小智 5
您的 DeviceCapTechnology 枚举是错误的
/* 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 */
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1629 次 |
| 最近记录: |