【问题标题】:Drawing controls with GDI on Compact Framework在 Compact Framework 上使用 GDI 绘制控件
【发布时间】:2010-12-26 18:11:29
【问题描述】:

我需要在 Compact Framework 应用程序中绘制一个文本框,但直接使用 Graphics 对象。

我找到了 Control.DrawToBitmap 方法,我可以用它来使用 GDI 进行绘图,但它在 Compact Framework 上不可用。

有什么提示吗?

【问题讨论】:

  • 在另一个应用程序中绘制一个文本框?否则直接在图形上绘图不是一种选择吗?
  • 我使用的不是标准的 WinForms 控件,而是其他基于 GDI 的控件库。我需要从头开始创建自己的 TextBox(时间限制不允许我这样做),或者能够使用 GDI 绘制 WinForms TextBox。我还没有找到如何在 CF 上直接绘制图形。

标签: c# compact-framework mobile textbox gdi


【解决方案1】:

Control.DrawToBitmap() 是通过向控件发送 WM_PRINT 来实现的,让它在内存设备上下文中绘制自己。如果您使用的是非标准控件,则程序员没有实现此消息的可能性很大。我不认为它是由标准的 Windows Mobile 控件实现的。

那么,您唯一的其他办法就是将像素从屏幕上复制下来。 Graphics.CopyFromScreen() 是不行的,你必须 P/Invoke BitBlt() API 函数。 this thread. 和 pinvoke.net 上提供了可能有用的示例代码

【讨论】:

  • 我执行了 BitBit p/Invoke,但得到了黑色图像(我认为这是因为控件不以任何形式可见)。如果我使用可见控件,它就可以工作。还是谢谢:(
  • 问题是在 Windows Mobile 中我只能有一个活动屏幕,因此将 StartLocation 放在它的范围之外它不是一个选项。
【解决方案2】:

通常,您只需继承自:Control,覆盖 OnPaint 并使用参数提供的图形对象。你试过了吗?

【讨论】:

  • 有了它,我可以绘制文本、线条、多边形、位图等。但是如何从不受任何控制的文本框中获取“图像”?
  • 嗯?你想得到控件绘制的图像吗?除非您自己实现控件并通过属性公开它,否则您无法获得此信息。您可以通过在 Graphics.FromImage() 创建的图形对象上绘制控件来实现此目的,然后通过属性公开该图像,然后通过在事件参数中的“主”图形对象上使用 Graphics.DrawImage 最终绘制控件。但是,您必须以这种方式重新实现每个控件,因此需要付出很多努力。
【解决方案3】:

我不知道这是否可行....但从技术上讲,您可以使用反射来调用控件的 OnPaint 方法并在一组新的 PaintEventArgs 中传入您自己的图形对象 (Graphics.FromImage)。

它丑得要命......但它可能工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-23
    • 2011-08-29
    • 2010-10-06
    • 1970-01-01
    • 2010-09-28
    • 2010-10-07
    • 2020-05-14
    • 1970-01-01
    相关资源
    最近更新 更多