Windows ContextMenu C ++ с ярлыками в выделении

Мне трудно получить список выбранных файлов в моей реализации ContextMenu, когда цель моего щелчка правой кнопкой мыши является ярлыком. Дескриптор глобальной памяти возвращает список, содержащий только элемент ярлыка, и, кажется, не знает ни о каком другом элементе, который я выбрал.

Я заметил такое поведение во многих сторонних приложениях, включая Notepad ++, WinRar и UltraEdit.

Как правильно получить список выбранных файлов, если цель щелчка правой кнопкой мыши является ярлыком? Это не проблема для функции сжатия файлов, встроенной в Проводник (щелкните правой кнопкой мыши> отправить в> сжатую сжатую папку).

Изменить: вот небольшой фрагмент моего текущего метода. pida->cidl становится 1, когда целью является ярлык, в противном случае это правильное количество элементов, которые я выбрал:

CStgMedium me;
pDataObj->GetData(&fe, &me);

LPIDA pida = reinterpret_cast<LPIDA>(me.hGlobal);
for(UINT i = 0; i < pida->cidl; i++) {
...
}

0

Решение

Мы говорим о IContextMenu интерфейс здесь? Если это так, вы должны сделать это так (ошибки возможны, я пишу без компилятора):

Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID){

FORMATETC fetc = { CF_HDROP, null, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
STGMEDIUM stgm;

pdtobj->GetData(&fetc, &stgm);
UINT count = DragQueryFile(stgm.hGlobal, 0xFFFFFFFF, null, 0);
char filename[255];

for (int i=0; i<count; i++){
DragQueryFile(stgm.hGlobal, i, filename, 255);
// Here do something with i-th filename
}
}

Я упустил проверку ошибок для простоты.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector