ダイアログでのドロップ処理

[戻る]
初心者@rumu 2002/11/02(土) 23:46:43
お世話になっています。

ダイアログにアイコンを表示(ドロップ許可済み)しているのですが、アイコンに落と
されたファイルをどこで処理すればいいのかわかりません。
 普通のウインドウでは、WM_DROPFILES 以下で処理すると思うのですが、ダイアログで
も同じでしょうか。ダイアログのプロシージャでWM_DROPFILES を設定して処理してみた
のですが、アイコン実行時にエラーになってしまいます。

よろしくご教授お願いします。

環境→WinXP
      VC++.NET
      SDK

mu 2002/11/03(日) 14:21:15
同じですねー
ただ、どんなエラーが出るのか、どんなソースを書いているのかなど
もう少し詳しい情報が分からないとアドバイスできません。

初心者@rumu 2002/11/03(日) 23:18:39
 以下のようにするとエラーはでなくなったのですが、メッセージボックスが
表示されません。

//ダイアログのプロシージャ
LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{    
    char  FileName[MAX_PATH+1]; // ドロップされたファイルの名前
    UINT  Count;   // ドロップされたファイルの数
    HDROP hDrop;    //ハンドル
    char FileName[MAX_PATH+1];   //パス    
    UINT Index = 0;
   
    switch (msg) 
   {
    case WM_DROPFILES:
       //ハンドルの取得
       hDrop  = (HDROP)wParam;
       if (wParam == IDC_STATIC)
       {
         //ドロップされたファイルの数を取得する
         Count = DragQueryFile( hDrop, 0xFFFFFFFF, NULL, 0 );             
            //ファイルの数だけループする
            for(Index; Index < Count; Index++ )
      {
       //ドロップされたファイルのフルパスを取得する
            DragQueryFile( hDrop, Index, FileName, MAX_PATH ); 
            //開放
            DragFinish( hDrop );                  
      MessageBox( hWnd,FileName,"パス", MB_OK );               
            }
        }                
           return 0;
     }
        return 0;
}

 同じような処理を普通のウインドウ(クライアント領域にファイルを落とす)でする
と、無事にメッセージボックスが表示されるのですが、ダイアログボックスでは表示
されません。とくにダイアログボックスでは、if文をもうけたのですが、これが原因で
しょうか?
 よろしくご教授お願いします。

2002/11/04(月) 06:43:44
あなたはデバッガーで動作試験をすることはしないのでしょうか?
case WM_DROPFLES: の下の
  hDrop = (HDROP)wParam; の行にブレークポイントを置けば
どのように動作しているか追いかけることはそんなに難しいことは
思えないのですけど

初心者@rumu 2002/11/05(火) 13:48:25
[[解決]]
if(Count = DragQueryFile( (HDROP)wParam, 0xFFFFFFFF, NULL, 0 ))に変更
ダイアログ D&D許可
IDC_STATIC D&D不許可
こんなんで解決

古いスレッドには追加発言できません。