コントロールをGraphicsへ描画
6986 ワード
DataGridViewではCellにUserContorlを表示することができない。
なら、DataGridViewColumnにUserControlを持たせておき、
そのUserControlを利用して描画すればよいのではないか(-_-)
なので、Control.DrawToBitmapを参考流用して実現してみた。
CaptureControl.cs
public class CaptureControl
{
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(HandleRef hWnd, int msg, IntPtr wParam, IntPtr lParam);
[DllImport("gdi32.dll", CharSet = CharSet.Auto, ExactSpelling = true, SetLastError = true)]
private static extern bool BitBlt(HandleRef hDC, int x, int y, int nWidth, int nHeight, HandleRef hSrcDC, int xSrc, int ySrc, int dwRop);
public static void Capture(Graphics graphics, Control control, Rectangle rect)
{
int width = Math.Min(rect.Width, control.Width);
int height = Math.Min(rect.Height, control.Height);
using (var image = new Bitmap(width, height))
using (Graphics sourceGraphics = Graphics.FromImage(image))
{
var sourceHdc = sourceGraphics.GetHdc();
SendMessage(new HandleRef(control, control.Handle), 791, sourceHdc, (IntPtr)30);
IntPtr hdc2 = graphics.GetHdc();
BitBlt(new HandleRef(graphics, hdc2), 0, 0, width, height, new HandleRef(sourceGraphics, sourceHdc), 0, 0, 13369376);
graphics.ReleaseHdcInternal(hdc2);
sourceGraphics.ReleaseHdcInternal(sourceHdc);
}
}
}
Author And Source
この問題について(コントロールをGraphicsへ描画), 我々は、より多くの情報をここで見つけました https://qiita.com/s-matsuba/items/d1073cf780d88cb5e9aa著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .