| 52 | } |
| 53 | |
| 54 | winrt::Microsoft::UI::Xaml::Controls::MenuFlyoutItem FileContextMenu::makeMenuFlyout(MENUITEMINFO const& menuItemInfo) |
| 55 | { |
| 56 | winrt::Microsoft::UI::Xaml::Controls::MenuFlyoutItem item; |
| 57 | item.Text(menuItemInfo.dwTypeData); |
| 58 | |
| 59 | item.Click([thisPtr = shared_from_this()](auto self, ...) { |
| 60 | int const id = winrt::unbox_value<decltype(m_menuData.size())>(self.as<winrt::Microsoft::UI::Xaml::Controls::MenuFlyoutItem>().Tag()); |
| 61 | auto const& data = thisPtr->m_menuData[id]; |
| 62 | CMINVOKECOMMANDINFOEX invokeInfo |
| 63 | { |
| 64 | .cbSize = sizeof(invokeInfo), |
| 65 | .lpVerb = reinterpret_cast<decltype(invokeInfo.lpVerb)>(MAKEINTRESOURCEW(data.menuId)), |
| 66 | .nShow = SW_SHOWNORMAL, |
| 67 | }; |
| 68 | thisPtr->m_menu->InvokeCommand(reinterpret_cast<CMINVOKECOMMANDINFO*>(&invokeInfo)); |
| 69 | }); |
| 70 | |
| 71 | if (auto source = getIconFromWin32Menu(menuItemInfo.hbmpItem)) |
| 72 | { |
| 73 | winrt::Microsoft::UI::Xaml::Controls::ImageIcon icon; |
| 74 | icon.Source(source); |
| 75 | item.Icon(icon); |
| 76 | } |
| 77 | item.Tag(winrt::box_value(m_menuData.size())); |
| 78 | return item; |
| 79 | } |
| 80 | |
| 81 | void FileContextMenu::ShowAt(winrt::Microsoft::UI::Xaml::Controls::MenuFlyout& flyout) |
| 82 | { |