经常使用菜单,但是如果直接加载菜单资源,调用TrackPopupMenu时 就会出现菜单显示不全的问题, 基本上解决方法就是先GetSubMenu,再TrackPopupMenu,
两种方法,一种就是在菜单资源里把所要加载的资源放到一个Popup属性的菜单下面,
另外就是程序创建一个Popup菜单,把菜单资源附加到这个Popup菜单上,再从Popup菜单中GetSubMenu(0) 取得需要的菜单
case WM_CONTEXTMENU:
{
HWND hWnd = (HWND)wParam; //窗口句柄
int xPos = GET_X_LPARAM(lParam); //鼠标X屏幕坐标
int yPos = GET_Y_LPARAM(lParam); //鼠标Y屏幕坐标
HMENU hMenu = CreatePopupMenu(); //创建弹出式菜单
HMENU hSrcMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDC_TESTWIN32)); //加载菜单资源
AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hSrcMenu, _T("Popup")); //附加到弹出菜单
HMENU hTackMenu = GetSubMenu(hMenu, 0); //取出目标菜单
TrackPopupMenuEx(hTackMenu, 0, xPos, yPos, hWnd, NULL); //弹出菜单
DestroyMenu(hSrcMenu); //销毁加载的菜单
DestroyMenu(hMenu); //销毁弹出菜单
break;
}