获取某个控件相对桌面的坐标

fly_sky010 2012-03-14 09:42:23
如题
...全文
487 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly_sky010 2012-03-14
  • 打赏
  • 举报
回复
问题我解决了,代码如下:
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
private static extern long BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);
public Bitmap GetCurrentImage()
{
Graphics g = chart1.CreateGraphics();
Bitmap bitmap = new Bitmap(chart1.Width, chart1.Height, g);
Graphics memg = Graphics.FromImage(bitmap);
System.IntPtr dc1 = g.GetHdc();
System.IntPtr dc2 = memg.GetHdc();
BitBlt(dc2, 0, 0, chart1.ClientRectangle.Width, chart1.ClientRectangle.Height, dc1, 0, 0, 13369376);
g.ReleaseHdc(dc1);
memg.ReleaseHdc(dc2);
memg.Dispose();
g.Dispose();
return bitmap;
}
感谢各位的积极帮助!!!散分!
bdmh 2012-03-14
  • 打赏
  • 举报
回复
比如 button1.PointToScreen
porschev 2012-03-14
  • 打赏
  • 举报
回复

http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.pointtoscreen.aspx

其实你知道你控件在窗体的坐标,也知道窗体的坐标,生算都能算出来
taylor-yang 2012-03-14
  • 打赏
  • 举报
回复
计算出Chart控件在窗体中的位置,截取窗体图像。

获取桌面坐标需要用到API函数,而且桌面坐标是相对鼠标的。可以用句柄的方式,先获取Chart控件的句柄然后根据句柄获取坐标。

鼠标相对窗体的坐标:

 label1.Text = string.Format("当前鼠标相对窗体的坐标 X:{0}, Y:{1}", e.Location.X, e.Location.Y);


鼠标相对桌面的坐标:



/// <summary>
/// 获得鼠标位置参数
/// </summary>
/// <param name="IpPoint">鼠标位置参数</param>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern void GetCursorPos(
out Point IpPoint);//获取鼠标位置






/// <summary>
/// 获得鼠标位置参数
/// </summary>
/// <returns>鼠标参数</returns>
public static Point GetCursorPos()
{
Point p;
GetCursorPos(out p);
return p;
}





/// <summary>
/// 获得一个窗口的的子窗口的句柄
/// </summary>
/// <param name="hwndParent">要查找子窗口的父窗口句柄</param>
/// <param name="hwndChildAfter">子窗口句柄</param>
/// <param name="lpszClass">类名的空结束字符串</param>
/// <param name="lpszWindow">窗口名(窗口标题)的空结束字符串</param>
/// <returns>窗口的句柄</returns>
[DllImport("user32.dll", EntryPoint = "FindWindowEx", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindowEx(
IntPtr hwndParent, //要查找子窗口的父窗口句柄
IntPtr hwndChildAfter, //子窗口句柄
string lpszClass,//类名
string lpszWindow//标题
);




/// <summary>
/// 获得一个窗口的的子窗口的句柄
/// </summary>
/// <param name="hwndParentClass">父窗口类名</param>
/// <param name="hwndParentName">父窗口名称</param>
/// <param name="hwndChildAfterClass">子窗口类名</param>
/// <param name="hwndChildAfterName">子窗口名称</param>
/// <param name="lpszClass">类名</param>
/// <param name="lpszWindow">名称</param>
/// <returns>窗口的句柄</returns>
public static IntPtr FindWindowEx(
string hwndParentClass, //父窗口类名
string hwndParentName,//父窗口名称
string hwndChildAfterClass,//子窗口类名
string hwndChildAfterName,//子窗口名称
string lpszClass,//类名
string lpszWindow)//名称
{
return FindWindowEx(FindWindow(hwndParentClass, hwndParentName), FindWindow(hwndChildAfterClass, hwndChildAfterName), lpszClass, lpszWindow);
}



/// <summary>
/// 获得一个窗口的的子窗口的句柄
/// </summary>
/// <param name="hwndParentClass">父窗口类名</param>
/// <param name="hwndParentName">父窗口名称</param>
/// <param name="lpszClass">类名</param>
/// <param name="lpszWindow">名称</param>
/// <returns>窗口的句柄</returns>
public static IntPtr FindWindowEx(
string hwndParentClass, //父窗口类名
string hwndParentName,//父窗口名称
string lpszClass,//类名
string lpszWindow)//名称
{
IntPtr hwnd = FindWindowEx(FindWindow(hwndParentClass, hwndParentName), (IntPtr)0, lpszClass, lpszWindow);
if (hwnd == IntPtr.Zero)
{
return FindWindowEx((IntPtr)0, FindWindow(hwndParentClass, hwndParentName), lpszClass, lpszWindow);
}
return hwnd;
}




对于某个窗体而言,Chart控件是这个窗体的一个子窗口。获取子窗口句柄就是获取Chart控件的句柄。

fly_sky010 2012-03-14
  • 打赏
  • 举报
回复
是这样的,想把Chart控件生成的图片用截图的方式截下来,但是不能手动截图,点一下按钮,自动把整个chart控件截下来,这个怎么做了?

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