2013-06-16 4 views
0

Я создаю меню в приложении Win32. Я хочу создать 2 элемента для подменю, но он отображает только один.WinAPI Can not InsertMenuItem

BOOL foo; 
hSubMenu = CreatePopupMenu(); 
if (!hSubMenu) 
    return NULL; 
InsertMenu(hMenu, 0, MF_BYCOMMAND | MF_STRING | MF_POPUP, (UINT)hSubMenu, L"1 sub"); 
HBITMAP hBitmap = (HBITMAP)LoadImage(hInst, MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 16, 16, LR_DEFAULTCOLOR); 
MENUITEMINFO mii; 
ZeroMemory(&mii, sizeof(MENUITEMINFO)); 
mii.cbSize = sizeof(MENUITEMINFO); 
mii.fMask = MIIM_CHECKMARKS | MIIM_FTYPE | MIIM_ID | MIIM_STATE | MIIM_STRING; 
mii.fType = MFT_STRING; 
mii.fState = MFS_DEFAULT; 
mii.wID = ID_FILE_QUIT; 
mii.hbmpChecked = hBitmap; 
mii.hbmpUnchecked = hBitmap; 
mii.dwTypeData = L"Item"; 
mii.cch = 4; 
foo = InsertMenuItem(hSubMenu, 0, TRUE, &mii); 

ZeroMemory(&mii, sizeof(MENUITEMINFO)); 
mii.cbSize = sizeof(MENUITEMINFO); 
mii.fMask = MIIM_CHECKMARKS | MIIM_FTYPE | MIIM_ID | MIIM_STATE | MIIM_STRING; 
mii.fType = MFT_STRING; 
mii.fState = MFS_DEFAULT; 
mii.wID = ID_FILE_QUIT1; 
mii.hbmpChecked = hBitmap; 
mii.hbmpUnchecked = hBitmap; 
mii.dwTypeData = L"Item abc"; 
mii.cch = 4; 
foo = InsertMenuItem(hSubMenu, 1, TRUE, &mii); 
TCHAR buff[256]; 
if (!foo) 
{ 
    DWORD i = GetLastError(); 
    if (i) 
    { 
     FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, i, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buff, 256, NULL); // it says "The parameter is incorrect" 
    } 
} 

enter image description here

Я не знаю, где проблема. Может ли кто-нибудь мне помочь? Ваше предложение будет одобрено!

+0

, который не меняет результат! Я захватил ** метод GetLastError **, и он всегда говорит «Параметр неверен». – suti

+0

Конечно, да. – suti

ответ

2

У вас может быть только один пункт меню по умолчанию. Но вы указали MFS_DEFAULT для обоих. Попробуйте изменить один из них на MFS_ENABLED.

P.S. Это происходит, когда вы копируете/вставляете свой код :-)

+0

спасибо вам большое! моя проблема решена – suti