这个消息只是在鼠标左键单击控件的时候触发是吗?如果是控件双击或者右键的消息怎么触发呢?是所有的控件统一都会触发的,不是单独给某个控件,有这样的消息吗?我想在一个函数里统一处理所有的控件的各个消息,可能吗?MFC控件消息

解决方案 »

  1.   

    MFC都封装好了的,是面向对象的,即是对感兴趣的消息处理就行,你所说的在SDK编程的情况下调用过程函数,然后对应用程序的消息队列中的消息进行分类处理,不过MFC下有个WindowProc这个可以重写的消息函数,建议看下windows程序设计,了解其内部工作原理
      

  2.   

    是所有的控件统一都会触发的,不是单独给某个控件。好像重写PreTranslateMessage(MSG* pMsg)函数,在这里进行处理在一个函数里统一处理所有的控件的各个消息,那么这个函数会很大,不利于管理
      

  3.   

    OnCommand或者OnNotify中处理,OnNotify比OnCommand中携带更多的信息
      

  4.   

    BOOL Cproduct1Dlg::OnCommand(WPARAM wParam, LPARAM lParam)
    {
    //AfxMessageBox(_T("hello"));
    //  UINT nID = LOWORD(wParam);  
    //  HWND hWndCtrl = (HWND)lParam;  
    //  int nCode = HIWORD(wParam);
    // 
    //  if(nID >= 1000 && nID < 2000)
    //  {
    //  AfxMessageBox(_T("按钮"));
    //  switch(lParam)
    //  {
    //  case WM_LBUTTONDBLCLK:
    //  AfxMessageBox(_T("左键double"));
    //  break;
    //  case WM_LBUTTONUP:
    //  AfxMessageBox(_T("左键up"));
    //  break;
    //  case WM_LBUTTONDOWN:
    //  AfxMessageBox(_T("单击按钮"));
    //  break;
    //  case WM_RBUTTONUP:
    //  AfxMessageBox(_T("右键up"));
    //  break;
    //  default:
    //  break;
    //  }
    //  }

    return CDialog::OnCommand(wParam, lParam);  
    }
    void Cproduct1Dlg::OnLButtonDblClk(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    int n = nFlags;
    CDialog::OnLButtonDblClk(nFlags, point);
    }BOOL Cproduct1Dlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
    {
    // TODO: 在此添加专用代码和/或调用基类
    UINT nID = LOWORD(wParam);  
    HWND hWndCtrl = (HWND)lParam;  
    int nCode = HIWORD(wParam); if(nID >= 1000 && nID < 2000)
    {
     //AfxMessageBox(_T("按钮"));
    switch(lParam)
    {
    case WM_LBUTTONDBLCLK:
    AfxMessageBox(_T("左键double"));
    break;
    case WM_LBUTTONUP:
    AfxMessageBox(_T("左键up"));
    break;
    case WM_LBUTTONDOWN:
    AfxMessageBox(_T("单击按钮"));
    break;
    case WM_RBUTTONUP:
    AfxMessageBox(_T("右键up"));
    break;
    default:
    break;
    }
    }
    return CDialog::OnNotify(wParam, lParam, pResult);
    }我重载这两个函数,都收不到鼠标的消息啊?这样写有什么问题啊?