2007-10-4星期四
当前支持对话框范围的拖放,下一步改进目标,将拖放定位在一个CEdit上
Step 1:
BEGIN_MESSAGE_MAP(CWISH_ENCRYPT_FOLDERDlg, CDialog)
ON_WM_DROPFILES()
END_MESSAGE_MAP()
Step 2:
class CWISH_ENCRYPT_FOLDERApp : public CWinApp
Step 2:
class CWISH_ENCRYPT_FOLDERApp : public CWinApp
{
public:
CWISH_ENCRYPT_FOLDERApp();
// 重写
public:
virtual BOOL InitInstance();
// 实现
afx_msg void OnDropFiles(HDROP hDropInfo);
DECLARE_MESSAGE_MAP()
};
Step 3:
BOOL CWISH_ENCRYPT_FOLDERDlg::OnInitDialog()
Step 3:
BOOL CWISH_ENCRYPT_FOLDERDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CWnd::DragAcceptFiles();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
return TRUE; // 除非设置了控件的焦点,否则返回 TRUE
}
Step 4:
//文件拖放并在编辑框显示拖放文件路径
Step 4:
//文件拖放并在编辑框显示拖放文件路径
void CWISH_ENCRYPT_FOLDERDlg::OnDropFiles(HDROP hDropInfo)
{
char *lpszFileName=new char[512], cFileCount[10];
int nFileCount, i;
nFileCount=::DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 512);
//::AfxMessageBox(itoa(nFileCount,cFileCount,10));
//for (i=0; i<nFileCount; i++)
//{
if(nFileCount == 1)
{
i = 0;
UINT nChars=::DragQueryFile(hDropInfo, i, &lpszFileName[0], 512);
CString str(&lpszFileName[0], nChars);
m_editPath.SetWindowText(str);
}
else
{
::AfxMessageBox("拖放文件的数量不能多于1个!",MB_OK,0);
}
//}
::DragFinish(hDropInfo); //释放内存
i=0;
delete []lpszFileName;
// CDialog::OnDropFiles(hDropInfo); 此语句注释掉
}