[转]使MFC支持拖放文件的方法

    技术2022-05-19  19

     

    原文地址:http://blog.163.com/huangbingliang@yeah/blog/static/94161399201041092339499/

    在目标dialog关联的类的.h里添加

    //注意控件和对话框属性都不要选Accept Files

    afx_msg void OnDropFiles(HDROP hDropInfo);

    void PreSubclassWindow() ;

    相应的.cpp里添加

     BEGIN_MESSAGE_MAP(Unrar, CDialog) ON_WM_DROPFILES()//这句话很重要 END_MESSAGE_MAP() void Unrar::PreSubclassWindow() {   DragAcceptFiles( TRUE );  CWnd::PreSubclassWindow(); } void Unrar::OnDropFiles(HDROP hDropInfo){ this->UpdateData(TRUE); CRect rEdit; m_edit1.GetWindowRect(rEdit);//获得控件的坐标 POINT pos; ::GetCursorPos(&pos); //获得光标当前的屏幕坐标 //如果光标在edit控件中,则显示拖动的文件名,进行响应操作;否则就什么都不作 TCHAR cFileName[256]; UINT uFileCount, u; uFileCount = ::DragQueryFile(hDropInfo, -1, cFileName, sizeof(cFileName)); //拖拉的文件个数 if((pos.x > rEdit.left) && (pos.x < rEdit.right) && (pos.y < rEdit.bottom) && (pos.y > rEdit.top)) { for(u = 0; u < uFileCount; u++){ ::DragQueryFile(hDropInfo, u, cFileName, sizeof(cFileName)); //取得每个文件的文件名 m_edit1.SetWindowText(cFileName); //如果指针在edit1里的话那么就把路径在edit1里显示 } ::DragFinish(hDropInfo); } else{ for(u = 0; u < uFileCount; u++) { ::DragQueryFile(hDropInfo, u, cFileName, sizeof(cFileName)); //取得每个文件的文件名 m_edit2.SetWindowText(cFileName); 如果指针不在edit1里的话那么就把路径在edit2里显示 } ::DragFinish(hDropInfo); } } 

     


    最新回复(0)