Re[3]: Помогите с Drag-and-Drop в Builder
От: Аноним  
Дата: 22.04.04 16:36
Оценка:
Нельзя ли узнать что именно выдаёт компилятор!

Ну за неимением такового попробую предположить.

Да вроде отсутствует словечко одно в декларации __stdcall
А вообще лучше всего использовать специяльно предназначеный макрос STDMETHODIMP
Честно говоря сделано то всё вроде правильно!

Да к стати компилятор будет ещё ругаться на отсутствие методов IUnknown
Проблему я просто решил лишним вызовом:


virtual HRESULT __stdcall QueryInterface(const GUID& IID, void **Obj){
   return TInterfacedObject::QueryInterface(IID, (void *)Obj);
};


И на последок вот пример который перетаскивает имена файлов в editbox:

//---------------------------------------------------------------------------
HRESULT _stdcall TDropTarget::DragEnter(IDataObject * pDataObject,DWORD grfKeyState,POINTL pt,DWORD * pdwEffect){
  return S_OK;
};

HRESULT _stdcall TDropTarget::DragOver(DWORD grfKeyState,POINTL pt,DWORD * pdwEffect){
  return S_OK;
};

HRESULT _stdcall TDropTarget::DragLeave(void){
  return S_OK;
};

HRESULT _stdcall TDropTarget::Drop(IDataObject * pDataObject,DWORD grfKeyState,POINTL pt,DWORD * pdwEffect){
  STGMEDIUM Data;
  FORMATETC Format={CF_HDROP,NULL,DVASPECT_CONTENT,-1,1};
  HRESULT returnval=pDataObject->GetData(&Format,&Data);

  if((returnval==S_OK)&&(Data.tymed==TYMED_HGLOBAL)){
    UINT buffSize=DragQueryFile(Data.hGlobal,0,NULL,0);
    char* Buffer=new char[buffSize+1];
    DragQueryFile(Data.hGlobal,0,Buffer,buffSize+1);
    Form1->FileName->Text=Buffer;
    delete[] Buffer;
    GlobalFree(Data.hGlobal);
  };

  return returnval;
};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.