В сообщении WM_NOTIFY
поле NMHDR::hwndFrom
сообщает вам точный элемент управления, отправляющий уведомление, в данном случае ie, который является точным элементом управления заголовка ListView. Вы можете получить HWND
элемента управления заголовка ListView с помощью ListView_GetHeader()
, а затем сравнить его с hwndFrom
уведомления, например:
switch (pnmhdr->code)
{
case HDN_FILTERCHANGE:
{
if (ListView_GetHeader(hwndListView1) == pnmhdr->hwndFrom)
{
// event happened in ListView1...
}
else if (ListView_GetHeader(hwndListView2) == pnmhdr->hwndFrom)
{
// event happened in ListView2...
}
break;
}
...
}
С другой стороны, поскольку элемент управления заголовка является Дочерний элемент ListView, чтобы даже получить уведомление HDN_FILTERCHANGE
для ListView, вы должны создать подкласс самого ListView, так как элемент управления заголовка будет отправлять свои уведомления в ListView, а не в ваше окно. Таким образом, HWND
, предоставленный вашей процедуре подкласса, будет идентификатором ListView, в который отправляются уведомления заголовка, например:
LRESULT CALLBACK MyListViewWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ...)
{
switch (uMsg)
{
case WM_NOTIFY:
{
NMHDR *pnmhdr = (NMHDR*) lParam;
switch (pnmhdr->code)
{
case HDN_FILTERCHANGE:
{
if (hwnd == hwndListView1)
{
// event happened in ListView1...
}
else if (hwnd == hwndListView2)
{
// event happened in ListView2...
}
break;
}
...
}
break;
}
...
}
}
В любом случае, как вы можете видеть, идентификаторы элементов управления не являются требуется. Вы не должны возиться с контрольными идентификаторами HWND
s, которые вам не принадлежат.