使用SendMessage方法对窗体上的控件进行截图,该方法的思想就是把控件的句柄拿到,对控件发送WM_PAINT消息,并且把希望得到图形对象的句柄当作wParam参数传过去,这样就可以在图形对象得到想要得图形。
2006-07-31 11:21
1006 查看
使用SendMessage方法对窗体上的控件进行截图,该方法的思想就是把控件的句柄拿到,对控件发送WM_PAINT消息,并且把希望得到图形对象的句柄当作wParam参数传过去,这样就可以在图形对象得到想要得图形。
[System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
// 定义WM_PAINT消息
public const int WM_PAINT = 0x00f;
private void button1_Click(object sender, System.EventArgs e)
{
// 得到控件
Control ctrl = this.radioButton1;
// 建立图形对象
Bitmap drawSurface = new Bitmap(ctrl.Width, ctrl.Height);
using (Graphics g = Graphics.FromImage(drawSurface))
{
IntPtr hDc = g.GetHdc();
// 画图
SendMessage(ctrl.Handle, WM_PAINT, hDc, IntPtr.Zero);
g.ReleaseHdc(hDc);
}
// 将图显示在PictureBox中
this.pictureBox1.Image = drawSurface;
}
[System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
// 定义WM_PAINT消息
public const int WM_PAINT = 0x00f;
private void button1_Click(object sender, System.EventArgs e)
{
// 得到控件
Control ctrl = this.radioButton1;
// 建立图形对象
Bitmap drawSurface = new Bitmap(ctrl.Width, ctrl.Height);
using (Graphics g = Graphics.FromImage(drawSurface))
{
IntPtr hDc = g.GetHdc();
// 画图
SendMessage(ctrl.Handle, WM_PAINT, hDc, IntPtr.Zero);
g.ReleaseHdc(hDc);
}
// 将图显示在PictureBox中
this.pictureBox1.Image = drawSurface;
}
相关文章推荐
- OnClick事件的Sender参数的前世今生——TWinControl.WinProc优先捕捉到鼠标消息,然后使用IsControlMouseMsg函数进行消息转发给图形子控件(意外发现OnClick是由WM_LBUTTONUP触发的)
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
- js获取src请求 得到一个参数和多个参数写法(这是集中网上的多个方法,自己cv过去就可以使用)
- VC++ 获取窗体句柄,并发送键盘消息(这种方法也可以打开某些应用程序)
- Android中关于使用Intent进行窗体切换,并且传值和自定义类的对象详解
- 窗体背景的绘制(Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景)
- WM_ERASEBKGND官方解释(翻译),以及Delphi里所有的使用情况(就是绘制窗口控件背景色,并阻止进一步传递消息)
- 如果一个箱子里面有100个球,有两个玩家,1和2,他们都很聪明,可以随机从箱子里面拿出2或6个球,箱子是透明的并且箱子里面有多少个球他们也可以看得到 ,如果算最后一个球能被谁拿到,谁就是
- 窗体图片背景(两种方法:设置Brush.Bitmap指向图片,别的控件也可以这样)
- 当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的.
- 要绘图,首先得调整画笔,待画笔调整好之后,再将图像绘制到画布上,这样才可以显示在手机屏幕上。Android 中的画笔是 Paint类,Paint 中包含了很多方法对其属性进行设置,主要方法(没有全部列
- 五星-原型模式常使用于以下场景--而JAVA中的任何类只要实现了Cloneable标识接口,就可以使用clone方法来进行对象的拷贝
- php如何通过get方法发送http请求,并且得到返回的参数
- QT 中使用 Windows API----SendMessage() 进行窗体间消息传递
- WM_PAINT在微软官方定义中,wParam和lParam都没有使用,所以就被Delphi给重定义了这个消息,还增加了DC(Delphi可任意改写消息的结构,只需要保持前4个字节是消息即可,另外要携带微软定义的所有必要信息就行了)
- Android中使用Intent进行窗体切换,并且传值和自定义类的对象详解
- 【转】vc中使用SendMessage正确发送自定义消息的方法--不错
- 迭代器就是重复地做一些事情,可以简单的理解为循环,在python中实现了__iter__方法的对象是可迭代的,实现了next()方法的对象是迭代器,这样说起来有