MCPcopy Create free account
hub / github.com/HO-COOH/FastCopy / ShowAt

Method ShowAt

FastCopy/FileContextMenu.cpp:81–124  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

79}
80
81void FileContextMenu::ShowAt(winrt::Microsoft::UI::Xaml::Controls::MenuFlyout& flyout)
82{
83 if (flyout.Items().Size() != 0)
84 return;
85
86 winrt::com_ptr<IShellItem> item = CreateItemFromParsingName(m_path.data()), folderItem;
87 item->GetParent(folderItem.put());
88
89 winrt::com_ptr<IShellFolder> folder;
90 folderItem->BindToHandler(nullptr, BHID_SFObject, IID_PPV_ARGS(folder.put()));
91
92
93 LPITEMIDLIST child{ };
94
95 SHGetIDListFromObject(item.get(), &child);
96 auto last = ILFindLastID(child);
97
98 LPCITEMIDLIST idl[2]{ last };
99
100 auto hr = folder->GetUIObjectOf(NULL, 1, &idl[0], IID_IContextMenu, nullptr, m_menu.put_void());
101
102 auto hMenu = CreatePopupMenu();
103 m_menu->QueryContextMenu(hMenu, 0, 1, 0x7fff, CMF_NORMAL);
104
105 auto const itemCount = GetMenuItemCount(hMenu);
106 MENUITEMINFO menuItemInfo{
107 .cbSize = sizeof(menuItemInfo),
108 .fMask = MIIM_BITMAP | MIIM_FTYPE | MIIM_STRING | MIIM_ID | MIIM_SUBMENU
109 };
110 for (int i = 0; i < itemCount; ++i)
111 {
112 TCHAR buffer[500]{};
113 menuItemInfo.dwTypeData = buffer;
114 menuItemInfo.cch = std::size(buffer);
115 GetMenuItemInfo(hMenu, i, true, &menuItemInfo);
116 if (!std::wstring_view{buffer}.empty() && m_menu)
117 {
118 flyout.Items().Append(makeMenuFlyout(menuItemInfo));
119 std::wstring command(100, {});
120 m_menu->GetCommandString(menuItemInfo.wID - 1, GCS_VERB, nullptr, reinterpret_cast<char*>(command.data()), command.size());
121 m_menuData.push_back(MenuData{ .menuId = menuItemInfo.wID - 1, .verb = std::move(command) });
122 }
123 }
124}

Callers 1

ShowMenuMethod · 0.80

Calls 7

SizeMethod · 0.80
dataMethod · 0.80
sizeMethod · 0.80
GetParentMethod · 0.45
BindToHandlerMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected