• ベストアンサー

ファイルのドラッグアンドドロップ

Visual C++6.0で ListBOX上にファイルをドラッグアンドドロップ させて、そのファイルのパスの一覧を取得したいのですが どのようにすればいいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#2009
noname#2009
回答No.3

下の回答はウソです。 『DragAcceptFiles(GetDlgItem(IDC_LISTXX));』   ↓ 『GetDlgItem(IDC_LISTXX)->DragAcceptFiles();』 です。思い切りウソでした。リストボックスに対しての 初期化処理でした。しかもよく見ると解決策自体がウソ でした。もう一度笑ってさらに水に流してやって下さい。 失礼しました。 初期化処理を省いても上手くいく、、、そういうことも あったりしますが、MS社さんが規定しているので やはり初期化処理は入れといた方が良いかと思います。

sha-girl
質問者

お礼

VC初心者の私でもとてもわかりやすかったです。ありがとうございました。

その他の回答 (2)

noname#2009
noname#2009
回答No.2

『DragAcceptFiles(GetDlgItem(IDC_LISTXX));』     ↓ 『::DragAcceptFiles(GetDlgItem(IDC_LISTXX));』 に変えて下さい。MFC利用なのかどうなのか、わから なかったので、C言語のみでもMFCでも両方いける ような説明にしていました。C++(MFC)では APIを呼ぶときスコープ解決のため(::)を入れます。 その場合では MFCの CWnd::DragAcceptFiles(BOOL) と APIの DragAcceptFiles(HWND, BOOL) が ぶつかっているからです。APIの側にグローバル スコープ(::)を付け区別します。 「reinterpret_cast」については強制キャストで (CWnd*)を(int)にキャストしていることになります。 コンパイラは論理性よりも機械的な解決方法を示して いたのだと思います。 ~~ ひょっとすっと、そういう問題起こるかなとちょっと 思ってました。確信犯でした。笑って水に流してやって 下さい。。。

noname#2009
noname#2009
回答No.1

