我用的是一个专门的获取RGB值的软件,桌面什么的也能获取。具体怎么弄就不清楚了

解决方案 »

  1.   

    是在非模态对话框中获取主窗口的句柄,调用主窗口的WM_ONMOUSEMOVE消息吗??
      

  2.   

     说反了是在主窗口WM_ONMOUSEMOVE 消息函数中发消息给非模态对话框或者调用非模态对话框的函数
      

  3.   


    首先你回答别人的问题的时候 点一下右下角的引用,这样别人就知道你回复了
    其次你再哪获取的灰度就在那个地方发消息给非模态对话框或者调用非模态对话框的函数
    要是还是不懂就直接贴代码这是我主窗口的WM_ONMOUSEMOVEvoid CtestView::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值 CView::OnMouseMove(nFlags, point);

    }你好,请问调用非模态对话框的哪个函数我的非模态对话框的CPP#include "stdafx.h"
    #include "test.h"
    #include "Show.h"
    #include "afxdialogex.h"
    //#include"testView.h"
    // CShow 对话框IMPLEMENT_DYNAMIC(CShow, CDialog)CShow::CShow(CWnd* pParent /*=NULL*/)
    : CDialog(CShow::IDD, pParent)
    , gray(gray)
    , x(x)
    , y(y)

    {  
    POINT  pt;   
        GetCursorPos(&pt);
         
    int x1=0,y1=0;
    x1=pt.x;
    y1=pt.y;
    x=x1-33;
    y=y1-100;

    cimage.Load(name);
    gray=cimage.GetPixelGray(x,y);

    }CShow::~CShow()
    {
    }void CShow::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_EDIT1, gray);
    DDX_Text(pDX, IDC_EDIT2, x);
    DDX_Text(pDX, IDC_EDIT3, y);
    DDV_MinMaxInt(pDX, x, -10000, 10000);
    DDV_MinMaxInt(pDX, y, -10000, 10000);
    DDV_MinMaxByte(pDX, gray, 0, 255);
    }
    BEGIN_MESSAGE_MAP(CShow, CDialog)
    ON_EN_CHANGE(IDC_EDIT1, &CShow::OnEnChangeEdit1)
    ON_WM_MOUSEMOVE()
    ON_WM_NCMOUSEMOVE()
    ON_WM_LBUTTONDOWN()
    ON_WM_RBUTTONDOWN()
    ON_EN_CHANGE(IDC_EDIT2, &CShow::OnEnChangeEdit2)
    ON_EN_CHANGE(IDC_EDIT3, &CShow::OnEnChangeEdit3)
    END_MESSAGE_MAP()
    // CShow 消息处理程序
    void CShow::OnEnChangeEdit1()
    {
    // TODO:  如果该控件是 RICHEDIT 控件,它将不
    // 发送此通知,除非重写 CDialog::OnInitDialog()
    // 函数并调用 CRichEditCtrl().SetEventMask(),
    // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO:  在此添加控件通知处理程序代码}
    void CShow::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
     
          SetCapture(); 
       UpdateData();
    POINT  pt;   
               GetCursorPos(&pt);
         
           int x1=0,y1=0;
    x1=pt.x;
    y1=pt.y;
    x=x1-4;
    y=y1-94;
            
    cimage.Load(name);
    gray=cimage.GetPixelGray(x,y);
         
    if(x<0||x>1355||y<0||y>509)
    {
       ReleaseCapture();
       x=0;
       y=0;
       gray=0;
    }
            UpdateData(FALSE);
    CDialog::OnMouseMove(nFlags, point);
    }
    void CShow::OnNcMouseMove(UINT nHitTest, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值 CDialog::OnNcMouseMove(nHitTest, point);}
    void CShow::OnLButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值  ReleaseCapture(); CDialog::OnLButtonDown(nFlags, point);
    }
    void CShow::OnRButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值  ReleaseCapture(); CDialog::OnRButtonDown(nFlags, point);
    }
    void CShow::OnEnChangeEdit2()
    {
    // TODO:  如果该控件是 RICHEDIT 控件,它将不
    // 发送此通知,除非重写 CDialog::OnInitDialog()
    // 函数并调用 CRichEditCtrl().SetEventMask(),
    // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO:  在此添加控件通知处理程序代码
    }
    void CShow::OnEnChangeEdit3()
    {
    // TODO:  如果该控件是 RICHEDIT 控件,它将不
    // 发送此通知,除非重写 CDialog::OnInitDialog()
    // 函数并调用 CRichEditCtrl().SetEventMask(),
    // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO:  在此添加控件通知处理程序代码
    }
      

  4.   


    首先你回答别人的问题的时候 点一下右下角的引用,这样别人就知道你回复了
    其次你再哪获取的灰度就在那个地方发消息给非模态对话框或者调用非模态对话框的函数
    要是还是不懂就直接贴代码
    void CtestView::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
           BYTE gray1;
    POINT  pt;   
               GetCursorPos(&pt);
         
           int x1=0,y1=0;
    x1=pt.x-4;
    y1=pt.y-94;
            
    cimage.Load(name);
    gray1=cimage.GetPixelGray(x,y);
    x=x1;
    y=y1;
    gray=gray1;
            CShow  dlg1;
            dlg1.relax();
    CView::OnMouseMove(nFlags, point);

    }void CShow::relax(void)
    {
    UpdateData();
    x;y;gray;
    UpdateData(FALSE);
    }
    但是会出现错误
      

  5.   


    首先你回答别人的问题的时候 点一下右下角的引用,这样别人就知道你回复了
    其次你再哪获取的灰度就在那个地方发消息给非模态对话框或者调用非模态对话框的函数
    要是还是不懂就直接贴代码这是我主窗口的WM_ONMOUSEMOVEvoid CtestView::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值 CView::OnMouseMove(nFlags, point);

    }你好,请问调用非模态对话框的哪个函数我的非模态对话框的CPP#include "stdafx.h"
    #include "test.h"
    #include "Show.h"
    #include "afxdialogex.h"
    //#include"testView.h"
    // CShow 对话框IMPLEMENT_DYNAMIC(CShow, CDialog)CShow::CShow(CWnd* pParent /*=NULL*/)
    : CDialog(CShow::IDD, pParent)
    , gray(gray)
    , x(x)
    , y(y)

    {  
    POINT  pt;   
        GetCursorPos(&pt);
         
    int x1=0,y1=0;
    x1=pt.x;
    y1=pt.y;
    x=x1-33;
    y=y1-100;

    cimage.Load(name);
    gray=cimage.GetPixelGray(x,y);

    }CShow::~CShow()
    {
    }void CShow::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_EDIT1, gray);
    DDX_Text(pDX, IDC_EDIT2, x);
    DDX_Text(pDX, IDC_EDIT3, y);
    DDV_MinMaxInt(pDX, x, -10000, 10000);
    DDV_MinMaxInt(pDX, y, -10000, 10000);
    DDV_MinMaxByte(pDX, gray, 0, 255);
    }
    BEGIN_MESSAGE_MAP(CShow, CDialog)
    ON_EN_CHANGE(IDC_EDIT1, &CShow::OnEnChangeEdit1)
    ON_WM_MOUSEMOVE()
    ON_WM_NCMOUSEMOVE()
    ON_WM_LBUTTONDOWN()
    ON_WM_RBUTTONDOWN()
    ON_EN_CHANGE(IDC_EDIT2, &CShow::OnEnChangeEdit2)
    ON_EN_CHANGE(IDC_EDIT3, &CShow::OnEnChangeEdit3)
    END_MESSAGE_MAP()
    // CShow 消息处理程序
    void CShow::OnEnChangeEdit1()
    {
    // TODO:  如果该控件是 RICHEDIT 控件,它将不
    // 发送此通知,除非重写 CDialog::OnInitDialog()
    // 函数并调用 CRichEditCtrl().SetEventMask(),
    // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO:  在此添加控件通知处理程序代码}
    void CShow::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
     
          SetCapture(); 
       UpdateData();
    POINT  pt;   
               GetCursorPos(&pt);
         
           int x1=0,y1=0;
    x1=pt.x;
    y1=pt.y;
    x=x1-4;
    y=y1-94;
            
    cimage.Load(name);
    gray=cimage.GetPixelGray(x,y);
         
    if(x<0||x>1355||y<0||y>509)
    {
       ReleaseCapture();
       x=0;
       y=0;
       gray=0;
    }
            UpdateData(FALSE);
    CDialog::OnMouseMove(nFlags, point);
    }
    void CShow::OnNcMouseMove(UINT nHitTest, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值 CDialog::OnNcMouseMove(nHitTest, point);}
    void CShow::OnLButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值  ReleaseCapture(); CDialog::OnLButtonDown(nFlags, point);
    }
    void CShow::OnRButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值  ReleaseCapture(); CDialog::OnRButtonDown(nFlags, point);
    }
    void CShow::OnEnChangeEdit2()
    {
    // TODO:  如果该控件是 RICHEDIT 控件,它将不
    // 发送此通知,除非重写 CDialog::OnInitDialog()
    // 函数并调用 CRichEditCtrl().SetEventMask(),
    // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO:  在此添加控件通知处理程序代码
    }
    void CShow::OnEnChangeEdit3()
    {
    // TODO:  如果该控件是 RICHEDIT 控件,它将不
    // 发送此通知,除非重写 CDialog::OnInitDialog()
    // 函数并调用 CRichEditCtrl().SetEventMask(),
    // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO:  在此添加控件通知处理程序代码
    }

    请问一下,打开非模态对话框是激活非模态对话框的界面,如果鼠标移动到非模态对话框才有效果,移动到主窗口就会没有效果,因为主窗口的界面是灰色的啊,非模态对话框才是活动窗口。你写的代码让我无从下手给你讲一下实现过程吧
    你是说你的点击右键会出现一排是对话框还是菜单?
    如果是菜单就添加菜单消息
    定义类成员变量 CPoint m_Point; CShow* m_pShow;m_Point.x = -1; 
    m_pShow = NULL;void CtestView::OnMouseMove(UINT nFlags, CPoint point)
    {
    m_Point = point;
    CView::OnMouseMove(nFlags, point);
    }
    然后在再次点击菜单显示灰度的时候
    if(m_pShow==NULL)
    {
    m_pShow = new CShow(this);
    m_pShow.Create(ID,this);
    }
    m_pShow.ShowWindow(SW_SHOW);(如果需要隐藏非模态对话框时调用);
    //在这里用m_Point计算灰度值
    m_pShow.SetCapture(灰度,坐标);//这里可以调用函数也可以发消息最后在CShow 添加公共成员函数SetCapture(灰度,坐标);
    CShow::SetCapture(灰度,坐标)
    {
       灰度编辑框关联变量 = 灰度
      x 编辑框变量 = 坐标.x;
     y 编辑框变量 = 坐标.y;
    UpdateData(FALSE);
    }
      

  6.   


    首先你回答别人的问题的时候 点一下右下角的引用,这样别人就知道你回复了
    其次你再哪获取的灰度就在那个地方发消息给非模态对话框或者调用非模态对话框的函数
    要是还是不懂就直接贴代码void CtestView::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
           BYTE gray1;
    POINT  pt;   
               GetCursorPos(&pt);
         
           int x1=0,y1=0;
    x1=pt.x-4;
    y1=pt.y-94;
            
    cimage.Load(name);
    gray1=cimage.GetPixelGray(x,y);
    x=x1;
    y=y1;
    gray=gray1;
            CShow  dlg1;
            dlg1.relax();
    CView::OnMouseMove(nFlags, point);

    }void CShow::relax(void)
    {
    UpdateData();
    x;y;gray;
    UpdateData(FALSE);
    }
    但是会出现错误

    我按照你说的,最后有个错误,你说说是怎么回事应该是调用SetCapture(灰度,坐标)时,出现的错误!!
      

  7.   


    首先你回答别人的问题的时候 点一下右下角的引用,这样别人就知道你回复了
    其次你再哪获取的灰度就在那个地方发消息给非模态对话框或者调用非模态对话框的函数
    要是还是不懂就直接贴代码void CtestView::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
           BYTE gray1;
    POINT  pt;   
               GetCursorPos(&pt);
         
           int x1=0,y1=0;
    x1=pt.x-4;
    y1=pt.y-94;
            
    cimage.Load(name);
    gray1=cimage.GetPixelGray(x,y);
    x=x1;
    y=y1;
    gray=gray1;
            CShow  dlg1;
            dlg1.relax();
    CView::OnMouseMove(nFlags, point);

    }void CShow::relax(void)
    {
    UpdateData();
    x;y;gray;
    UpdateData(FALSE);
    }
    但是会出现错误

    我按照你说的,最后有个错误,你说说是怎么回事应该是调用SetCapture(灰度,坐标)时,出现的错误!!
    CShow  dlg
      dlg1.relax();这个地方有错
    你再好好看看我写的
      

  8.   


    首先你回答别人的问题的时候 点一下右下角的引用,这样别人就知道你回复了
    其次你再哪获取的灰度就在那个地方发消息给非模态对话框或者调用非模态对话框的函数
    要是还是不懂就直接贴代码void CtestView::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
           BYTE gray1;
    POINT  pt;   
               GetCursorPos(&pt);
         
           int x1=0,y1=0;
    x1=pt.x-4;
    y1=pt.y-94;
            
    cimage.Load(name);
    gray1=cimage.GetPixelGray(x,y);
    x=x1;
    y=y1;
    gray=gray1;
            CShow  dlg1;
            dlg1.relax();
    CView::OnMouseMove(nFlags, point);

    }void CShow::relax(void)
    {
    UpdateData();
    x;y;gray;
    UpdateData(FALSE);
    }
    但是会出现错误

    我按照你说的,最后有个错误,你说说是怎么回事应该是调用SetCapture(灰度,坐标)时,出现的错误!!
    CShow  dlg
      dlg1.relax();这个地方有错
    你再好好看看我写的我看了你的了,也按照你说的那样做了,就是调用CShow的一个函数,我发现是UpdateData(FALSE);出现上面的错误,不知道是怎么回事??我qq:2890741043,你可以加一下我,我把代码发给你啊!!
      

  9.   


    首先你回答别人的问题的时候 点一下右下角的引用,这样别人就知道你回复了
    其次你再哪获取的灰度就在那个地方发消息给非模态对话框或者调用非模态对话框的函数
    要是还是不懂就直接贴代码这是我主窗口的WM_ONMOUSEMOVEvoid CtestView::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值 CView::OnMouseMove(nFlags, point);

    }你好,请问调用非模态对话框的哪个函数我的非模态对话框的CPP#include "stdafx.h"
    #include "test.h"
    #include "Show.h"
    #include "afxdialogex.h"
    //#include"testView.h"
    // CShow 对话框IMPLEMENT_DYNAMIC(CShow, CDialog)CShow::CShow(CWnd* pParent /*=NULL*/)
    : CDialog(CShow::IDD, pParent)
    , gray(gray)
    , x(x)
    , y(y)

    {  
    POINT  pt;   
        GetCursorPos(&pt);
         
    int x1=0,y1=0;
    x1=pt.x;
    y1=pt.y;
    x=x1-33;
    y=y1-100;

    cimage.Load(name);
    gray=cimage.GetPixelGray(x,y);

    }CShow::~CShow()
    {
    }void CShow::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_EDIT1, gray);
    DDX_Text(pDX, IDC_EDIT2, x);
    DDX_Text(pDX, IDC_EDIT3, y);
    DDV_MinMaxInt(pDX, x, -10000, 10000);
    DDV_MinMaxInt(pDX, y, -10000, 10000);
    DDV_MinMaxByte(pDX, gray, 0, 255);
    }
    BEGIN_MESSAGE_MAP(CShow, CDialog)
    ON_EN_CHANGE(IDC_EDIT1, &CShow::OnEnChangeEdit1)
    ON_WM_MOUSEMOVE()
    ON_WM_NCMOUSEMOVE()
    ON_WM_LBUTTONDOWN()
    ON_WM_RBUTTONDOWN()
    ON_EN_CHANGE(IDC_EDIT2, &CShow::OnEnChangeEdit2)
    ON_EN_CHANGE(IDC_EDIT3, &CShow::OnEnChangeEdit3)
    END_MESSAGE_MAP()
    // CShow 消息处理程序
    void CShow::OnEnChangeEdit1()
    {
    // TODO:  如果该控件是 RICHEDIT 控件,它将不
    // 发送此通知,除非重写 CDialog::OnInitDialog()
    // 函数并调用 CRichEditCtrl().SetEventMask(),
    // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO:  在此添加控件通知处理程序代码}
    void CShow::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
     
          SetCapture(); 
       UpdateData();
    POINT  pt;   
               GetCursorPos(&pt);
         
           int x1=0,y1=0;
    x1=pt.x;
    y1=pt.y;
    x=x1-4;
    y=y1-94;
            
    cimage.Load(name);
    gray=cimage.GetPixelGray(x,y);
         
    if(x<0||x>1355||y<0||y>509)
    {
       ReleaseCapture();
       x=0;
       y=0;
       gray=0;
    }
            UpdateData(FALSE);
    CDialog::OnMouseMove(nFlags, point);
    }
    void CShow::OnNcMouseMove(UINT nHitTest, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值 CDialog::OnNcMouseMove(nHitTest, point);}
    void CShow::OnLButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值  ReleaseCapture(); CDialog::OnLButtonDown(nFlags, point);
    }
    void CShow::OnRButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值  ReleaseCapture(); CDialog::OnRButtonDown(nFlags, point);
    }
    void CShow::OnEnChangeEdit2()
    {
    // TODO:  如果该控件是 RICHEDIT 控件,它将不
    // 发送此通知,除非重写 CDialog::OnInitDialog()
    // 函数并调用 CRichEditCtrl().SetEventMask(),
    // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO:  在此添加控件通知处理程序代码
    }
    void CShow::OnEnChangeEdit3()
    {
    // TODO:  如果该控件是 RICHEDIT 控件,它将不
    // 发送此通知,除非重写 CDialog::OnInitDialog()
    // 函数并调用 CRichEditCtrl().SetEventMask(),
    // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO:  在此添加控件通知处理程序代码
    }

    请问一下,打开非模态对话框是激活非模态对话框的界面,如果鼠标移动到非模态对话框才有效果,移动到主窗口就会没有效果,因为主窗口的界面是灰色的啊,非模态对话框才是活动窗口。你写的代码让我无从下手给你讲一下实现过程吧
    你是说你的点击右键会出现一排是对话框还是菜单?
    如果是菜单就添加菜单消息
    定义类成员变量 CPoint m_Point; CShow* m_pShow;m_Point.x = -1; 
    m_pShow = NULL;void CtestView::OnMouseMove(UINT nFlags, CPoint point)
    {
    m_Point = point;
    CView::OnMouseMove(nFlags, point);
    }
    然后在再次点击菜单显示灰度的时候
    if(m_pShow==NULL)
    {
    m_pShow = new CShow(this);
    m_pShow.Create(ID,this);
    }
    m_pShow.ShowWindow(SW_SHOW);(如果需要隐藏非模态对话框时调用);
    //在这里用m_Point计算灰度值
    m_pShow.SetCapture(灰度,坐标);//这里可以调用函数也可以发消息最后在CShow 添加公共成员函数SetCapture(灰度,坐标);
    CShow::SetCapture(灰度,坐标)
    {
       灰度编辑框关联变量 = 灰度
      x 编辑框变量 = 坐标.x;
     y 编辑框变量 = 坐标.y;
    UpdateData(FALSE);
    }

    再问一个问题啊,你给我上面的代码,是点击菜单灰度时,它才会更新,鼠标移动时,不能更新!!
      

  10.   

    不要那个非模态对话框(它覆盖部分窗口了), 放 状态条上显示,  (getpixel)
      

  11.   


    首先你回答别人的问题的时候 点一下右下角的引用,这样别人就知道你回复了
    其次你再哪获取的灰度就在那个地方发消息给非模态对话框或者调用非模态对话框的函数
    要是还是不懂就直接贴代码这是我主窗口的WM_ONMOUSEMOVEvoid CtestView::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值 CView::OnMouseMove(nFlags, point);

    }你好,请问调用非模态对话框的哪个函数我的非模态对话框的CPP#include "stdafx.h"
    #include "test.h"
    #include "Show.h"
    #include "afxdialogex.h"
    //#include"testView.h"
    // CShow 对话框IMPLEMENT_DYNAMIC(CShow, CDialog)CShow::CShow(CWnd* pParent /*=NULL*/)
    : CDialog(CShow::IDD, pParent)
    , gray(gray)
    , x(x)
    , y(y)

    {  
    POINT  pt;   
        GetCursorPos(&pt);
         
    int x1=0,y1=0;
    x1=pt.x;
    y1=pt.y;
    x=x1-33;
    y=y1-100;

    cimage.Load(name);
    gray=cimage.GetPixelGray(x,y);

    }CShow::~CShow()
    {
    }void CShow::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_EDIT1, gray);
    DDX_Text(pDX, IDC_EDIT2, x);
    DDX_Text(pDX, IDC_EDIT3, y);
    DDV_MinMaxInt(pDX, x, -10000, 10000);
    DDV_MinMaxInt(pDX, y, -10000, 10000);
    DDV_MinMaxByte(pDX, gray, 0, 255);
    }
    BEGIN_MESSAGE_MAP(CShow, CDialog)
    ON_EN_CHANGE(IDC_EDIT1, &CShow::OnEnChangeEdit1)
    ON_WM_MOUSEMOVE()
    ON_WM_NCMOUSEMOVE()
    ON_WM_LBUTTONDOWN()
    ON_WM_RBUTTONDOWN()
    ON_EN_CHANGE(IDC_EDIT2, &CShow::OnEnChangeEdit2)
    ON_EN_CHANGE(IDC_EDIT3, &CShow::OnEnChangeEdit3)
    END_MESSAGE_MAP()
    // CShow 消息处理程序
    void CShow::OnEnChangeEdit1()
    {
    // TODO:  如果该控件是 RICHEDIT 控件,它将不
    // 发送此通知,除非重写 CDialog::OnInitDialog()
    // 函数并调用 CRichEditCtrl().SetEventMask(),
    // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO:  在此添加控件通知处理程序代码}
    void CShow::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
     
          SetCapture(); 
       UpdateData();
    POINT  pt;   
               GetCursorPos(&pt);
         
           int x1=0,y1=0;
    x1=pt.x;
    y1=pt.y;
    x=x1-4;
    y=y1-94;
            
    cimage.Load(name);
    gray=cimage.GetPixelGray(x,y);
         
    if(x<0||x>1355||y<0||y>509)
    {
       ReleaseCapture();
       x=0;
       y=0;
       gray=0;
    }
            UpdateData(FALSE);
    CDialog::OnMouseMove(nFlags, point);
    }
    void CShow::OnNcMouseMove(UINT nHitTest, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值 CDialog::OnNcMouseMove(nHitTest, point);}
    void CShow::OnLButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值  ReleaseCapture(); CDialog::OnLButtonDown(nFlags, point);
    }
    void CShow::OnRButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值  ReleaseCapture(); CDialog::OnRButtonDown(nFlags, point);
    }
    void CShow::OnEnChangeEdit2()
    {
    // TODO:  如果该控件是 RICHEDIT 控件,它将不
    // 发送此通知,除非重写 CDialog::OnInitDialog()
    // 函数并调用 CRichEditCtrl().SetEventMask(),
    // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO:  在此添加控件通知处理程序代码
    }
    void CShow::OnEnChangeEdit3()
    {
    // TODO:  如果该控件是 RICHEDIT 控件,它将不
    // 发送此通知,除非重写 CDialog::OnInitDialog()
    // 函数并调用 CRichEditCtrl().SetEventMask(),
    // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO:  在此添加控件通知处理程序代码
    }

    请问一下,打开非模态对话框是激活非模态对话框的界面,如果鼠标移动到非模态对话框才有效果,移动到主窗口就会没有效果,因为主窗口的界面是灰色的啊,非模态对话框才是活动窗口。你写的代码让我无从下手给你讲一下实现过程吧
    你是说你的点击右键会出现一排是对话框还是菜单?
    如果是菜单就添加菜单消息
    定义类成员变量 CPoint m_Point; CShow* m_pShow;m_Point.x = -1; 
    m_pShow = NULL;void CtestView::OnMouseMove(UINT nFlags, CPoint point)
    {
    m_Point = point;
    CView::OnMouseMove(nFlags, point);
    }
    然后在再次点击菜单显示灰度的时候
    if(m_pShow==NULL)
    {
    m_pShow = new CShow(this);
    m_pShow.Create(ID,this);
    }
    m_pShow.ShowWindow(SW_SHOW);(如果需要隐藏非模态对话框时调用);
    //在这里用m_Point计算灰度值
    m_pShow.SetCapture(灰度,坐标);//这里可以调用函数也可以发消息最后在CShow 添加公共成员函数SetCapture(灰度,坐标);
    CShow::SetCapture(灰度,坐标)
    {
       灰度编辑框关联变量 = 灰度
      x 编辑框变量 = 坐标.x;
     y 编辑框变量 = 坐标.y;
    UpdateData(FALSE);
    }

    再问一个问题啊,你给我上面的代码,是点击菜单灰度时,它才会更新,鼠标移动时,不能更新!!
    我说的意思就像是PS里头一样,点击灰度时可以显示其灰度,然后鼠标开始移动,移动到哪个地方就时时显示哪个地方的灰度,而不需要再次点击灰度这个按钮
      

  12.   

    void CPictureView::OnMouseMove(UINT nFlags, CPoint point) 
    {
    CClientDC dc(this);
    COLORREF color=dc.GetPixel(point);
    BYTE red=GetRValue(color);
    BYTE green=GetGValue(color);
    BYTE blue=GetBValue(color);
    afxDump << red << ";" << green << ";" << blue << "\n";
    }SDI就显示在状态条,对话框在底部加个文本框.