Как справиться с несколькими случаями WM_NOTIFY ?
У меня есть 2 элемента управления представлением списка, и мне нужно отправить VM_NOTIFY для обоих из них..
Программа компилируется и запускается, но я вижу некоторые проблемы, если переключаюсь между ними.
Один из них показывает правильно, а другой показывает только первый столбец, а второй показывает несколько слов, большинство строк пусты.
LRESULT NotifyHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { LV_DISPINFOW *pLvdi = (LV_DISPINFOW *)lParam; ABRINFO *pAbr = (ABRINFO *)(pLvdi->item.lParam); if (wParam != ID_LISTVIEW) return 0L; switch(pLvdi->hdr.code) { case LVN_GETDISPINFOW: switch (pLvdi->item.iSubItem) { case 0: pLvdi->item.pszText = pAbr->szSymbol; break; case 1: pLvdi->item.pszText = pAbr->szDescription; break; default: break; } break; default: break; } return 0L; }
Это уже второй случай:
LRESULT NotifyHandlerXP(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { LV_DISPINFOW *pLvdi = (LV_DISPINFOW *)lParam; XPINFO *pXP = (XPINFO *)(pLvdi->item.lParam); if(wParam != ID_LISTVIEW) return 0L; switch(pLvdi->hdr.code) { case LVN_GETDISPINFOW: switch(pLvdi->item.iSubItem) { case 0: pLvdi->item.pszText = pXP->szCharLevel; break; case 1: pLvdi->item.pszText = pXP->szXpNedded; break; case 2: pLvdi->item.pszText = pXP->szXpNeddedNextLvl; break; default: break; } default: break; } return 0L; }
Как обращаться в MainWndProc?
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { static HWND hWndListView; switch(msg) { case WM_NOTIFY: { return (NotifyHandler(hWnd, msg, wp, lp)); return (NotifyHandlerXP(hWnd, msg, wp, lp)); break; } default: return DefWindowProcW(hWnd, msg, wp, lp); } return 0; }
Что я уже пробовал:
Я только подумал, что, если заявление.. Я работаю над этим прямо сейчас.
HWND CreateListView(HWND hWndParent)
hWndListView = CreateListView(hWnd);
HWND CreateListViewXP(HWND hWndParentXP)
hWndListView = CreateListViewXP(hWnd);
Это 2 обработчика для обоих элементов управления представлением списка.