• 締切済み

秀丸のテキストをドラッグ&ドロップで受け入れる

tadokoro1です。こんばんは。 ドラッグ&ドロップ(非MFC)で、秀丸のテキストを受け入れたいのですがうまくいきません。 m_pDataObject->QueryGetData関数で確認したのですが、0~16の何れのフォーマットも該当しませんでした。 以下、DragEnter(DragOverも同様)のコードです。 FORMATETC fe; WORD fmt; for (fmt = 0; ; fmt ++) { fe.cfFormat = fmt; fe.ptd = NULL; fe.dwAspect = NULL; fe.lindex = NULL; fe.tymed = TYMED_HGLOBAL; hr = m_pDataObject->QueryGetData(&fe); if (fmt >= 16) break; } どのように取得したら良いのか、ご教授をお願いします。

みんなの回答

回答No.1

>ドラッグ&ドロップ(非MFC)で、秀丸のテキストを受け入れたい これは「秀丸エディタを開き、秀丸エディタで全選択または部分選択をして、選択したテキストをドラッグ&ドロップで受け入れる」ですよね? >m_pDataObject->QueryGetData関数で確認したのですが、0~16の何れのフォーマットも該当しませんでした。 http://ddev.blog46.fc2.com/blog-entry-64.html の「フォーマットの列挙」を参照。 フォーマットは「標準で定義されている物が、CF_TEXT~CF_LOCALEの17種類ある」と言うだけで、これ以外に「ユーザーが定義した物」や「OEM定義の物」など、色々な物があります。 例えば、IEからURLをドラッグ&ドロップした場合「CF_XXXXとして定義されていない値」が使われます。 なので「定数で0~16」とかでフォーマットを指定してはいけません。 必ず「enumFormatEtc()などで、データオブジェクトが持っている有効なフォーマットを列挙」しなければいけません。

tadokoro1
質問者

お礼

tadokoro1です。こんばんは。 GetDataの呼び出しを、以下のように変更しましたら成功しました。 fe.cfFormat = CF_UNICODETEXT; fe.ptd = NULL; fe.dwAspect = DVASPECT_CONTENT; fe.lindex = -1; fe.tymed = TYMED_HGLOBAL; hr = m_pDataObject->GetData(&fe, &stm); 貴重な意見、有難うございました。

tadokoro1
質問者

補足

tadokoro1です。こんばんは。 早速のご回答有難うございます。 ご指摘の通り、enumFormatEtc()を使用してフォーマットを列挙してみました。 列挙されたフォーマットは、13(CF_UNICODETEXT)と1(CF_TEXT)でした。 しかし、これらを引数にGetData()を呼び出しても、戻り値が「-2147221397」のエラーとなってしまいます。 fe.cfFormat = CF_UNICODETEXT; fe.ptd = NULL; fe.dwAspect = NULL; fe.lindex = NULL; fe.tymed = TYMED_HGLOBAL; hr = pDataObject->GetData(&fe, &stm); なぜ、列挙されたフォーマットでデータが取得出来ないのか良く解りません。

関連するQ&A