TrackPopupMenu: окно отключается после исчезновения меню - PullRequest
0 голосов
/ 31 января 2011

Я добавил всплывающее меню в свое приложение, и оно активируется с помощью следующего кода:

HMENU contextMenu;
int CALLBACK WinMain(...)
{
    HMENU hContext = LoadMenu(GetModuleHandle(NULL), MAKEINTRESOURCE(IDR_CONTEXT_MENU));
    contextMenu = GetSubMenu(hContext, 0);
}

case WM_RBUTTONDOWN:
{
    POINT pt;
    pt.x = GET_X_LPARAM(lParam);
    pt.y = GET_Y_LPARAM(lParam);
    ClientToScreen(hWndSDL, &pt);
    SetForegroundWindow(hWndSDL);
    TrackPopupMenu(contextMenu, TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, 0, hWndSDL, NULL);
    break;
}

Если у меня появилось всплывающее меню, а затем щелкните строку заголовка окна, оно исчезнет,но окно по-прежнему не будет отвечать на любые щелчки за пределами клиентской области окна.

Я установил KEYUP даже для буквы на клавиатуре, чтобы вызвать ReleaseCapture (), и разрешает не-клиентскую областьокно, чтобы начать отвечать снова.Но это поведение должно быть автоматическим, когда меню закрывается, не так ли?

У кого-нибудь есть идеи?

спасибо

Ответы [ 2 ]

1 голос
/ 31 января 2011

Почему вы показываете свое меню в обработчике WM_RBUTTONDOWN?

Вместо него должно быть WM_CONTEXTMENU, и вы должны иметь в виду, что оно может генерироваться с клавиатуры и не содержать координат.Или, по крайней мере, используйте WM_RBUTTONUP вместо.

1 голос
/ 31 января 2011

Не используйте сообщение WM_RBUTTONDOWN, используйте вместо него сообщение WM_CONTEXTMENU.Он генерируется автоматически, когда оконная процедура по умолчанию видит сообщение WM_RBUTTONUP.Примечание вверх, а не вниз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...