This is a known problem with TrackPopupMenu. The cure is simple, though somewhat obscure. Immediately before you call TrackPopupMenu, make a call to SetForegroundWindow for your menu's owner window. Then immediately after the call to TrackPopupMenu, post the same window a WM_NULL message. Bizarre, but it works. Look at this sample code:
HMENU hQuick = ::GetSubMenu (m_hUtility, IDM_QUICK); POINT CurPos ; GetCursorPos (&CurPos); SetForegroundWindow (); // Bodge TrackPopupMenu (hQuick, TPM_LEFTBUTTON, CurPos.x, CurPos.y, 0, GetSafeHwnd(), NULL); PostMessage (WM_NULL, 0, 0); // Bodge