回 帖 发 新 帖 刷新版面

主题:notify消息的拦截?!有回必加分!

一个基于对话框的程序,里面有一个listctrl。
本来要点击listctrl中的某一项时会弹出一个messagebox,但现在运行异常:每单击一下列表项,都弹出好几个的messagebox。
具体代码如下:
                              ………………
                              ………………
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
    hInst = hInstance; // Store instance handle in our global variable

    HWND hDlg=NULL;

    PROPSHEETPAGE psp[2];//两页
    PROPSHEETHEADER psh;
       ……
    psp[0].pszTemplate = MAKEINTRESOURCE(IDD_PDLG);
       ……
    PropertySheet((LPCPROPSHEETHEADER)&psh);//生成属性页

    return TRUE;
}

LRESULT CALLBACK PDLG(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
  int wmId, wmEvent;
  BOOL b=TRUE;
//-----------------获得对话框控件的句柄
  hPlist=GetDlgItem(hDlg,IDC_PLIST);
  hPinfo=GetDlgItem(hDlg,IDC_INFO);
  hPminfo=GetDlgItem(hDlg,IDC_MINFO);
  switch (message)
   {
    case WM_COMMAND:
    wmId    = LOWORD(wParam);
    wmEvent = HIWORD(wParam);
    switch (wmId)
     {
      case IDCANCEL:
      PostQuitMessage(0);
      return TRUE;
      }
     break;
     case WM_NOTIFY :
     OnNotify(message,wParam,lParam,b);
     break;
     return TRUE;
    }
    return FALSE;
   }

LRESULT OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {


        NMHDR* pNMHDR = (NMHDR*)lParam;

        // don't handle messages not from the page/sheet itself
        if(pNMHDR->hwndFrom != hPlist && pNMHDR->hwndFrom != ::GetParent(hPlist))
        {
            bHandled = FALSE;
            return 1;
        }


        LRESULT lResult = 0;
        switch(pNMHDR->code)
        {
        case LVN_ITEMCHANGED:
            MessageBox(NULL,"a","a",1);
            break;
        default:
            bHandled = FALSE;   // not handled
        }

        return lResult;
    }

回复列表 (共2个回复)

沙发

if(pNMHDR->hwndFrom != hPlist)
{
   bHandled = FALSE;
   return 1;
}

板凳

谢谢你啦。[em4]不过还是不行哦。[em10]
等下你上q,我发代码给你看看。

我来回复

您尚未登录,请登录后再回复。点此登录或注册