我在InDesign中有一个Flex面板,我从中拖动一个URL。如果我在文本编辑器或Web浏览器上删除此URL,则可以正常工作。但是当我试图将它放在我的InDesign文档上时,它会更难一点。
我已经实现了CDragDropTargetFlavorHelper的子类。该下载在Windows上完美运行。但是在mac上,我在方法CanAcceptTypes:
中遇到了问题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),我会得到一个nil指针。我印象中没有项目。虽然,正如我所说,掉落适用于另一个应用程序,而不是InDesign。
这是内化问题吗?或者是其他东西 ?它让我干。
提前致谢
-------------------------- EDIT -------------------- --------------- 我解决了这个问题,但发现了另一个问题。 flex面板发送的味道已经改变,因此它是一种文本味道而不是URL味道。我的方法canAcceptType现在可以工作:
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方法中有一些项目。那么,我的物品在哪里?
我尝试使用自定义CDataExchangeHandlerFor,但无法真正理解它的用途。它无论如何都没有用。
有人有想法吗?
此致 雷米
答案 0 :(得分:0)
问题是GetDragItem的参数。 PC上是1。这在Mac上是一个奇怪的值(类似于719853)。我找到的唯一一个脏解决方案是从在CouldAcceptTypes方法中的dataIter中检索的对象中执行memcpy,并在ProcessDragDropCommand方法中使用它。