dポイントプレゼントキャンペーン実施中!

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

A 回答 (3件)

下の回答はウソです。


『DragAcceptFiles(GetDlgItem(IDC_LISTXX));』
  ↓
『GetDlgItem(IDC_LISTXX)->DragAcceptFiles();』

です。思い切りウソでした。リストボックスに対しての
初期化処理でした。しかもよく見ると解決策自体がウソ
でした。もう一度笑ってさらに水に流してやって下さい。
失礼しました。

初期化処理を省いても上手くいく、、、そういうことも
あったりしますが、MS社さんが規定しているので
やはり初期化処理は入れといた方が良いかと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/07/07 22:57

『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)にキャストしていることになります。
コンパイラは論理性よりも機械的な解決方法を示して
いたのだと思います。

~~
ひょっとすっと、そういう問題起こるかなとちょっと
思ってました。確信犯でした。笑って水に流してやって
下さい。。。
    • good
    • 0

リソースエディタでリストボックスの[ドラッグアンドドロ


ップを許可]をチェックして、親ウィンドウに以下を書く。

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
    • good
    • 0
この回答へのお礼

お答え頂きありがとうございます。
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についてもご存じでしたらお願いします。
宜しくお願いします。

お礼日時:2002/07/07 16:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!