• ベストアンサー

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

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

専門家に質問してみよう