GDI操作基础(1)——拷贝A窗体的内容到B窗体上

原创 2008年09月28日 00:25:00

 

 

 

Form2中的代码:

 

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. namespace DrawOnDesktop
  10. {
  11.     public partial class Form2 : Form
  12.     {
  13.         private Form1 f1 = new Form1();
  14.         private IntPtr f1_hdc = IntPtr.Zero;
  15.         private IntPtr f2_hdc = IntPtr.Zero;
  16.         public Form2()
  17.         {
  18.             InitializeComponent();
  19.             f1.Show();
  20.         }
  21.         private void timer1_Tick(object sender, EventArgs e)
  22.         {
  23.             f1_hdc = Win.GetDC(f1.Handle);
  24.             f2_hdc = Win.GetDC(this.Handle);
  25.             DrawOnDesktop.Win.Rect rect;
  26.             Win.GetClientRect(f1.Handle, out rect);
  27.             Win.BitBlt(f2_hdc, 0, 0, rect.right, rect.bottom, f1_hdc, 0, 0, 13369376);
  28.             Win.ReleaseDC(f1.Handle, f1_hdc);
  29.             Win.ReleaseDC(this.Handle, f2_hdc);
  30.         }
  31.     }
  32. }

 

Win.cs

 

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Runtime.InteropServices;
  6. namespace DrawOnDesktop
  7. {
  8.     public static class Win
  9.     {
  10.         [StructLayout(LayoutKind.Sequential) ]
  11.         public struct Rect
  12.         {
  13.             public int left;
  14.             public int top;
  15.             public int right;
  16.             public int bottom; 
  17.         }
  18.         [DllImport("user32")]
  19.         public static extern IntPtr GetDC(IntPtr hwnd);
  20.         [DllImport("user32")]
  21.         public static extern bool GetClientRect(IntPtr hWnd, out Rect rect);
  22.         [DllImport("gdi32")]
  23.         public static extern bool BitBlt(
  24.           IntPtr hdcDest, // handle to destination DC
  25.           int nXDest,  // x-coord of destination upper-left corner
  26.           int nYDest,  // y-coord of destination upper-left corner
  27.           int nWidth,  // width of destination rectangle
  28.           int nHeight, // height of destination rectangle
  29.           IntPtr hdcSrc,  // handle to source DC
  30.           int nXSrc,   // x-coordinate of source upper-left corner
  31.           int nYSrc,   // y-coordinate of source upper-left corner
  32.           int dwRop  // raster operation code
  33.         );
  34.         [DllImport("user32")]
  35.         public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
  36.     }
  37. }

Form1没有写代码,在Form中有一个定时器,触发事件为100ms。

A窗体点按钮,弹出B窗体,B窗体修改了内容后,将数据传递回来到A窗体

A窗体点按钮,弹出B窗体,B窗体修改了内容后,将数据传递回来到A窗体 例如:A窗体点按钮弹出来,B窗口tbSelectName修改了数据后,退出B窗体后,会将修改后的值放回到A窗体里的 注...
  • xiongyongting
  • xiongyongting
  • 2016年12月14日 11:49
  • 302

在A窗口中打开B窗口,在B窗口中操作完以后关闭B窗口,同时自动刷新A窗口

function closeWin() {        hasClosed = true;        var frame=window.opener.parent.document.frames...
  • lyg__wangjian
  • lyg__wangjian
  • 2011年04月19日 17:45
  • 710

C# 窗体A跳转到窗体B 窗体B关闭后 A继续运行

不知道大家有没有碰到在C#中碰到窗体A要关闭但必须得到窗体B的登录验证,登录不成功就关闭B  A继续运行。 这种方法网上大家也是各有说词,虽然也可以实现,但个人觉得有点繁琐  也不容易理解。 话不多说...
  • u011630900
  • u011630900
  • 2016年09月30日 10:41
  • 834

不规则窗口——GDI+实现

  今天终于完成一个小心结,以前看到鱼鱼桌面秀那里那么炫的界面就想自己做一回,但是苦于没有实现思路,今天终于有了点眉目了。其实那些桌面秀的界面都是不规则的窗口,以前也有想过实现做不规则窗口,但由于各种...
  • abcpanpeng
  • abcpanpeng
  • 2010年04月25日 09:49
  • 2595

使用GDI+时关于窗体重绘的问题

用GDI+对窗体(Form)进行绘图(就是画圆等操作,用Graphics来做的),代码如下:private void button1_Click(object sender, System.Event...
  • tjvictor
  • tjvictor
  • 2006年06月19日 11:16
  • 4359

“窗体”工具栏控件和“控件工具箱”控件基础

在工作表菜单“视图——工具栏”或在菜单栏点击右键,在下拉菜单中有两个内容比较相似工具栏,即“窗体”工具栏和“控件工具箱”工具栏,如下图所示。500){this.resized=true;this.st...
  • ZOU_SEAFARER
  • ZOU_SEAFARER
  • 2007年01月27日 07:14
  • 4588

在Windows窗体中显示OpenCV图像

在Windows窗体中显示OpenCV库读取的Mat图像,首先就是将Mat图像转换为Windows认可的BITMAPINFOHEADER数据结构,然后获取相应窗体的HWND句柄。 具体显示函数如下:...
  • wootengxjj
  • wootengxjj
  • 2016年07月01日 20:12
  • 473

C# 如何通过委托进行窗体1到窗体2的传值

举个简单的例子吧:假如你要把Form1里的textBox1框的值赋给Form2中的textBox1框。用委托么可以这么写: Form1中 using System; using Sy...
  • jing_xin
  • jing_xin
  • 2014年11月14日 11:04
  • 1836

B窗体关闭时刷新A窗体的DataGridView

需求:A窗体中有一个DataGridView和一个添加按钮,我需要在DataGridView中添加一行信息,要求添加后DataGridView自动刷新。 实现思路:单击添加按钮,弹出B窗体,手动添加...
  • Gnd15732625435
  • Gnd15732625435
  • 2017年08月09日 21:11
  • 439

VS中如何在不同工程中复制窗口资源

今天开会的时候, 发现居然有同事不知道在VS中复制窗口资源的方法, 以前一直都是重新创建的, 故而分享一下. VS工程目录下有一个.rc文件, 右键单击, 选择打开方式/C++源代码编译器, 然后可...
  • yumorende
  • yumorende
  • 2015年03月13日 12:59
  • 452
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GDI操作基础(1)——拷贝A窗体的内容到B窗体上
举报原因:
原因补充:

(最多只允许输入30个字)