リソースエディタでリストボックスの[ドラッグアンドドロ ップを許可]をチェックして、親ウィンドウに以下を書く。 WM_CREATE か WM_INITDIALOG で DragAcceptFiles(GetDlgItem(IDC_LISTXX)); ※IDC_LISTXX・・・リストボックスID WndProc か DlgProc のメッセージループ内で case WM_DROPFILES: { HDROP hDrop; char szFileName[MAX_PATH+1]; UINT uFileNo; int i; hDrop = (HDROP) wParam; // 内部のDROP構造体へのハンドル uFileNo = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0); for(i = 0; i < (int)uFileNo; i++) { DragQueryFile(hDrop, i, szFileName, sizeof(szFileName)); MessageBox(szFileName); } DragFinish(hDrop); } break; で、 参考URLは『猫でも~』

参考URL:
http://kumei.ne.jp/c_lang/sdk2/sdk_105.htm
sha-girl
質問者

お礼

お答え頂きありがとうございます。 DragAcceptFiles(GetDlgItem(IDC_LIST1)); だと C:\xxx\xxxDlg.cpp(189) : error C2664: 'DragAcceptFiles' : 1 番目の引数を 'class CWnd *' から 'int' に変換できません。 この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。 とコンパイルエラーになってしまいます。 かなり初心者的な事だと思うのですが、教えて頂けないでしょうか。 DragAcceptFiles(GetDlgItem(IDC_LIST1));を省くとうまくいきました。 reinterpret_castについてよくわからないのですが DragAcceptFiles(reinterpret_cast<int>(GetDlgItem(IDC_LIST_FNANE))); とするとコンパイルはとおったのですが、reinterpret_castについてもご存じでしたらお願いします。 宜しくお願いします。

関連するQ&A

  • MFCを使わずファイルをドラッグアンドドロップ

    エクスプローラーなどからドラッグしてきたファイルのパス一覧を MFCを使わず取得したいのですが、 どうすればいいのでしょうか?

  • 【VBA Excel】ドラッグアンドドロップをしたい

    (A) ExcelのVBAのListBox(か、類似のVBA機能)を使用してファイル(.csvファイルのデータ)の一覧を作成し、ドラッグアンドドロップ/D&Dで元エクセルシートに落としたセルを起点とし、選択したファイル内のデータを展開するデータを作ろうとしています。その際に分からないことが2点あります。 (A1) 他のワードファイルにはドドロップが有効なのですが、元エクセルファイルにはなぜかカーソルが例の進入禁止マーク(?)化してドロップできません。どうすれば元エクセルファイルにデータをドロップ出来るようになるのでしょうか? (A2) さらに、ドロップした後のセル("A3"や"B6"とか)の求め方が分かりません。 Private Sub ListBox1_MouseMove(ByVal Button As Integer, _  ByVal Shift As Integer, _  ByVal x As Single, _  ByVal y As Single) でx,yが座標を示すことは分かるのですが、ここからセルに変換するすべはあるのでしょうか? (B) また、Aで詰まったときに考えたのですが、ListBoxを表示させる代わり、に別シートに件のファイル一覧を展開して元シートと別シートを並べて表示させ(Windows.Arrange xlArrangeStyleVerticalを使用)、別シートから元シートにファイル名をドラッグアンドドロップしたときに同じ処理をするのもありかな、と思いついたのですが… (B1) Workbookの中の"SheetBeforeDoubleClick"や"Workbook_BeforeSave"が出ているリストの中にドラッグアンドドロップを示すようなものがないのですが、当該の処理は出来ないのでしょうか? -------------------- 当方、Excel2007のVBAを使用しています。 長文になりましたが、AまたはBのどちらかが解決する必要があります。断片的な答えでも大歓迎です。お願いします!

  • ドラッグアンドドロップができない

    ドラッグアンドドロップができなくなりました。いつからかはわかりません。 ドラッグアンドドロップの代わりに右クリックでコピーしてから貼付けでコピー・ペーストはできます。しかしドラッグアンドドロップができません。 何が原因でこのようになってしまったのか解決できなくて困っています。

  • ドラッグアンドドロップができない

    今日からいきなりファイルのドラッグアンドドロップができなくなりました。 他の設定は何もいじっていないので原因がわかりません。 原因と対処がわかる方教えてください。

  • ドラッグアンドドロップ

    以前はファイルのドラッグアンドドロップができたのですが今は切り取り・貼り付けで処理しています。元に戻すにはどうすれば良いでしょうか。尚osはwin98です。宜しくお願いします。

  • ドラッグアンドドロップが出来ない

    数日前まで何気にドラッグアンドドロップで下書きした文章等を例えばFacebook等の投稿に使っていましたが、いきなり出来なくなりました。OSは「7」、Internet Explorerは「Version 10」です。コピーして貼り付ける事は可能ですが、ドラッグアンドドロップではドロップする際に黒い○に斜めの線が入り、落ちません。但し、試しにデスクトップ上に画像を一旦保存し、ドラックアンドドロップでゴミ箱へは移せますし、ハードディスク上でも、例えばドライヴCからDへの移動は出来ます。 スタートからプロパティ、カスタマイズと進み、「コンテキスト メニューと~」の「ドラックアンドドロップ」では、有効化するにチェックが入っています。 コントロールパネルから「マウス」へ、「クリックロックをオンにする」にはチェックは入っていません。 タスクバーから「タスクマネージャーの起動、というネット上で紹介されている方法も試しましたが、解決しませんでした。 マウスに不具合が有ると、線が引けないという情報も有ったので、Photosshop Elementsで線を引っ張ってみたり、「IMEパッド」で手書きもしてみましたが、問題なく線も引けます。 達人のお知恵拝借。

  • VBSを起動後にファイルをドラッグ&ドロップ

    [環境] Windows 7 お世話になります。 完全にお遊び程度の内容になりますが、 VBSでドラッグ&ドロップしたファイルのファイル名を取得するプログラムを 作成しているのですが、 検索してもそれらしき方法が見つからずヤキモキしています。 まだ起動していないVBSファイルに対してのドラッグ&ドロップする方法であれば 結構HITするのですが、そうではなく私がやろうとしているのは、 既に起動しているVBSのアプリにドラッグ&ドロップをしたファイル名を 取得したいのです。(ちなみに取得したいのはフルパス) 取得したファイル名はInputBoxか何かに表示する程度でいいのですが、 案外むずかしかったりするのでしょうか? ご回答よろしくお願いします。

  • アイコンにドラッグアンドドロップ

    VisualStudio 2005 で c++でダイアログベースのアプリケーションを作成しています。 ファイルをアイコンにドラッグアンドドロップして開くということをやりたいのですが、ファイルを開いたときにエラーが発生してしまいうまくいきません。対処方法を教えてください。 ソースファイル ::OnInitDialog(){ : : : : // TODO: 初期化をここに追加します。 DragAcceptFiles(); char *p = AfxGetApp()->m_lpCmdLine; CFile fin; if(p[0]!=NULL){ AfxMessageBox(p); fin.Open(FileName, CFile::typeBinary | CFile::modeRead | CFile::modeNoTruncate); } AfxMessageBox(p)でドロップしたファイルのパスは表示できています。

  • バッチファイルでドラッグ&ドロップの情報を取得

    こんばんは bat ファイルを書いているのですが、次のような情報の取得仕方がわからず困っています。 bat ファイルを起動するには、あるファイルをドラッグアンドドロップします。 このとき、 set FilePath = ドロップされたファイルの、ドロップされる前にあったパス set FileName = ドロップされたファイルの拡張子を除くファイル名 set FileExt = ドロップされたファイルの拡張子部分 のように、それぞれの情報を変数に格納したいのですが、どのように書けばよいのでしょうか。 教えてください。

  • ドラッグ&ドロップについてです。(VB.NET)

    フォーム上に「PictureBox」コントロールを置いた状態で実行し、その「PictureBox」にデスクトップ等からファイルやフォルダをドラッグ、ドロップしまして、そのファイルやフォルダのパス名を取得するにはどうすればいいですか? そのプログラムのサンプルがあるサイトでもいいです。

専門家に質問してみよう