C++/CLI C++/CLR ドットネット
C++ フォームアプリケーションで ドラッグドロップでファイルを 開く 読み込む
ピクチャーボックスにBMPファイルをドラッグドロップして表示とか
・ドラッグされてきたものを受け付けるようにする
Form1.h[デザイン] コントロールのプロパティ → 動作 → AllowDrop を true にする
デザインのプロパティで AllowDrop の項目が無い場合(PictureBoxなど)
Form1.hのコード上で AllowDrop を true にする
InitializeComponent関数 の中で
this->pictureBox1->BackColor = System::Drawing::SystemColors::Control; こんな感じのその辺の行に
this->pictureBox1->AllowDrop = true;
と追加
・イベントを登録1
ドラッグドロップされた時のイベントを登録したくなるが
その前にドラッグした状態で コントロールに 入った時(マウスポインタが)のイベントを登録する必要がある
Form1.h[デザイン] コントロールのプロパティ イベント → ドラッグ アンド ドロップ → DragEnter のイベントを追加する
その辺をダブルクリックして
private: System::Void pictureBox1_DragEnter(System::Object^ sender, System::Windows::Forms::DragEventArgs^ e) {
}
こんな感じの関数の中に
if(e->Data->GetDataPresent( ::System::Windows::Forms::DataFormats::FileDrop)) {
e->Effect = ::System::Windows::Forms::DragDropEffects::All;
}
else {
e->Effect = ::System::Windows::Forms::DragDropEffects::None;
}
と書く
ドラッグされてきたのがファイルなら受け付ける それ以外なら無視みたいな感じ
・イベントを登録2
実際にドロップされた時のイベントを追加する
Form1.h[デザイン] コントロールのプロパティ イベント → ドラッグ アンド ドロップ → DragDrop のイベントを追加する
その辺をダブルクリックして
private: System::Void pictureBox1_DragDrop(System::Object^ sender, System::Windows::Forms::DragEventArgs^ e) {
}
この感じの関数の中にドロップされた時の処理を書いていく
ドロップされたものの内容は e->Data->GetData関数で取得する
引数は フォーマット と false(無くても良い気がするけど 自分が作った時はfalse)
フォーマットは ::System::Windows::Forms::DataFormats 参照 この場合 ::System::Windows::Forms::DataFormats::FileDrop
んでこれを String ^ の配列に型変換して そのまま String ^ の配列に入れます
コードでは
array
こんな感じで
これで s に ドラッグ&ドロップしたファイルのパスが入ってます
あとは
for( int i=0; i < s->Length; i++) {
s[i]を開く
}
とすれば 複数ファイルがドロップされた時の処理も出来ます
以上