首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图形对象的翻译不会影响WM_PRINT调用

图形对象的翻译不会影响WM_PRINT调用
EN

Stack Overflow用户
提问于 2013-01-31 10:30:28
回答 1查看 313关注 0票数 0

我目前正在使用一个WM_PRINT调用将一个控件呈现到一个图形对象中:

代码语言:javascript
复制
GraphicsState backup = graphics.Save();
graphics.TranslateTransform(50, 50);

IntPtr destHdc = graphics.GetHdc();

const int flags = (int)(DrawingOptions.PRF_CHILDREN | DrawingOptions.PRF_CLIENT | DrawingOptions.PRF_NONCLIENT);
NativeMethods.SendMessage(srcControl.Handle, (Int32)WM.WM_PRINT, (IntPtr)destHdc, (IntPtr)flags);
graphics.ReleaseHdc(destHdc);
graphics.DrawLine(Pens.Blue, new Point(), new Point(srcControl.Width, srcControl.Height));

graphics.Restore(backup);

我需要使用WM_PRINT命令而不是control.DrawToBitmap(),因为DrawToBitmap方法不处理屏幕外的控件。

代码将正确地将蓝色线条的绘制转换50,50,但控件呈现在左上角(0,0)。有没有什么方法可以使用WM_PRINT命令打印到特定的位置(50,50)?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2013-08-18 18:54:27

原因是WM_PRINT使用Device context,而不是通过graphics,因此translate transform不受影响。它只受graphics上调用的绘图方法的影响。以下是一种解决方法:

代码语言:javascript
复制
GraphicsState backup = graphics.Save();
Bitmap bm = new Bitmap(srcControl.Width, srcControl.Height);
Graphics g = Graphics.FromImage(bm);
IntPtr destHdc = g.GetHdc();

const int flags = (int)(DrawingOptions.PRF_CHILDREN | DrawingOptions.PRF_CLIENT |     DrawingOptions.PRF_NONCLIENT);
NativeMethods.SendMessage(srcControl.Handle, (Int32)WM.WM_PRINT, destHdc,  (IntPtr)flags);
g.ReleaseHdc(destHdc);
graphics.DrawImage(bm, new Point(50,50));
graphics.DrawLine(Pens.Blue, new Point(), new Point(srcControl.Width, srcControl.Height));

graphics.Restore(backup);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14617487

复制
相关文章

相似问题

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