主题: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;
}
本来要点击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;
}