Drag & Drop в другое приложение
От: ionicman  
Дата: 26.12.06 09:30
Оценка:
Вот вопрос у меня к guru. Хочется мне сделать Drop файлов из моего приложения в проводник. что делую:

Входные параметры wnd — окно куда бросать, pt — координаты точки "сброса", sFiles — тестовые строки разделенные нулем типа "c:\\1.txt\x00c:\\2.txt\x00\x00".

Так вот не работает, к сожелению. Я знаю что дроп такто через COM. Но вроде бы говорят что можно и без него.

Подскажите, кто знает. Или хотябы можно ли сделать это на простом API?
Заранее спасибо!

void DropTo(HWND wnd, POINT pt, char *sFiles) {
DROPFILES dobj={ 20, { pt.x, pt.y }, 0, 1 };
int nLen=0;
while (sFiles[nLen]!=0 || sFiles[nLen+1]!=0) nLen++;
nLen+=2;

int nGblLen=sizeof(dobj) + nLen*2 + 5;
HGLOBAL hGbl=GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE, nGblLen);
BYTE *sData=(BYTE *)GlobalLock(hGbl);
CopyMemory(sData, (BYTE *)&dobj, sizeof(dobj) );

char *sWStr=(char *)sData+sizeof(dobj);
DWORD i=0,j=i;
while (TRUE) {
       if (sFiles[i]==0) {
           MultiByteToWideChar(CP_ACP,0,(char *)(sFiles+j),-1,(LPWSTR)(sWStr+j*2),MAX_PATH);
           j=i+1;
           if (sFiles[j]==0) break;
       }
       i++;
 }

GlobalUnlock(hGbl);
PostMessage(wnd,WM_DROPFILES,(WPARAM)hGbl,0);
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.