您的位置:首页 > 其它

MFC实现拖拽文件

2013-04-17 10:39 309 查看






Dragging Files

Dragging Files can be supported relatively easily as follows

* Add a OnDropFiles(HDROP hDropInfo) handler to your Dialog. You'll probably have to add this manually, as ClassWizard doesn't seen to support the WM_DROPFILES message for dialogs.

Make the following changes

1) In your .h file add the OnDropFiles to the AFX_MSG section

// Generated message map functions

//{{AFX_MSG(A2hDialog)

...

afx_msg void OnDropFiles(HDROP hDropInfo);

...

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

2) In your .cpp file add the ON_WM_DROPFILES() handler to the AFX_MSG_MAP section

BEGIN_MESSAGE_MAP(MyDialog, CDialog)

//{{AFX_MSG_MAP(MyDialog)

...

ON_WM_DROPFILES()

...

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

Strangely, after doing (1) and (2) the results become visible in the ClassWizard.

3)

Use ClassWizard to add an OnCreate() handler to your dialog. in this add the call

this->DragAcceptFiles(TRUE);

This enables Drag and drop of files on your Dialog's window. You can check this by dragging files over your Window. If the cursor is a "no entry" sign (circle with a line through it) it's not working. If the cursor changes to a file/folder icon with a "+" on it, you're in business.

4) Manually add the OnDropFiles method to look something as follows :-

void MyDialog::OnDropFiles(HDROP hDropInfo)

{

HDROP m_hDropInfo = hDropInfo;

CString Filename;

if (m_hDropInfo) {

int iFiles = DragQueryFile(m_hDropInfo, (UINT)-1, NULL, 0);

for (int i=0; i<ifiles; i++) {

char* pFilename = Filename.GetBuffer(_MAX_PATH);

DragQueryFile(m_hDropInfo, i, pFilename, _MAX_PATH);

// do whatever...

} // for each files...

} // if DropInfo

DragFinish(m_hDropInfo);

m_hDropInfo = 0;

} // End of OnDropFiles
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: