使MFC支持拖放文件的方法

在目標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 CLogAnalyseToolDlg::OnDropFiles(HDROP hDropInfo)
{
	this->UpdateData(TRUE);
	CRect rEdit;   
	m_editLogFilePath.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_editLogFilePath.SetWindowText(cFileName); // 如果指針在edit1裏的話那麼就把路徑在edit1裏顯示
			m_logFilePath = cFileName;
		}   
		::DragFinish(hDropInfo);   
	} 
	else{
		for(u = 0; u < uFileCount; u++){   
			::DragQueryFile(hDropInfo, u, cFileName, sizeof(cFileName)); // 取得每個文件的文件名   
			//m_edit2.SetWindowText(cFileName); // 如果指針不在edit1裏的話那麼就把路徑在edit2裏顯示
		}   
		::DragFinish(hDropInfo);   
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章