SDI中我再非模态对话框上覆盖了一个picture控件,用来显示图像。我想通过点击左键获得到图像的灰度值。但有一个问题是只有对话框类或是视图类等里可以响应LBOTTONDOW,picture上又不能。虽然其上有bn_clicked但其又无法获得点的坐标。问题的症结就在这,恳请各位大侠不吝赐教,感激不尽。

解决方案 »

  1.   

    直接在对话框上获得LBUTTONDOWN,GetCurPos获得鼠标位置等,然后再来跟picture位置判断
      

  2.   

    可是因为picture在对话框之上,程序根本都不对对话框上的LBOTTONDOWN响应呀
      

  3.   

    控件加上SS_NOTIFY风格,可以从CStatic派生类来响应WM_LBUTTONDOWN消息,也可以重载对话框的PreTranslateMessage函数来响应。
      

  4.   

    我看了你之前给别人的回帖,关于picture控件方面的。我也照这样做了,加了notify或是重载ModifyStyle(0,SS_NOTIFY)可依然没有响应。且我在CPictureEx中也没找到IDC_STATIC1(pictureID)还望详细指教!不胜感激
      

  5.   

    首先要设置SS_NOTIFY风格,然后在CPictureEx中响应WM_LBUTTONDOWN消息。
      

  6.   

    其实你可以把图片直接画在对话框上面阿,那多直接,反正也能指定所画的区域,对话框是可以相应LBUTTONDOWN消息的阿
      

  7.   

    我是设置了SS_NOTIFY,用bn_clicked静态PICTURE可以响应,但令人沮丧的是LBOTTONDOWN依然响应不了。会不会是picture控件没有和CPictureEX类关联起来,但又不太像啊。等待指点
      

  8.   

    BOOL CYourDlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(pMsg->message == WM_LBUTTONDOWN&&GetDlgItem(IDC_PICTURE)->GetSafeHwnd() == pMsg->hwnd)
    {

    MessageBox(str);
    }
    return CDialog::PreTranslateMessage(pMsg);
    }
      

  9.   

    重载对话框的PreTranslateMessage函数,绝对好用
      

  10.   

    11楼的你说的太对了,我先在CPictureEx重载PreTranslate好像不行。还有一点问题,那么点的坐标如何获得?
      

  11.   

    10楼谢谢你!
    先选中noticfy
    添加一个CPictureEx类相关如下
    void CPictureEx::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    MessageBox("s");
    CStatic::OnLButtonDown(nFlags, point);
    }
    断点根本都运行不到这
    我不知有否遗漏了什么
      

  12.   

    晕,谁让你在CPictureEx中重载了,我一开始说的就是重载对话框的PreTranslateMessage函数。
    lParam参数的低16位是横坐标,高16位是纵坐标,都是相对于控件的客户区的。
      

  13.   

    晕,谁让你在CPictureEx中重载了,我一开始说的就是重载对话框的PreTranslateMessage函数。
    lParam参数的低16位是横坐标,高16位是纵坐标,都是相对于控件的客户区的。
      

  14.   

    嗯,你说的很对。但不知你说的添加从CStatic类派生出来的CPictureEx这种方法如何能行,我试了很多次,程序好像根本没有执行到这