【问题标题】:How do I capture a WinForm window to a bitmap without the caret如何在没有插入符号的情况下将 WinForm 窗口捕获到位图
【发布时间】:2011-02-03 03:21:07
【问题描述】:

我在 WinForm 上有一个窗口,我想获得它的位图表示。 为此,我使用以下代码(其中codeEditor 是我想要位图表示的控件):

    public Bitmap GetBitmap( )
    {
        IntPtr srcDC = NativeMethods.GetDC( codeEditor.Handle ) ;
        var bitmap = new Bitmap( codeEditor.Width, codeEditor.Height ) ;

        Graphics graphics = Graphics.FromImage( bitmap ) ;

        var deviceContext = graphics.GetHdc( ) ;
        bool blitted = NativeMethods.BitBlt(
            deviceContext,
            0,
            0,
            bitmap.Width,
            bitmap.Height,
            srcDC,
            0,
            0,
            0x00CC0020 /*SRCCOPY*/ ) ;
        if ( !blitted )
        {
            throw new InvalidOperationException(
                @"The bitmap could not be generated." ) ;
        }

        int result = NativeMethods.ReleaseDC( codeEditor.Handle, srcDC ) ;
        if ( result == 0 )
        {
            throw new InvalidOperationException( @"Cannot release bitmap resources." ) ;
        }

        graphics.ReleaseHdc( deviceContext ) ;
        graphics.Dispose( ) ;

问题是,如果插入符号在捕获时在窗口中闪烁,则会捕获插入符号。我尝试在捕获之前调用Win32方法HideCaret,但似乎没有任何效果。

【问题讨论】:

  • 你可能想要一个 C# 标签。

标签: winforms graphics winapi gdi+ gdi


【解决方案1】:

嗯,一种方法是将焦点设置到表单的其他控件 - 并可能稍后将焦点恢复到文本字段。

【讨论】:

    【解决方案2】:

    当你这样做时会发生什么?

    public Bitmap GetBitmap()
    {
        Bitmap bmp = new Bitmap(codeEditor.Width, codeEditor.Height);
        Rectangle rect = new Rectangle(0, 0, codeEditor.Width, codeEditor.Height);
        codeEditor.DrawToBitmap(bmp, rect);
        return bmp;
    }
    

    【讨论】:

    • 很好的假设 - 我应该指出窗口包含第三方组件,其中一个在使用 DrawToBitmap 时无法提供正确的图像
    • @Steve:这很奇怪 - 我会假设 DrawToBitmap 只是包装你正在做的事情,因此会产生相同的图像。这是一个蹩脚的想法:如果插入符号总是在同一个地方(可能不是),你可以从位图中删除它(即在插入符号顶部绘制背景颜色)吗?
    • 根据字体的不同,插入符号可以与文本重叠。
    猜你喜欢
    • 2010-12-28
    • 1970-01-01
    • 2021-07-27
    • 2012-04-26
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多