Это то, о чем говорит документация 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!
Но какова же цель 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работало". Работали так? Что именно вы делали, что произошло, и что вы ожидали? Убедитесь, что вы внимательно прочитали документацию, чтобы понять, как функции и структуры предназначены для работы.