从程序外面,托动一个文件到应用程序界面,如何得到这个文件的路径并且激发一个处理消息?另外,已经知道一个大字符串,现在要统计里面某一个字母的个数,如何统计?如果用While循环的话,要1分种,不现实,有没有什么速度快一点的方法?谢谢

解决方案 »

  1.   

    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?
      

  2.   

    在窗口中响应 WM_DROPFILES 消息
      

  3.   

    拖文件:
    先给窗口设置WS_EX_ACCEPTFILES风格,然后处理 WM_DROPFILES 消息
      

  4.   

    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
      

  5.   

    一个Log文件,大约10M,现在要统计里面某一个类别Log的数量,LogKey是有的,不过,太多,Find 循环统计,要很长时间
    我记得Ultraedit里面,有这个功能,一下子就统计出来了,不知道如何实现的
      

  6.   

    关于拖动可以看我的blog.
    速度快主要是要优化算法,使用映射文件可能会好一点.