VC下在對話框上實現接受文件拖放 (Drop files)

大部分Windows應用工具程序都能響應接受文件拖放,比如Word,Notepad等

當把文件直接拖拽到該窗體或者是某個控件下,應用程序會直接打開這個文件,這樣將極大的方便客戶使用

本文就是介紹這個的實現,跟以前一樣,不看到代碼一定會很不爽:

1. 首先先將您的CDialog設置爲Accept files,通過代碼或者選項點擊都可以實現

2. 添加函數聲明和消息映射

href="http://www.j2megame.org/wupei/plugins/plogeshi/styles/plogeshi.css" type="text/css" rel="stylesheet" />

 

  1. //添加事件聲明(儘量寫在"AFX_MSG"宏外面.我記得寫在裏面會出現錯誤)
  2. afx_msg void OnDropFiles( HDROP hDropInfo );
  3.  
  4. //添加消息映射(儘量寫在"AFX_MSG_MAP"宏外面.我記得寫在裏面會出現錯誤)
  5. ON_WM_DROPFILES()

 

3. 下一步就是函數的實現

 

  1. //實現(WINDOWS系統是支持多個文件同時拖放的)
  2. void CMyDlg::OnDropFiles( HDROP hDropInfo )
  3. {
  4.         UINT cFiles = ::DragQueryFile( hDropInfo, 0xffffffff, 0, 0);    //取得文件數
  5.         CString szText;
  6.         char szFile[MAX_PATH];
  7.  
  8.         for( UINT count = 0; count < cFiles; count++ )
  9.         {
  10.                 if(cFiles>0)
  11.                 {
  12.                         ::DragQueryFile(hDropInfo, count, szFile, sizeof(szFile));
  13.                         szText += szFile;       //絕對路徑+文件名存於szFile
  14.                         szText += "/r/n";       //取所有的文件到szText中,一行一個
  15.                        
  16.                         //break;   //只取得第一個文件
  17.                 }
  18.         }
  19.        
  20.         //相應操作
  21. }

 

ps: 現在這個實現只實現Dialog的拖放操作,未能實現特定控件的拖放操作,但是理論上是可以用這個實現的,因爲一般都是CWnd的子類(有些控件不是),那就請讀者自己實現一把了

 
發佈了10 篇原創文章 · 獲贊 2 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章