拡張CEditはファイルのドラッグを実現します.
ずいぶん前に、テストの例を書くとき、パスを書いて死んでしまいましたが、今は馬鹿な感じがします.
今、私は少なくとも3つの方法を考えることができます.
1.CEdit GetWindowText(手動コピーパス)
2.SHBrowseForFolder(ユーザーに閲覧させる)
3.ファイルドラッグのサポート(ユーザーが編集ボックスにファイルをドラッグしてファイルパスを取得)
今日は3つ目の方法を紹介します.
1.リソースファイルでAccept Filesをtrueに設定します.
2.拡張CEdit、OnDropFilesに応答
3.拡張CDropFileEditで変数を定義し、リソースのEditに関連付けます.
具体的にはリソースのコードを見てください.rar
4.ドラッグをサポートするのも欠陥があり、管理者権限で実行しているのに、ドラッグをサポートしていないので、倒れてしまいました.
今、私は少なくとも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.ドラッグをサポートするのも欠陥があり、管理者権限で実行しているのに、ドラッグをサポートしていないので、倒れてしまいました.