日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

再谈用MFC实现文件拖放到编辑框

發(fā)布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 再谈用MFC实现文件拖放到编辑框 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
前不久,看了南京海軍指揮學(xué)院黃向明同學(xué)發(fā)表的“ 用MFC實現(xiàn)文件拖放到編輯框”一文后,對其最后提出的問題很感興趣,我就查了一下vc的msdn幫助,發(fā)現(xiàn)DragAcceptFiles()也是CWnd類的成員函數(shù),既然如此,想來只要是CWnd類的派生類,就應(yīng)該可以用DragAcceptFiles()函數(shù)來向windows文件管理器注冊自己成為被拖動文件的接受者,也就是說可以響應(yīng)消息WM_DROPFILES,于是我就用appwizard生成一個基于SDI的工程文件Drag,并且添加了一個對話框 CDragDialog,然后我就用classwizard查看是否CWnd派生類比如CMainFrame,CDragView, CDragDialog是否都有WM_DROPFILES消息,結(jié)果就CDragDialog類沒有,但是在對dialog 的Extended Style進(jìn)行設(shè)置時,明明看見有accept file選項,這越發(fā)使我感到奇怪,怎么也想不通這到底是怎么回事?后來我就沒再想下去,既然不能用classwizard 添加對WM_DROPFILES消息的響應(yīng),何不用手工添加試試?手工添加完以后,然后編譯、調(diào)試、運(yùn)行,居然沒出一點(diǎn)問題。程序雖然寫出來了,但其原因我還是沒明確。

---- 黃向明同學(xué)分別講解了基于CFormView和dialog的實現(xiàn),下面我簡單介紹一下基于cview的實現(xiàn),以及基于dialog的另一種實現(xiàn),為了便于演示程序運(yùn)行結(jié)果,程序中沒使用編輯框,而是listbox來接受被拖動的文件名,這樣也便于演示多個文件的拖動。

---- 一、文件拖放到cview中的listbox

---- 1、用MFC Appwizard創(chuàng)建一個基于SDI的新工程,命名為Drag,除第一步選擇第一項以外,其余全用默認(rèn)設(shè)置。

---- 2、DragView.h文件

CListBox m_View_List; ---- 3、DragView.cpp文件

---- 用classwizard添加WM_CREATE消息響應(yīng),然后在OnCreate函數(shù)中添加如下代碼:

DragAcceptFiles();//向file manager注冊自己, 使自己能接受droped file(s) CRectrect(0,0,100,80);m_View_List.Create (WS_VISIBLE|WS_VSCROLL,rect,this, IDC_VIEW_LIST);//創(chuàng)建listbox ---- 4、Resource.h

---- 修改Resource.h文件,為listbox的ID(IDC_VIEW_LIST)分配一個值

---- 例如:#define IDC_VIEW_LIST 1000

---- 5、DragView.cpp文件

---- 用classwizard添加WM_SIZE消息響應(yīng),然后在OnSize函數(shù)中添加如下代碼:

---- m_View_List.MoveWindow(0,0,cx,cy);//使listbox所占區(qū)域始終保持與客戶區(qū)一樣大

---- 6、DragView.cpp文件

---- 用classwizard添加WM_DROPFILES消息響應(yīng),然后在OnDropFiles函數(shù)中添加如下代碼:

