在MFC ClassWizard中,picture控件响应的事件只有BN_CLICKED,
怎么让picture控件能响应鼠标按下和弹起的LBUTTONDOWN和LBUTTONUP事件呢?
试过新建一个类继承自CStatic,类名为CNewStatic,然后picture控件的变量
设置为CNewStatic的对象,但这个picture的鼠标按下和弹起事件就要
到CNewStatic类去处理了,而通常这两个事件发生时要进行的动作是要对
picture控件所属对话框的其他成员进行处理,(例如鼠标在picture按下时让
对话框的EDIT控件显示"down",弹起时显示"up"),难道还要把对话框的指针传入CNewStatic中吗?有没有直接在对话框类中响应picture的鼠标按下和弹起(就如BN_CLICKED那样的)的方法?

解决方案 »

  1.   

    可以在CNewStatic中的down中向父窗口发送消息...
      

  2.   

    你可以在鼠标按下和弹起消息中处理;看一看鼠标使不是在picture的rect内。
    如果在的话你就可以自己设置一个处理函数来处理。
    就如你说的问题:
    在鼠标按下时在edit控件中显示"down",弹起时显示"up"。
    GetWindowRect(GetDlgItem(IDC_PICTURE),&rect);
    GetCursorPos(&point);
    bJudge=PtInRect(point,rect);//这个可能是错误的。就是看point在不在rect中。呵呵。
    if(bJudge)
    {
        GetDlgItem(IDC_EDIT)->SetWindowText("Down");
    }
      

  3.   

    你所说的新建一个类的方法,我感觉也是可以的就是让picture的鼠标按下和弹起事件到CNewStatic类去处理CNewStatic picStatic;
    picStatic.SubclassDlgItem(IDC_PICTURE,this);
      

  4.   

    就是子类化的方法,或者用USTCTony(Tony) ( ) 的方法也挺好的,不过觉得封装性不好:-)
      

  5.   

    不要用Picture的消息,如果你是基于Dialog的用Dialog的
    void CYourDlg::OnLButtonDown(UINT nFlags, CPoint point)
    {
         CWnd* pW =this->ChildWindowFromPoint(point);

    switch(::GetDlgCtrlID(pW->m_hWnd))
      {
      case IDC_PICTURE:
                        //add your code here
                        }
    }
    别忘了去掉picture的Notify