如何在forms 2.0 Label控件中捕获Ctrl+鼠标左键down?

解决方案 »

  1.   

    WM_LBTNDOWN的时候,检查VK_CTRL的状态
      

  2.   

    要在控件中做Ctrl+鼠标左键,来获得当前点在forms 2.0 Label控件中位置。只在WM_LBTNDOWN的时候,检查VK_CTRL的状态好像不能得到我想要的功能
      

  3.   

    Ctrl+MouseDown通过上面的方法已经得到了,
    现在通过GetCursorPos(???好象是这函数),可以得到鼠标位置,
    然后在计算它在控件中的准确位置,然后再XXXXXXXXXXXXXXXXX不就干X就干X了?
      

  4.   

    void CZssPage::OnLButtonDown (UINT nFlags,CPoint point)
    {
    if(nFlag & MK_CONTROL)
    {
    AfxMessageBox("已经按下CTRL键和鼠标左键");
    }
    }
    用这个语句在属性页的其他地方管用,但是如果点在控件上面就没有效果,是不是要从控件类再派生出一个新类,然后加入鼠标左键按下的事件?
      

  5.   

    void CZssPage::OnLButtonDown (UINT nFlags,CPoint point)
    只对该窗口有效,如果你要在其他地方有效果,有以下几种办法:
    1 在最开始的消息循环里面做,如果你用mfc可能对这个不熟,可以用下面的方法
    2 用钩子,这个没学过也稍微有点麻烦
    3 用OnIdle消息(mfc应该有吧???没有就是我失言了),在OnIdle里面同时检查鼠标左键和VK_CTRL的状态,如果同时按下,再计算它的准确位置,最后再xxx
    4 子类化:一种是你说的直接派生个类,还有一种是用SetWindowLong替换它的窗口过程,然后自己来处理鼠标消息。
      

  6.   

    Ctrl+MouseDown的问题已经解决了,代码如下。谢谢muroachanf(阿远之秋去)给出的方法,虽然我一个也没有用,呵呵。顺便再问一下
    如何获得Microsoft Froms 2.0 Label中鼠标点击位置的坐标?通过OnMouseDownLabelDrawscope(short Button, short Shift, float X, float Y)中返回的X,Y值不对。X总是为零,Y是一个很大的数例如:107984076void CSonarPage::OnMouseDownLabelDrawscope(short Button, short Shift, float X, float Y) 
    {
    if(Shift==2 && Button==1)
    {
    CString StrMessage;
    StrMessage.Format("当前位置为:%d-%d",X,Y);
    MessageBox(StrMessage,"信息提示",MB_OK);
    }
    }