1
Если я использую win32 api, как отвечать WM_RBUTTONUP?Как отредактировать сообщение мыши о правой кнопке в элементе списка?
case WM_RBUTTONUP:
{
break;
}
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch (wmId) {
case IDE_FRIEND:
{
switch (wmEvent) {
case WM_RBUTTONUP:
{
POINT pt;
GetCursorPos(&pt);
TrackPopupMenu(g_hMenu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hWnd, nullptr);
break;
}
default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}
break;
}
При нажатии на правую кнопке мыши, он не войдет в 'дело' WM_RBUTTONUP
'IDE_FRIEND' связанно с ListBox.
Высокое слово '' lParam' на WM_COMAND' не код сообщения. Полнота 'lParam' - это дескриптор окна, который сгенерировал' WM_COMMAND'; у вас нет способа узнать, какая кнопка вызвала «WM_COMMAND». Вам нужно будет решить эту проблему по-другому. Что именно вы хотите сделать, просто покажите всплывающее меню для элементов списка? – andlabs
в andlabs: Я использую wmEvent раньше, и он также не будет работать. Да, я хочу показать всплывающее меню для элемента lisbox. – HaibaraAi
WM_RBUTTONUP будет работать, если вы щелкните правой кнопкой мыши в окне, но если вы щелкните правой кнопкой мыши в списке, он не появится там. Вам нужно создать отдельный wndProc для окна списка (позволяет вызвать его listBoxProc), а затем перехватить WM_RBUTTONUP в listBoxProc. Если у вас есть элемент управления ListView, вы сможете сразу щелкнуть правой кнопкой мыши. Ps, вы должны уловить 'WM_CONTEXTMENU', это в основном то же самое. –