如题!

解决方案 »

  1.   

    重写CStatic类,勾上Notify,添加处理WM_MOUSEMOVE消息
      

  2.   

    我把问题再具体点吧,请问如何找到CStatic类,找打了写什么?然后是不是勾上picture控件的Notify?
      

  3.   

    还有一个问题一直困扰小弟就是:控件和Dlg类是什么关系?现在就只知道要把事件函数写在Dlg类里面,不知道为什么这样写,控件是不是也是个类?
      

  4.   

    都属于窗口类,dlg一般是控件的父窗口,控件则是它的孩子,它们一般是父子关系。
    picture控件关联一个控件变量,如m_picBOOL yourdlg::PreTranslateMessage(MSG* pMsg) 
    {
      if (pMsg->hwnd == m_pic.m_hWnd && pMsg->message == WM_MOUSEMOVE)
      {
        //添加你自己的代码
        return TRUE;
      }
      return CDialog::PreTranslateMessage(pMsg);
    }
      

  5.   

    主对话框响应WM_MOUSEOVER消息void CQjEnglishDlg::OnMouseMove(UINT nFlags, CPoint point){
        CRect rectPic;   //图片位置
         GetDlgItem(IDC_PIC1)->GetWindowRect(&rectPic);
        if(PtInRect(&rectPic,point)){
            //鼠标在图片框内
        }
    }
      

  6.   

    我也同意三楼的说法,具体的可在CODEPROJECT中看一下关于自定义控件的代码。
      

  7.   

    不行啊,首先得到的rectPic有偏差,大概1/3,其次,当鼠标移动到picture控件里面的时候就没反应了,意思是point没有检测到
      

  8.   

    现在小弟遇到的主要问题是:在Dly里设置了OnMouseMove函数之后,在OnMouseMove函数里写了找到picture空间位置的代码,然后判断鼠标是不是在这个区域内,如果是则在一个edit控件显示坐标,但是问题出现了,在规定的响应区域内,只要有picture它就不响应,只要是空白的它就响应
      

  9.   

    BOOL yourdlg::PreTranslateMessage(MSG* pMsg)  
    {
      if (pMsg->hwnd == m_pic.m_hWnd && pMsg->message == WM_MOUSEMOVE)
      {
        //添加你自己的代码
        return TRUE;
      }
      return CDialog::PreTranslateMessage(pMsg);
    }在添加代码处,添加你自己的代码,应该没问题呀...
      

  10.   

    在查看->建立类向导->成员变量里,点击你的控件,然后...,如果你不会关联控件变量,这样也行:
    BOOL yourdlg::PreTranslateMessage(MSG* pMsg)  
    {
      if (pMsg->hwnd == ::GetDlgItem(m_hWnd, ID_YOURPIC) && pMsg->message == WM_MOUSEMOVE)
      {
        //添加你自己的代码
        return TRUE;
      }
      return CDialog::PreTranslateMessage(pMsg);
    }ID_YOURPIC是你的控件ID
      

  11.   


    这种方法是可以的,取图片的位置有错误,应该为:
    CRect rectPic;   //图片位置
    GetDlgItem(IDC_PIC1)->GetWindowRect(&rectPic);
    ScreenToClient(&rectPic);
      

  12.   

    在查看->建立类向导->成员变量里,点击你的控件,然后...,如果你不会关联控件变量, 知道控件的ID也行(如IDC_PIC1):BOOL yourdlg::PreTranslateMessage(MSG* pMsg)   
    {
      if (pMsg->hwnd == ::GetDlgItem(m_hWnd, IDC_PIC1) && pMsg->message == WM_MOUSEMOVE)
      {
        //添加你自己的代码
         return TRUE;
      }
      return CDialog::PreTranslateMessage(pMsg);
    }这要用到PreTranslateMessage虚函数
    你总不至于不会往你的对话框里添加PreTranslateMessage虚函数吧?
      

  13.   

    谢谢各位的方法,小弟想了下,不用picture空间了,直接画在Dly上面,这样就成功了,问题解决了!