1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
case WM_MENUCOMMAND:
{
MENUITEMINFO menuInfo;
menuInfo.cbSize = sizeof(MENUITEMINFO);
menuInfo.fMask=MIIM_DATA;
if(GetMenuItemInfo((HMENU)lParam,(UINT) wParam, TRUE, &menuInfo )!=FALSE)
{
Menu *mMenu = (Menu *) menuInfo.dwItemData;
if(mMenu!=NULL && mMenu->ispopup==false)
{
if(mMenu->Click)
mMenu->Click();
//mMenu->imgMenu.reset();
}
return 0;
}
//menuhandle=NULL;
}
break;
//when the mouse move, enter, leave and leave the menu
static Menu *mMenu=NULL;
static UINT Last_Menu_ID=-1;
case WM_MENUSELECT:
{
//menuhandle=(HMENU)lParam;
//mouse leave the previous menu item
if(GetMenuState((HMENU)lParam,Last_Menu_ID,MF_BYCOMMAND)!=-1)
{
if (mMenu!=NULL)
{
if(mMenu->MouseLeave)
mMenu->MouseLeave();
mMenu=NULL;
}
Last_Menu_ID=-1;
}
if( ((HIWORD(wParam) & MF_POPUP)==MF_POPUP) && (HIWORD(wParam) & MF_MOUSESELECT))
{
MENUITEMINFO menuInfo1;
menuInfo1.cbSize = sizeof(MENUITEMINFO);
menuInfo1.fMask=MIIM_DATA;
if(GetMenuItemInfo((HMENU)lParam,LOWORD(wParam), TRUE, &menuInfo1 )==FALSE)
break;
mMenu = (Menu *) menuInfo1.dwItemData;
if (mMenu!=NULL)
{
if(mMenu->MouseEnter)
mMenu->MouseEnter();
}
Last_Menu_ID = LOWORD(wParam);
}
else if(((HIWORD(wParam) & MF_HILITE) || (HIWORD(wParam) & MF_MOUSESELECT)) && ((HIWORD(wParam) & MF_POPUP)!=MF_POPUP))
{
//Mouse Enter on actual menu item
MENUITEMINFO menuInfo1;
menuInfo1.cbSize = sizeof(MENUITEMINFO);
menuInfo1.fMask=MIIM_DATA;
if(GetMenuItemInfo((HMENU)lParam,LOWORD(wParam), FALSE, &menuInfo1 )==FALSE)
break;
mMenu = (Menu *) menuInfo1.dwItemData;
if (mMenu!=NULL)
{
if(mMenu->MouseEnter)
mMenu->MouseEnter();
}
Last_Menu_ID = LOWORD(wParam);
menuhandle=(HMENU)lParam ;
}
return 0;
}
break;
//some menus items are on system menu control
case WM_SYSCOMMAND:
{
//testing if the menu handle isn't null and if the menu item is valid
if (GetMenuState(menuhandle,wParam,MF_BYCOMMAND) !=0xFFFFFFFF && menuhandle!=NULL )
{
MENUITEMINFO menuInfo;
menuInfo.cbSize = sizeof(MENUITEMINFO);
menuInfo.fMask=MIIM_DATA;
GetMenuItemInfo(menuhandle,(UINT) wParam, FALSE, &menuInfo );
Menu *mMenu = (Menu *) menuInfo.dwItemData;
if (mMenu!=NULL && mMenu->ispopup==false)
{
if(mMenu->Click)
mMenu->Click();
//mMenu->imgMenu.reset();
//return 0;
}
}
//menuhandle=NULL;
else
return DefWindowProc(HandleWindow, msg, wParam, lParam);
}
break;
|