VS2005中获得控件图象

本文详细介绍了在Visual Studio 2005(VS2005)环境下,如何在VB和C#中获取并操作控件的图像资源。通过实例代码,展示了如何利用integer和function来实现这一功能,对于用户界面开发具有参考价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VB 2005

Imports System.Runtime.InteropServices

    
Public Function GetControlBitmap(ByVal c As Control, ByVal targetBounds As Rectangle) As Drawing.Bitmap

        
If (((targetBounds.Width <= 0OrElse (targetBounds.Height <= 0)) OrElse ((targetBounds.X < 0OrElse (targetBounds.Y < 0))) Then
            
Throw New ArgumentException("目标大小错误")
        
End If

        
Dim width As Integer = Math.Min(c.Width, targetBounds.Width)
        
Dim height As Integer = Math.Min(c.Height, targetBounds.Height)

        
Dim image As New Bitmap(width, height)
        
Dim bmp As New Bitmap(width, height)

        
Using graphics As Graphics = Drawing.Graphics.FromImage(image)
            
Dim hdc As IntPtr = graphics.GetHdc
            SendMessage(
New HandleRef(c, c.Handle), &H317, hdc, 30)
            
Using graphics2 As Graphics = Drawing.Graphics.FromImage(bmp)
                
Dim handle As IntPtr = graphics2.GetHdc
                BitBlt(
New HandleRef(graphics2, handle), targetBounds.X, targetBounds.Y, width, height, New HandleRef(graphics, hdc), 00&HCC0020)
                graphics2.ReleaseHdcInternal(handle)
            
End Using
            graphics.ReleaseHdcInternal(hdc)
        
End Using

        
Return bmp

    
End Function


    
<DllImport("user32.dll", CharSet:=CharSet.Auto)> _
      
Public Shared Function SendMessage(ByVal hWnd As HandleRef, ByVal msg As IntegerByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
    
End Function


    
<DllImport("gdi32.dll", CharSet:=CharSet.Auto, SetLastError:=True, ExactSpelling:=True)> _
    
Public Shared Function BitBlt(ByVal hDC As HandleRef, ByVal x As IntegerByVal y As IntegerByVal nWidth As IntegerByVal nHeight As IntegerByVal hSrcDC As HandleRef, ByVal xSrc As IntegerByVal ySrc As IntegerByVal dwRop As IntegerAs Boolean
    
End Function

 

C# 2005

 

using System.Runtime.InteropServices;

        
public Bitmap GetControlBitmap(Control c, Rectangle targetBounds)
{
    
if ((targetBounds.Width <= 0|| (targetBounds.Height <= 0|| (targetBounds.X < 0|| (targetBounds.Y < 0))
    
{
        
throw new ArgumentException("目标大小错误");
    }


    
int width = Math.Min(c.Width, targetBounds.Width);
    
int height = Math.Min(c.Height, targetBounds.Height);

    Bitmap image 
= new Bitmap(width, height);
    Bitmap bmp 
= new Bitmap(width, height);

    
using (Graphics graphics = Graphics.FromImage(image))
    
{
        IntPtr hdc 
= graphics.GetHdc();
        SendMessage( 
new HandleRef(c, c.Handle), 0x317, hdc, (IntPtr) 30);
        
using (Graphics graphics2 = Graphics.FromImage(bmp))
        
{
            IntPtr handle 
= graphics2.GetHdc();
            BitBlt(
new HandleRef(graphics2, handle), targetBounds.X, targetBounds.Y, width, height, new HandleRef(graphics, hdc), 000xcc0020);
            graphics2.ReleaseHdcInternal(handle);
        }

        graphics.ReleaseHdcInternal(hdc);
    }

    
return bmp;
}


        [DllImport(
"user32.dll", CharSet = CharSet.Auto)]
        
public static extern IntPtr SendMessage(HandleRef hWnd, int msg, IntPtr wParam, IntPtr lParam);



        [DllImport(
"gdi32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
        
public static extern bool BitBlt(HandleRef hDC, int x, int y, int nWidth, int nHeight, HandleRef hSrcDC, int xSrc, int ySrc, int dwRop);
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值