Ok, this drives me nuts...

I've got a listview where the user may select an item from. In response to the item selection, controls on the dialog are set to item-specific values. If an item was previously selected, the entered data will be validated and stored if it is valid. If the data is invalid, an error box is displayed and the original list-control selection is restored.

The LVN_ITEMCHANGING handler is just like this:
Code:
void CMyDlg::OnItemChangingLC(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView =reinterpret_cast<NM_LISTVIEW*>(pNMHDR);

	// Allow item change by default.
	*pResult = static_cast<LRESULT>(FALSE);

	// If an item loses focus.
	if ( ((pNMListView->uChanged&LVIF_STATE) == LVIF_STATE) &&
	     ((pNMListView->uOldState&LVIS_FOCUSED)==LVIS_FOCUSED) &&
	     ((pNMListView->uNewState&LVIS_FOCUSED)==0) )
	{
		AfxMessageBox(_T("NO NO NO!"));

		// Prevent the change.
		*pResult = static_cast<LRESULT>(TRUE);
	}
But what should I say: The damned Msgbox will be hit twice with the same **** parameters of pNMListView: The same iItem, the same uChanged, the same uOldState, the same uNewState.

Why?