ダイアログベースのプログラムにドラッグアンドドロップしたい

ダイアログベースのプログラムにドラッグアンドドロップしたい

難しいドラッグアンドドロップ対応のプログラムも簡単にできます。
この例は、ドラッグアンドドロップすると、IDC_INFILEという名前のエディットボックスにファイル名を表示するもの。
作成するプログラムのファイル名を、[xxx]とする。

1.ダイアログのプロパティを開き、[拡張スタイル]タブをクリック。[ドラッグドロップ]を許可にチェックする。それがないと、後に記述する呪文(?)も意味がなくなる。
ちなみに、英語版VC++の場合は、[Extended Styles]タブの[Accept files]です。

2.xxx.cppに赤文字の箇所を追記する。例はxxxというファイル名とする。

BOOL CxxxApp::InitInstance()
{
—省略—
if (nResponse == IDOK)
{
m_pMainWnd -> DragAcceptFiles();←この位置でないと「閉じる(X)」を押された時にエラーとなる。
}
else if (nResponse == IDCANCEL)
{
}

return FALSE;
}

3.[View]メニューの[ClassWizard]を選択。[Class Info]タグをクリック。メッセージフィルター[Child Window]を選択。これを行わなければ、後述する[WM_DROPFILES]が表示されず選択できない。

4.[ClassWizard]の[メッセージマップ]タグをクリック。クラス名[CxxxDlg]を選択。[メッセージ]をスクロールすると、[WM_DROPFILES]があり、それをダブルクリック。

5.[ClassWizard]下の[メンバーファンクション]に[W OnDragFiles ON_WM_DROPFILES]と追加されることを確認し、そこをクリック。

6.[ClassWizard]の[EditCord]を押して、赤の部分のように書き変える。

void CxxxDlg::OnDropFiles(HDROP hDropInfo)
{

UINT uFiles = DragQueryFile(hDropInfo, (UINT)-1, NULL, 0);
for (UINT uId = 0;uId < uFiles; uId++){ TCHAR tszPath[MAX_PATH]; DragQueryFile(hDropInfo, uId, tszPath,sizeof(tszPath)); CEdit *e; e = (CEdit *)GetDlgItem(IDC_INFILE); e -> SetWindowText(tszPath);
}

CDialog::OnDropFiles(hDropInfo);
}