我在InDesign中有一個Flex面板,通過它我可以拖動一個URL。如果我在文本編輯器或Web瀏覽器上放置此URL,它就可以工作。但是,當我嘗試將其放在InDesign文檔上時,這有點困難。InDesign SDK:從柔性面板拖動'Drop'
我已經實現了CDragDropTargetFlavorHelper的子類。該下拉在Windows上完美運行。但在Mac上,我有方法CouldAcceptTypes問題:
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()答案kTrue Windows版本,但kFalse在Mac上。我試圖探索dataIter的內容,但是對dataIter-> First()的調用返回nil。我嘗試了一個控制器 - > GetItemCount(),它返回1.但是,如果我嘗試一個控制器 - > GetDragItem(1),我得到一個零指針。我有印象沒有項目。不過,正如我所說的那樣,這個下降在另一個應用程序上比InDesign更有效。
這是一個內化問題嗎?或者是其他東西 ?它讓我幹。
在此先感謝
--------------------------編輯------------ ----------------------- 我解決了這個問題,但發現了另一個。由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,但無法真正瞭解它的用途是什麼。無論如何它都不起作用。
有沒有人有想法?
問候, 雷米