Top / Programming / C++Builder / エクスプローラからフォームへのドラッグアンドドロップを受け入れる

エクスプローラからフォームへのドラッグアンドドロップを受け入れる

エクスプローラからフォームへのドラッグアンドドロップを受け入れる方法を説明します。

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);
  }
}

更新履歴