エクスプローラからフォームへのドラッグアンドドロップを受け入れる方法を説明します。
WM_DROPFILESメッセージを受け取るためのメンバ関数を用意します。
class TForm1 : public TForm
{
__published: // IDE 管理のコンポーネント
TMemo *Memo1;
private: // ユーザー宣言
//追加
void __fastcall WMDropFiles(TWMDropFiles &Message);
public: // ユーザー宣言
__fastcall TForm1(TComponent* Owner);
protected:
//追加
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DROPFILES, TWMDropFiles, WMDropFiles)
END_MESSAGE_MAP(TForm)
};
フォームがドラッグアンドドロップを受け入れるように設定します。
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
DragAcceptFiles(this->Handle, true);
}
ドラッグアンドドロップ時の処理を記述します。
プロジェクトのTCHARのマップ先の設定はは「wchart」にしています。
void __fastcall TForm1::WMDropFiles(TWMDropFiles &Message)
{
//ドロップされたファイルの数
const unsigned int count = DragQueryFile((HDROP)Message.Drop, -1, NULL, 0);
for (unsigned int i = 0; i < count; ++i)
{
//ファイル名を格納するのに必要なバッファ
const unsigned int length = DragQueryFile((HDROP)Message.Drop, i, NULL, 0);
wchar_t filename[MAX_PATH] = {0};
DragQueryFile((HDROP)Message.Drop, i, filename, length);
//ファイル名をMemo1に登録
Memo1->Lines->Add(filename);
}
}