步骤如下:
1.
“去掉”edit控件的AcceptFile属性(false),然后在CMyDlg::OnInitDialog()中代码中添加:
CWnd::DragAcceptFiles()
这样你的主程序就可以在文件拖动到主对话框时响应WM_DROPFILES消息。
2. 在BEGIN_MESSAGE_MAP(CMuyDlg,CDialog)和END_MESSAGE_MAP()命令宏中间添加:
ON_WM_DROPFILES()
在对话框头文件.h中添加 :
afx_msg void OnDropFiles(HDROP hDropInfo)
然后在CPP中文件定义函数体
void CMyDlg::OnDropFiles(HDROP hDropInfo)
这样你就完成了最基本的消息映射。
3. 在CMyDlg::OnDropFiles添加如下实现代码:
void CMyDlg::OnDropFiles(HDROP hDropInfo)
{ //可以接受文件的拖曳
CRect rEdit;
GetWindowRect(&rEdit); //获得edit控件的屏幕坐标
POINT pos;
::GetCursorPos(&pos); //获得光标当前的屏幕坐标
{ //可以接受文件的拖曳
CRect rEdit;
GetWindowRect(&rEdit); //获得edit控件的屏幕坐标
POINT pos;
::GetCursorPos(&pos); //获得光标当前的屏幕坐标
//如果光标在edit控件中,则显示拖动的文件名,进行响应操作;否则就什么都不作
if((pos.x>rEdit.left) && (pos.x<rEdit.right) && (pos.y<rEdit.bottom) && (pos.y>rEdit.top))
{
TCHAR cFileName[256];
UINT uFileCount, u;
uFileCount = ::DragQueryFile(hDropInfo,-1,cFileName,sizeof(cFileName)); //拖拉的文件个数
for(u=0; u<uFileCount; u++)
{
::DragQueryFile(hDropInfo, u, cFileName, sizeof(cFileName)); //取得每个文件的文件名
//-----这儿写你的处理代码------//
SetWindowText(cFileName);
//------你自己的处理代码-------//
}
::DragFinish(hDropInfo);
if((pos.x>rEdit.left) && (pos.x<rEdit.right) && (pos.y<rEdit.bottom) && (pos.y>rEdit.top))
{
TCHAR cFileName[256];
UINT uFileCount, u;
uFileCount = ::DragQueryFile(hDropInfo,-1,cFileName,sizeof(cFileName)); //拖拉的文件个数
for(u=0; u<uFileCount; u++)
{
::DragQueryFile(hDropInfo, u, cFileName, sizeof(cFileName)); //取得每个文件的文件名
//-----这儿写你的处理代码------//
SetWindowText(cFileName);
//------你自己的处理代码-------//
}
::DragFinish(hDropInfo);
m_csFilePathName = cFileName; //把得到的文件名显示在控件里
}
UpdateData(FALSE);
}
}
UpdateData(FALSE);
}
4. 搞定。
/
//
RichEditCtrl控件内容的清空:
m_cRichEditCtrl.SetSel(0L,-1L); //每次都清空RichEditCtrl控件中的内容
m_cRichEditCtrl.ReplaceSel(NULL);
m_cRichEditCtrl.ReplaceSel(NULL);
MFC使按钮可用:
GetDlgItem(IDC_COMBO1)->EnableWindow(TRUE/FALSE);