Winapi . Эквивалент TrackPopupMenuEx в окне создания

#c #visual-studio #winapi

Вопрос:

Когда мы создаем всплывающее меню, мы вызываем функцию TrackPopupMenuEx . Он отображает контекстное меню в указанном месте и отслеживает выбор элементов в контекстном меню . Если вы укажете TPM_RETURNCMD в параметре fuFlags, возвращаемым значением будет идентификатор элемента меню, выбранного пользователем. Если пользователь отменяет меню, не сделав выбор, или если возникает ошибка, возвращаемое значение равно нулю. Эта команда блокирует ie, если мы не нажмем на меню или снаружи, мы заблокированы.

Я создал окно, в котором есть различные статические элементы, которые действуют как всплывающее меню. Есть ли какая-то функция, равная (TrackPopupMenuEx с TPM_RETURNCMD), которая может сказать мне, какая из команд WM_COMMAND была нажата последней, которая блокируется . Если функция не существует , как мы можем создать хорошую блокировку, чтобы она не съедала процессор в цикле ожидания.

Что я сделал :

В WM_КОМАНДЕ я инициализирую глобальную переменную, которая является последней. В своей функции я жду, пока эта переменная не будет установлена, но, похоже, она съедает процессор.

Какой-то код

     WNDCLASSW wc = { 0 };
    wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hInstance = hInst;
    wc.lpszClassName = L"mywindowsclass";

    wc.lpfnWndProc = windowprocedure;
//<== all handlers WM_COMMAND defined in this fucntion 
 
    if (!RegisterClassW(amp;wc))
    {
        return -1; // registration failed
    }

 
    HWND hWnd = CreateWindowW(L"mywindowsclass",
 L"My window", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 
 100, 100,   500, 500, NULL, NULL, NULL, NULL);
 
 //POINT : need some blocking code here which is efficient to find what i clicked
 

Комментарии:

1. в WM_COMAND существующем идентификаторе элемента управления и дескрипторе окна управления. и, конечно, не нужна никакая глобальная переменная

2. Извините. Не понял . Процедура обработки команды ie WM_COMMAND определена в функции, сообщаемой классу при регистрации класса . Главное только что зарегистрировалось и вызвало окно создания .

3. нужен какой-нибудь код блокировки здесь, который эффективен для поиска того, что я нажал ?! что это значит

4. Я создал окно, в котором есть различные статические элементы, которые действуют как всплывающее меню. . WM_COMMAND обработал выполненную функциональность . Точно так же , как TrackPopupMenuEx с TPM_RETURNCMD помогает нам с блокирующим вызовом с идентификатором, по которому было нажато меню, мне нужен блокирующий вызов, который поможет мне идентифицировать окно, которое я нажал внутри главного окна . Следовательно, необходим блокирующий вызов . Я также хочу, чтобы это было эффективно

5. Код блокировки, который вам нужен, — это цикл сообщений.