2012-01-16 3 views
0

InDesignにFlexパネルがあり、そこからURLをドラッグします。このURLをテキストエディタまたはWebブラウザにドロップすると、そのURLが機能します。しかし、InDesignのドキュメントにドロップしようとすると少し難しくなります。InDesign SDK:フレックスパネルからのドラッグアンドドロップ(drag'n'Drop)

私はCDragDropTargetFlavorHelperのサブクラスを実装しました。ドロップはWindows上で完全に機能します。

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:しかし、Mac上で、私は方法のCouldAcceptTypesで問題を抱えています。私はdataIterの内容を調べようとしましたが、dataIter-> First()の呼び出しはnilを返します。私はコントローラ - > GetItemCount()を試してみましたが、1を返します。しかし、コントローラ - > GetDragItem(1)を試してみると、無限のポインタを取得します。私は項目がない印象を持っています。しかし、ドロップはInDesign以外のアプリでも動作すると私は言った。

インターナリゼーションの問題ですか?または、他の何か ?それは私を乾燥させた。

事前

に感謝-------------------------- EDIT ------------ ----------------------- 私はこの問題を解決しましたが、別の問題を発見しました。フレックスパネルから送信されたフレーバが変更されたため、URLフレーバではなくテキストフレーバになります。私のメソッドcouldAcceptTypeは今動作します:

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がnilであることです。コントローラーに項目がありません。ただし、CouldAcceptTypesメソッド、DataObjectIteratorの項目がありました。だから、私のアイテムはどこですか?

私はカスタムCDataExchangeHandlerForを使用しようとしましたが、その使用法が本当に理解できませんでした。それはとにかく動作しませんでした。

アイデアはありますか?

よろしく、 レミ

答えて

0

問題はGetDragItemの引数です。それはPC上で1です。それはMac上で変わった価値(719853のようなもの)です。私が見つけた唯一の厄介な解決策は、CouldAcceptTypesメソッドのdataIterから取り出したオブジェクトからmemcpyを実行し、ProcessDragDropCommandメソッドでそれを使用することです。

関連する問題