void CDragView::OnDropFiles(HDROP hDropInfo) { int DropCount=DragQueryFile(hDropInfo,-1,NULL,0); //取得被拖動文件的數(shù)目for(int i=0;i< DropCount;i++){ int NameSize=DragQueryFile(hDropInfo,i,NULL,0); //取得第i個拖動文件名所占字節(jié)數(shù)HANDLE hHeap=GetProcessHeap();char *pName=(LPSTR)HeapAlloc (hHeap,HEAP_ZERO_MEMORY, NameSize++);//根據(jù)字節(jié)數(shù)分配緩沖區(qū)if (pName==NULL) {MessageBox("給文件名分配暫存空間時出錯!", "錯誤信息",MB_ICONERROR);return;}DragQueryFile(hDropInfo,i,pName,NameSize); //把文件名拷貝到緩沖區(qū)m_View_List.AddString(pName); //文件名加入listbox中顯示HeapFree(hHeap,HEAP_ZERO_MEMORY,pName); //釋放緩沖區(qū)} CView::OnDropFiles(hDropInfo);} ---- 到此就完成了文件拖放到view中的listbox,你可以編譯、運(yùn)行了。

---- 二、文件拖放到對話框中的listbox

---- 1、在上邊生成的Drag工程成添加一個對話框,ID為IDD_DRAG_DIALOG,并生成一個新類CDragDialog,在Extend Style中選中Accept File 選項。

---- 2、在對話框中添加一個listbox控件,ID為IDC_DIALOG_LIST,去掉sort style。

---- 3、手工添加WM_DROPFILES消息響應(yīng),這與自定義消息差不多,但更簡單,因為這里不需要

---- 你定義WM_DROPFILES;

---- (1)在DragDialog.h文件聲明消息處理函數(shù):

afx_msg void OnDropFiles(HDROP hDropInfo); ---- (2)其次在DragDialog.cpp的消息映射中指出消息處理入口: ON_MESSAGE(WM_DROPFILES,OnDropFiles) (也可以為宏ON_WM_DROPFILES()); ---- (3)最后定義消息處理函數(shù),這與在cview中第6步差不多: void CDragDialog::OnDropFiles(HDROP hDropInfo) {int DropCount=DragQueryFile(hDropInfo,-1,NULL,0); //取得被拖動文件的數(shù)目for(int i=0;i< DropCount;i++){int NameSize=DragQueryFile(hDropInfo,i,NULL,0); //取得第i個拖動文件名所占字節(jié)數(shù)HANDLE hHeap=GetProcessHeap();char *pName=(LPSTR)HeapAlloc(hHeap,HEAP_ZERO_MEMORY, NameSize++);//根據(jù)字節(jié)數(shù)分配緩沖區(qū)if (pName==NULL) {MessageBox("給文件名分配暫存空間時出錯!", "錯誤信息",MB_ICONERROR);return;}DragQueryFile(hDropInfo,i,pName,NameSize); //把文件名拷貝到緩沖區(qū)m_Dialog_List.AddString(pName); //文件名加入listbox中顯示HeapFree(hHeap,HEAP_ZERO_MEMORY,pName); //釋放緩沖區(qū)}CDialog::OnDropFiles(hDropInfo);} ---- 4、從資源中修改menu,添加一個菜單“測試”,以彈出我們剛才添加的對話框,菜單ID為ID_DRAG_TEST;

---- 5、在MainFrm.cpp中加入對話框頭文件,并用classwizard添加ID_DRAG_TEST的響應(yīng)函數(shù);

#include "DragDialog.h"......void CMainFrame::OnDragTest() {CDragDialog dlg;dlg.DoModal();}

總結(jié)

以上是生活随笔為你收集整理的再谈用MFC实现文件拖放到编辑框的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩成人午夜 | 久久精品视频一区二区 | 国产不卡在线观看视频 | 成人福利在线看 | 操大爷影院 | 97视频入口 | 色综合久久久无码中文字幕波多 | 国产91在线 | 亚洲 | 久久成人免费视频 | 男女互插视频 | 自拍偷拍第2页 | av成人免费 | 老熟妻内射精品一区 | 美女免费黄色 | 日韩精品一区二区三区在线播放 | 亚洲va韩国va欧美va | 久久网一区二区 | 国产精品成人免费视频 | 熟女性饥渴一区二区三区 | 朝桐光av在线| 91蜜桃臀久久一区二区 | 精品自拍视频在线观看 | 91精品婷婷国产综合久久 | 欧美一区二区三区不卡视频 | 亚洲中文字幕无码专区 | 色欲久久久天天天精品综合网 | 亚洲欧美日韩综合一区二区 | 日韩3区 | 天堂一区二区三区 | 黄瓜视频91 | 天天爽夜夜爽人人爽 | 国际av在线 | 在线视频麻豆 | 爱福利视频广场 | 国产精品香蕉在线观看 | 国产日本精品视频 | 狠狠干影院 | 激情 亚洲 | a久久久久久 | 91国产视频在线观看 | jizz免费| 91看片成人| 国产男女猛烈无遮挡免费视频 | 日韩精品毛片 | 青青草免费在线视频 | 日韩字幕 | 在线色播 | 日本爽爽爽爽爽爽在线观看免 | 亚洲熟乱 | 久久久久久久久精 | 福利视频精品 | 亚洲一区中文字幕在线 | 亚洲精品天堂成人片av在线播放 | 精品人妻aV中文字幕乱码色欲 | 午夜精品久久久久久毛片 | 天天插美女 | 久久久性色精品国产免费观看 | 亚洲啪 | 免费看黄网站在线观看 | 福利片在线播放 | 91精选国产 | 国产精品成人无码 | 亚洲精品免费视频 | 欧美一级免费视频 | 凹凸精品熟女在线观看 | 亚洲一级av无码毛片精品 | 好吊视频一区二区三区四区 | 国产一区自拍视频 | 91高清在线| www四虎com| 秋霞亚洲 | 日韩射吧 | 99精品视频在线播放免费 | 少妇熟女一区二区 | 成人午夜在线视频 | 中文字幕在线2019 | 小早川怜子一区二区三区 | 亚洲最新在线 | 日本黄色三级视频 | 欧美成人播放 | 九九色九九 | 亚洲激情偷拍 | 又黄又高潮的视频 | 国产激情一区二区三区 | 九色91av| 五十路妻| 午夜天堂精品久久久久 | 熊出没之冬日乐翻天免费高清观看 | 中日韩在线观看 | jizz性欧美2| 午夜在线观看视频网站 | 欧美激情精品久久 | 国产老妇视频 | 日韩欧美在线视频观看 | 久久二| www.777奇米影视| 福利社av| 一级啪啪片 | 亚洲激情视频在线 |