拡張CEditはファイルのドラッグを実現します.


ずいぶん前に、テストの例を書くとき、パスを書いて死んでしまいましたが、今は馬鹿な感じがします.
今、私は少なくとも3つの方法を考えることができます.
      1.CEdit GetWindowText(手動コピーパス)
      2.SHBrowseForFolder(ユーザーに閲覧させる)
      3.ファイルドラッグのサポート(ユーザーが編集ボックスにファイルをドラッグしてファイルパスを取得)
今日は3つ目の方法を紹介します.
     1.リソースファイルでAccept Filesをtrueに設定します.
     2.拡張CEdit、OnDropFilesに応答
// XX.h
	afx_msg void OnDropFiles( HDROP hDropInfo); //  

// .cpp
BEGIN_MESSAGE_MAP(CDropFileEdit, CEdit)
  ON_WM_DROPFILES()   
END_MESSAGE_MAP()

void CDropFileEdit::OnDropFiles( HDROP hDropInfo)
{
	// TODO: Add your message handler code here and/or call default
	//      
	int DropCount=DragQueryFile(hDropInfo,-1,NULL,0);
	for ( int i=0;i<DropCount;i++)
	{

		int NameSize=DragQueryFile(hDropInfo,i,NULL,0);
		HANDLE hHeap=GetProcessHeap();

		char *pName=( LPSTR )HeapAlloc(hHeap,HEAP_ZERO_MEMORY,NameSize++);
		if (pName==NULL)
		{
			MessageBox( " !" , " " ,MB_ICONERROR);
			return ;
		}
		// i 
		DragQueryFile(hDropInfo,i,pName,NameSize);
		// 
		//   m_Dialog_List.AddString(pName);
		// listbox 
		this ->SetWindowText(pName);
		HeapFree(hHeap,HEAP_ZERO_MEMORY,pName);
		// 
	}
	CEdit::OnDropFiles(hDropInfo);
} 

3.拡張CDropFileEditで変数を定義し、リソースのEditに関連付けます.
具体的にはリソースのコードを見てください.rar
4.ドラッグをサポートするのも欠陥があり、管理者権限で実行しているのに、ドラッグをサポートしていないので、倒れてしまいました.