1.An application that calls DragAcceptFiles with the fAccept parameter set to TRUE has identified itself as able to process the WM_DROPFILES message from File Manager. 在窗口创建时调用DragAcceptFiles(TRUE);然后程序处理WM_DROPFILE消息 2.循环要一秒钟,什么字符串这么大?CString.Find?
Dragging FilesDragging 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 changes1) 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
在窗口创建时调用DragAcceptFiles(TRUE);然后程序处理WM_DROPFILE消息
2.循环要一秒钟,什么字符串这么大?CString.Find?
先给窗口设置WS_EX_ACCEPTFILES风格,然后处理 WM_DROPFILES 消息
//{{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
我记得Ultraedit里面,有这个功能,一下子就统计出来了,不知道如何实现的
速度快主要是要优化算法,使用映射文件可能会好一点.