2012-01-16 27 views
0

我在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,但無法真正瞭解它的用途是什麼。無論如何它都不起作用。

有沒有人有想法?

問候, 雷米

回答

0

問題是GetDragItem的論點。在PC上是1。這在Mac上是一個奇怪的值(類似719853)。我發現的唯一骯髒的解決方案是從在CouldAcceptTypes方法中的dataIter檢索的對象中執行memcpy,並在ProcessDragDropCommand方法中使用它。