転送コールバックの使い方
転送コールバックは、ドロップが発生したときに、ドラッグ・ソースからデータを受け入れます。転送コールバックの最初のアクションは、callData の中の reason フィールドの確認です。reason が DtCR_DND_TRANSFER_DATA ではない場合には、直ちに戻さなければなりません。そうでない場合には、型と reason の中で指定された操作に基づいて、データ転送を続けます。たとえば、ファイルのコピーを処理している場合には、データ構造体からファイル名を検索し、ファイルを開き、その内容をコピーします。ドロップ領域が複数のデータ型をサポートしている場合には、各データ型の転送を適切にサポートする必要があります。
次に、テキストとファイル名のデータ型のコピーをサポートするドロップ領域を描画するための簡単な転送コールバックを示します。
void
TransferCallback(
Widget widget,
XtPointer clientData,
XtPointer callData)
{
DtDndTransferCallbackStruct *transferInfo =
(DtDndTransferCallbackStruct*) callData;
int ii;
DtDndcontext * dropData = transferInfo->dropData;
return;
switch dropData->protocol {
case DtDND_FILENAME_TRANSFER:
for (ii=0; ii < dropData->numItems; ii++) {
drawTheString(dropData->data, strings[ii]);
}
break;
case DtDND_TEXT_TRANSFER:
for (ii=0; ii<dropData->numItems; ii++){
drawTheFile(dropData->data.files[ii]);
}
break;
default:
transferInfo->status = DtDND_FAILURE;
}
}
|