用MFC實現(xiàn)文件拖放到編輯框_第1頁
用MFC實現(xiàn)文件拖放到編輯框_第2頁
用MFC實現(xiàn)文件拖放到編輯框_第3頁
用MFC實現(xiàn)文件拖放到編輯框_第4頁
用MFC實現(xiàn)文件拖放到編輯框_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、用MFC實現(xiàn)文件拖放到編輯框 一、用CFormView實現(xiàn)的對話框如圖1是用CFormView實現(xiàn)的對話框,這是一個文檔-視圖結(jié)構(gòu)的應(yīng)用程序,它有一個主框架。(一)運行AppWizard產(chǎn)生名為Drag1的項目單擊Visual C+File菜單中的New命令,選擇Project選項中的MFC AppWizard(exe)圖標(biāo),鍵入Drag1作為項目名字。步驟1中選擇Single Document按鈕,步驟4中取消工具欄、打印等設(shè)置,步驟6中將基類CView改成CFormView,這一步是必須的,否則就做不到支持文件拖放功能。其余均采用默認(rèn)設(shè)置項。(二)我們不需要顯示菜單,因此,利用菜單編輯器將

2、全部菜單去掉。(三)利用對話框編輯器來修改IDD_DRAG1_FROM對話框,如圖1示樣式。(四)利用ClassWizard為CDrag1View類加入消息控制單擊View菜單中的ClassWizard命令,在MFC ClassWizard的Message框中選擇OnUpDate,并單擊Add Function按鈕。(五)類似第4步,利用ClassWizard為CMainFrame類加入OnDropFile函數(shù)。這一步就使程序具有了文件拖放功能。(六)編輯工程1、顯示文件名void CDrag1View:OnUpdate(CView* pSender, LPARAM lHint, CObjec

3、t* pHint)/ TODO: Add your specialized code here and/or call the base classCDragDoc *pDoc=GetDocument();SetDlgItemText(IDC_EDIT1,pDoc->GetPathName();2、實現(xiàn)拖放功能BOOL CDrag1App:InitInstance()/ Enable drag/drop openm_pMainWnd->DragAcceptFiles();return TRUE;好了,就這么簡單,你幾乎沒做什么代碼輸入工作程序就完成了??扇绻覀儸F(xiàn)在建立一個基于對話

4、框的應(yīng)用程序,由于沒有了主框架結(jié)構(gòu),這時要實現(xiàn)同樣的功能,上述方法是行不通的,只好自己來做了。二、基于對話框的應(yīng)用(一)建立基于對話框的應(yīng)用程序Drag2從File菜單選擇New對話,鍵入Drag2作為項目名并單擊OK。在第一步中選中Dialog Based單選按鈕,其它接受所有默認(rèn)選項。(二)利用對話框編輯器來修改IDD_DRAG2_GIALOG對話框,如圖2示樣式。注意,property中選"Accept Files"。(三)利用ClassWizard創(chuàng)建CDropEdit新類,然后再添加OnCreate、OnDropFiles函數(shù),并編輯如下:1、DropEdit.h

5、文件BOOL m_bUseDir;2、DropEdit.cpp文件#include <sys/types.h>#include <sys/stat.h>CDropEdit:CDropEdit()m_bUseDir=FALSE;int CDropEdit:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CEdit:OnCreate(lpCreateStruct) = -1)return -1;DragAcceptFiles(TRUE);return 0;void CDropEdit:OnDropFiles(HDROP dropInfo

6、)WORD wNumFilesDropped = DragQueryFile(dropInfo, -1, NULL, 0);CString firstFile=""for (WORD x = 0 ; x < wNumFilesDropped; x+) WORD wPathnameSize = DragQueryFile(dropInfo, x, NULL, 0);char * npszFile = (char *) LocalAlloc(LPTR, wPathnameSize += 1);if (npszFile = NULL) continue;DragQueryF

7、ile(dropInfo, x, npszFile, wPathnameSize);if (firstFile="")firstFile=npszFile;LocalFree(npszFile);DragFinish(dropInfo);CString expandedFile = ExpandShortcut(firstFile);if (expandedFile!="")firstFile=expandedFile;struct _stat buf;int result = _stat( firstFile, &buf );if( resul

8、t = 0 ) if (buf.st_mode & _S_IFDIR) = _S_IFDIR) if (m_bUseDir)SetWindowText(firstFile); else if (buf.st_mode & _S_IFREG) = _S_IFREG) if (!m_bUseDir)SetWindowText(firstFile);CString CDropEdit:ExpandShortcut(CString &inFile)CString outFile = ""ASSERT(inFile != _T("");IS

9、hellLink* psl;HRESULT hres;LPTSTR lpsz = inFile.GetBuffer(MAX_PATH);hres = :CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,IID_IShellLink, (LPVOID*) &psl);if (SUCCEEDED(hres)IPersistFile* ppf;hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*) &ppf);if (SUCCEEDED(hres)WOR

10、D wszMAX_PATH;:MultiByteToWideChar(CP_ACP, 0, lpsz, -1, wsz, MAX_PATH);hres = ppf->Load(wsz, STGM_READ);if (SUCCEEDED(hres) WIN32_FIND_DATA wfd;/ find the path from thatHRESULT hres = psl->GetPath(outFile.GetBuffer(MAX_PATH),MAX_PATH,&wfd,SLGP_UNCPRIORITY);outFile.ReleaseBuffer();ppf->Release();psl->Release();inFile.ReleaseBuffer();return outFile;(四)將#include <afxole.h>加到stdafx.h文件中(五)在CDrag2App的InitInstance中加入:CoInitialize(NULL);(六)在CDrag2App的ExitInstance中加入:CoUninitialize();(七)將#include "DropEdit.h"加入Drag2Dlg.h中(八)在CDrag2Dlg構(gòu)造函數(shù)中加入Cdro

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論