WinForm中没有按钮,但鼠标左键点击WinForm中任一点时,需要获得鼠标位置,并触发某个函数;右击时同样需求。

解决方案 »

  1.   

    以前没做过WinForm,麻烦说的详细点
      

  2.   

    参考一下这个:http://msdn.microsoft.com/zh-cn/system.windows.forms.control.mouseposition(VS.85).aspx
      

  3.   

    http://blog.csdn.net/sohighthesky/archive/2009/04/15/4074757.aspx
      

  4.   

    不需要钩子的么
    mouseclick事件
    private void Form1_MouseClick(object sender, MouseEventArgs e)
    {
    if (e.Button == MouseButtons.Right || e.Button == MouseButtons.Left)
    {
    Point p = MousePosition;//获取位置
    //其他需要执行的代码
    }}
      

  5.   

    MousePosition获得的好像不是窗体中鼠标的位置?和鼠标实际位置有一个偏移值?
      

  6.   


    如果窗体被控件覆盖,鼠标点击到控件上是不会触发Form的MouseClick事件
      

  7.   

    摘要:
        获取鼠标光标的位置(以屏幕坐标表示)。
    返回结果:
        一个 System.Drawing.Point,它包含鼠标光标相对于屏幕左上角的坐标。ms是这样说的可以把所有控件的mouseclick都订阅到你的处理函数
      

  8.   

    MouseEventArgs中也有表示鼠标位置的point Location
    可以试试看有什么不同
      

  9.   

    经过试验MousePosition中的似乎是以银幕左上为0坐标的坐标值
    MouseEventArgs中的point Location是以窗口最左上为0坐标的坐标值
      

  10.   


    所有控件的MouseClick都注册,你不觉得太多了么。
      

  11.   

    public Form1()
    {
        this.MouseClick += new MouseEventHandler(Form1_MouseClick);
    }
    void Form1_MouseClick(object sender, MouseEventArgs e)
    {
        this.Text = e.Location.ToString();
    }
      

  12.   

    用钩子或mouseleft(right)click事件实现都可以..
      

  13.   

    所有控件都要响应,还有什么其他办法么
    其实写起来也就一句话么
    foreach (var item in this.Controls)
    {
    ((Control)item).MouseClick += new MouseEventHandler(Form1_MouseClick);
    }
      

  14.   

    MouseClick事件的参数中就带有坐标。
    如果是Click事件,MousePosition可获取坐标,这是屏幕坐标,可使用PointToClient方法转换为相对坐标。
      

  15.   


            private void Form1_MouseClick(object sender, MouseEventArgs e)
            {
                int x = e.X;
                int y = e.Y;
            }
    这样就可以了。不过,这个是相对的坐标。如果想获取屏幕的坐标。好像还是要转换的
      

  16.   

    用API   GetCursorPos()获取鼠标的位置   GetWindowRect()获得窗口的区域,然后根据区域判断,鼠标落下时触发什么事件
      

  17.   

    楼主没做过VC++的开发,消息循环要了解,windows应用程序的运行原理要了解。
    给个参考:        #region 重写快捷键响应
            protected override bool ProcessCmdKey(ref   Message msg, Keys keyData)
            {
                switch (keyData)
                {
                    case Keys.F4:   //F4   键 打开设置窗体
                        LoginForm lgfm = new LoginForm();
                        if (lgfm.ShowDialog() == DialogResult.OK)
                        {
                            TestForm testForm = new TestForm();
                            testForm.Show();
                        }
                        return true;
                    case Keys.Escape://ESC键退出程序
                        Application.Exit();
                        return true;
                }
                return base.ProcessCmdKey(ref   msg, keyData);
            }
            #endregion
      

  18.   

    用API GetCursorPos()获取鼠标的位置   GetWindowRect获得窗体的范围   然后根据鼠标的位置和区域判断触发的事件。
      

  19.   

    如果是想点击鼠标的任意键都会触发的话,你可以重写 Point。 里面捕获 windows消息,然后判断到,就 可以做你想做的事情乐。
      

  20.   

    错了,重写WndProc方法
    。。        /// <summary>
            /// windows消息窗体 屏蔽鼠标操作
            /// </summary>
            /// <param name="m"></param>
            protected override void WndProc(ref Message m)
            {            if (m.Msg == 0x201 || m.Msg == 0x202 || m.Msg == 0x203 || m.Msg == 0x204 || m.Msg == 0x205 || m.Msg == 0x206 || m.Msg == 0x207 || m.Msg == 0x208 || m.Msg == 0x209)
                {
                    return;
                }
                base.WndProc(ref m);        }