遇到一个问题
在一个winform窗口中有很多控件,我在他们的最上层铺了一张背景透明的图片,我希望用户点击时窗口中的控件还能够正常响应,我应该怎么做,
请高手们给出具体的实现方式,最好有代码谢谢winform
在一个winform窗口中有很多控件,我在他们的最上层铺了一张背景透明的图片,我希望用户点击时窗口中的控件还能够正常响应,我应该怎么做,
请高手们给出具体的实现方式,最好有代码谢谢winform
解决方案 »
- 求C#快速高效读取xml方法
- C#winform中放有多个picturebox控件,如何让称动一个时,其它的不动?
- 请教一个类设计的问题.
- 如何在C#里实现DATAGRID的打印预览和打印?给个能执行的方案,谢谢
- 求命:serialport类的问题读数据程序就无响应?
- 事件和委托的概念问题,还是不清楚,大家再帮我看看
- 求救:异步Socket偶尔出现System.ArgumentException异常,何解?
- 请问可否释放单个SESSION???
- 谁有王凯明的“浅谈C#套接字编程”的源程序,给我发一个?加分!
- aspnet 怎么在服务器端绘图,然后向客户端输出?
- c# 异或运算 问题
- [紧急求救]winform 图片缩放
1、图片的点击事件中,根据坐标,去找窗体中其他控件,看看谁包含这个坐标,然后执行那个组件的click,这个方案不可行,因为窗口中的控件非常复杂,不光有点击事件,还有拖动操作。
2、关于使用拦截消息 wndproc、消息过滤器和钩子的方案,我都试了一下,但是都没有成功
不知道能否给出关键代码,我的实现方式如下
public class MousePreview
{ [DllImport("kernel32")]
public static extern int GetCurrentThreadId();
[DllImport("user32", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern int SetWindowsHookEx(int idHook, HOOKPROC lpfn, int hmod, int dwThreadId);
[DllImport("user32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
public delegate int HOOKPROC(int nCode, int wParam, int lParam);
private Control m_Control; public MousePreview(Control p_Control)
{
SetWindowsHookEx(7, new HOOKPROC(MyMouseProc), 0, GetCurrentThreadId());
m_Control = p_Control;
} public int MyMouseProc(int nCode, int wParam, int lParam)
{
if (nCode == 0)
{
Console.WriteLine(nCode.ToString());
Rectangle _Rect = m_Control.RectangleToScreen(m_Control.ClientRectangle);
if (!_Rect.Contains(Cursor.Position))
return 0; short _X = (short)(Cursor.Position.X - _Rect.X);
short _Y = (short)(Cursor.Position.Y - _Rect.Y); int _Point = _Y << 16;
_Point += _X;
switch (wParam)
{
case 512:
SendMessage(m_Control.Handle, 512, wParam, _Point);
break;
case 513:
SendMessage(m_Control.Handle, 513, wParam, _Point);
break;
case 514:
SendMessage(m_Control.Handle, 514, wParam, _Point);
break;
case 516:
SendMessage(m_Control.Handle, 516, wParam, _Point);
break;
case 517:
SendMessage(m_Control.Handle, 517, wParam, _Point);
break;
default:
break;
}
}
return 0;
}