この節では、ドラッグ & ドロップのアプリケーション・プログラム・インタフェース (API) の概要を説明します。
ドラッグ & ドロップ機能は、デスクトップ・サービス・ライブラリ DtSvc で実現されます。ドラッグ & ドロップ API にアクセスするには、ヘッダ・ファイル <Dt/Dnd.h> を組み込み、-lDtSvc をつけてリンクします。
API には 4 つの関数呼び出しがあり、ヘッダ・ファイル Dnd.h の中で宣言されています。これらの関数について、以下の段落で概説します。これらの関数については、後の節で詳しく説明します。
DtDndDragStart() は、ユーザ・アクションに応答して、ドラッグを開始します。
DtDndCreateSourceIcon() は、DtDndDragStart() で使用するソース・アイコンを作成します。
DtDndDropRegister() は、ウィジェットをドロップ領域として登録します。ドロップ領域の登録は、通常はウィジェットが作成された直後に行われますが、いつ行なってもかまいません。
DtDndDropUnregister() は、以前に登録したウィジェットの登録を解除します。ドロップ領域は、通常は破壊される直前に登録解除されますが、登録後であれば、いつ登録解除してもかまいません。
データ転送を処理するには、DtDndContext のデータ構造を使用します。この構造体には、転送プロトコルのためのフィールド、転送される項目数、および転送されるデータ項目の配列が入ります。この構造体の構文の詳細は、DtDndDragStart(3X) および DtDndDropRegister(3X) のマニュアル・ページを参照してください。
プロトコルは、転送データの型を API に知らせるために使用されます。定義済みプロトコルを表 5-6 に示します。
表 5-6 定義済みプロトコル
プロトコル |
説明 |
---|---|
DtDND_TEXT_TRANSFER |
テキスト転送。コンパウンド・テキスト (Motif は、テキスト転送のためにコンパウンド・テキスト・ターゲットを使用します。) |
DtDND_FILENAME_TRANSFER |
ファイル名転送 |
DtDND_BUFFER_TRANSFER |
メモリ・バッファ |
表 5-7 に示すように、ドラッグ・ソースとドロップ領域は 3 つの方法のいずれか 1 つでデータを転送できます。
表 5-7 データ転送操作
操作 |
説明 |
---|---|
XmDROP_MOVE |
データを移動します (コピーしてから削除します)。 |
XmDROP_COPY |
データをコピーします。 |
XmDROP_LINK |
データへのリンクを含みます。 |