Какова цель использования параметра uItem в InsertMenuItem ()?

0

Это то, о чем говорит документация InsertMenuItem():

uItem [in]

    Type: UINT

    The identifier or position of the menu item before which to insert the new item. The meaning of this parameter depends on the value of fByPosition.

Но какова же цель MENUITEMINFO.wID?

wID

    Type: UINT

    An application-defined value that identifies the menu item. Set fMask to MIIM_ID to use wID.

Обратите внимание, что я тестировал оба параметра и работал только с WID!

Теги:
winapi

1 ответ

1
Лучший ответ

Но какова же цель MENUITEMINFO.wID?

uItem управляет местоположением, в которое вставлен новый элемент меню. wID управляет идентификатором нового пункта меню.

Предположим, у вас есть меню с 3 элементами в нем с идентификаторами IDM_FOO, IDM_BAR и IDM_BAZ. Теперь предположим, что вы хотите вставить 4-й элемент с идентификатором IDM_QUUX в меню между IDM_FOO и IDM_BAR. Вы можете сделать это, используя InsertMenuItem() чтобы вставить его либо перед IDM_BAR (используя fByPosition == FALSE), либо перед индексом 1 (используя fByPosition == TRUE). Например:

MENUITEMINFO mii;
ZeroMemory(&mii, sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_ID | /* Other flags */;
mii.wID = IDM_QUUX;  // ID of new menu item to be inserted
// Fill out other fields
... 
// Insert new menu item before the IDM_BAR item
InsertMenuItem(hMenuParent, IDM_BAR, FALSE, &mii);
...
// OR, insert new menu item before position 1
InsertMenuItem(hMenuParent, 1, TRUE, &mii);

Что касается этого комментария:

Обратите внимание, что я тестировал оба параметра и работал только с WID!

Вам нужно будет уточнить, что вы подразумеваете под "только wIDработало". Работали так? Что именно вы делали, что произошло, и что вы ожидали? Убедитесь, что вы внимательно прочитали документацию, чтобы понять, как функции и структуры предназначены для работы.

  • 0
    Я думал, что они имели в виду, изменяя значение fByPosition на FALSE, тогда uItem будет интерпретироваться как идентификатор пункта меню, который я создаю !! Что я имел в виду под «wID работал», так это то, что, установив MENUITEMINFO.wID, я смог получить сообщение WM_COMMAND.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню