Apache flex InDesign SDK:Drag';n';从柔性面板上跌落
我在InDesign中有一个Flex面板,我从中拖动一个URL。如果我把这个URL放在文本编辑器或web浏览器上,它就会工作。但当我试着把它放在我的InDesign文档上时,它就有点难了 我已经实现了CDragDropTargetFlavorHelper的一个子类。这种滴水器在窗户上效果很好。但在mac上,我在方法CouldAcceptTypes中遇到了问题:Apache flex InDesign SDK:Drag';n';从柔性面板上跌落,apache-flex,sdk,drag-and-drop,adobe-indesign,Apache Flex,Sdk,Drag And Drop,Adobe Indesign,我在InDesign中有一个Flex面板,我从中拖动一个URL。如果我把这个URL放在文本编辑器或web浏览器上,它就会工作。但当我试着把它放在我的InDesign文档上时,它就有点难了 我已经实现了CDragDropTargetFlavorHelper的一个子类。这种滴水器在窗户上效果很好。但在mac上,我在方法CouldAcceptTypes中遇到了问题: DragDrop::TargetResponse AutocatDNDCustomFlavorHelper::CouldAcceptTy
DragDrop::TargetResponse AutocatDNDCustomFlavorHelper::CouldAcceptTypes(const DragDropTarget* target, DataObjectIterator* dataIter, const IDragDropSource* fromSource, const IDragDropController* controller) const
{
if (0 != dataIter && 0 != target)
{
DataExchangeResponse response = dataIter->FlavorExistsWithPriorityInAllObjects(kURLDExternalFlavor);
if (response.CanDo())
{
...
}
}
}
问题是response.canDo()在Windows上回答kTrue,但在Mac上回答kFalse。我试图探索dataIter的内容,但是对dataIter->First()的调用返回nil。我尝试了一个控制器->GetItemCount(),它返回1。但是如果我尝试一个控制器->GetDragItem(1),我会得到一个零指针。我有一个印象,没有任何项目。不过,正如我所说的,drop在InDesign以外的其他应用程序上也可以使用
这是一个内部化的问题吗?还是别的什么?它让我擦干
提前谢谢
--------------------------编辑-----------------------------------
我解决了这个问题,但发现了另一个问题。flex面板发送的样式已更改,因此它是文本样式而不是URL样式。我的方法现在可以使用了:
DragDrop::TargetResponse AutocatDNDCustomFlavorHelper::CouldAcceptTypes(const DragDropTarget* target, DataObjectIterator* dataIter, const IDragDropSource* fromSource, const IDragDropController* controller) const
{
if (0 != dataIter && 0 != target)
{
// Check for URL Flavor in the drag
DataExchangeResponse response = dataIter->FlavorExistsWithPriorityInAllObjects(kTEXTExternalFlavor);
if (response.CanDo())
{
return DragDrop::TargetResponse(response, DragDrop::kDropWillCopy);
}
}
return DragDrop::kWontAcceptTargetResponse;
}
问题现在出现在ProcessDragDropCommand方法中。代码如下:
ErrorCode AutocatDNDCustomFlavorHelper::ProcessDragDropCommand(IDragDropTarget* target, IDragDropController* controller, DragDrop::eCommandType action)
{
// retrieve drop data
IPMDataObject* dragDataObject = controller->GetDragItem(1);
uint32 dataSize = dragDataObject->GetSizeOfFlavorData(kTEXTExternalFlavor) ;
...
}
问题是我得到的IMPDataObject为零。控制器中没有项目。但是,在DataObjectIterator中的CouldAcceptTypes方法中有一些项。那么,我的物品在哪里
我尝试使用自定义CDATA ExchangeHandlerFor,但无法真正理解它的用途。反正也没用
有人有主意吗
问候,,
Rémi问题在于GetDragItem的参数。在PC上是1,在Mac上是一个奇怪的值(类似于719853)。我发现的唯一肮脏的解决方案是在CouldAcceptTypes方法中从dataIter检索的对象中执行memcpy,并在ProcessDragDropCommand方法中使用它