首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GetDeviceCaps技术

GetDeviceCaps技术
EN

Stack Overflow用户
提问于 2009-09-17 06:41:08
回答 1查看 1.5K关注 0票数 1

我有一个控件,我想在窗体和打印时以不同的方式绘制它。我是这样做的:

代码语言:javascript
运行
复制
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
        Rectangle rect = myControl.ClientRectangle;
        myControl.Render(e.Graphics, rect);
        e.HasMorePages = false;
    }

在Render函数中

代码语言:javascript
运行
复制
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
    }

但是当PrintDocumentDialog显示时,测试的结果总是DT_RASDISPLAY,而不是我期望的DT_RASPRINTER。

那么,什么才是正确的方法呢?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2010-01-27 03:51:32

您的DeviceCapTechnology枚举错误

代码语言:javascript
运行
复制
/* 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                     */
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1437073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档