不就是Telepro或者WebZip吗?为什么需要做成课题.选题不当,不当!这样看:
首先模块化你的"可以得到该网页的HTML源文件,根据此文件进行该站点的深度爬行,找到底层文件,然后对得到的文件进行一系列的处理......"部分
然后把它当作线程体.
对话框接收到url之后,启动一个新线程,传递url给线程,执行上面的那部分线程体.

解决方案 »

  1.   

    msdn 中就有现成的例子,或着看看《程序员大本营》
      

  2.   

    void CMsaDaemonView::onStart_101d()
    {
    // 检查线程是否已经存在
    if(m_pThread101d!=NULL){ AfxMessageBox("101d线程已经启动...\r\n请先停止101d服务",MB_OK);
    return;
    }
    m_pThread101d=AfxBeginThread(func101d,(LPVOID)this);
    // 检查线程是否成功启动
    if(m_pThread101d==NULL)
    AfxMessageBox("101d线程启动失败...\r\n请咨询系统管理员或重新启动",MB_OK);
    else{
    CString lsStr,lsStrAdd;

    CConView* pEditView;
    CWinApp *app = AfxGetApp();
    CMainFrame* pframe = (CMainFrame*)app->m_pMainWnd;
    ASSERT(pframe);
    pEditView = pframe->m_pConView;
    CEdit& theEdit = pEditView->GetEditCtrl();
    theEdit.GetWindowText(lsStr); lsStrAdd.Format("\r\n\t\t101d线程启动成功...\r\n=======================================================================\r\n");
    lsStr+=lsStrAdd;
    theEdit.SetWindowText(lsStr);
    glPos=theEdit.GetLineCount();
    theEdit.LineScroll(glPos,0);
    if(giPocessingProc==0){
    pframe->m_pDoc=(CMsaDaemonDoc*)GetDocument();
    pframe->m_pDoc->SetTitle("Daemon running...");
    }
    giPocessingProc++;
    }
    }  //此乃启动线程!UINT func201d(LPVOID pParam)
    {
        你的深度搜索代码
    }//此乃线程函数int CMsaDaemonView::onStop_101d()
    {
    DWORD ThreadExitCode = 0;
    int count = 0;
    if(m_pThread101d!=NULL)
    {
    PostThreadMessage(m_pThread101d->m_nThreadID,MSG_EXITTHREAD,0L,0L);
    do{
    Sleep(100);
    GetExitCodeThread(m_pThread101d->m_hThread,&ThreadExitCode);
    count++;
    }while(ThreadExitCode == STILL_ACTIVE && count<50);
    CString lsStr,lsStrAdd;

    CConView* pEditView;
    CWinApp *app = AfxGetApp();
    CMainFrame* pframe = (CMainFrame*)app->m_pMainWnd;
    ASSERT(pframe);
    pEditView = pframe->m_pConView;
    CEdit& theEdit = pEditView->GetEditCtrl();

    if(ThreadExitCode!=STILL_ACTIVE)
    {
    m_pThread101d = NULL;
    AfxMessageBox("线程101d停止成功!");
    theEdit.GetWindowText(lsStr); lsStrAdd.Format("\r\n\t\t线程101d停止成功!\r\n===================================================================\r\n");
    lsStr+=lsStrAdd;
    theEdit.SetWindowText(lsStr);
    glPos=theEdit.GetLineCount();
    theEdit.LineScroll(glPos,0);
    giPocessingProc--;
    if(giPocessingProc==0){
    pframe->m_pDoc=(CMsaDaemonDoc*)GetDocument();
    pframe->m_pDoc->SetTitle("Daemon stopping...");
    }
    return 1;
    }
    else
    {
    AfxMessageBox("线程101d停止失败!");
    theEdit.GetWindowText(lsStr); lsStrAdd.Format("\r\n\t\t线程101d停止失败!\r\n");
    lsStr+=lsStrAdd;
    theEdit.SetWindowText(lsStr);
    glPos=theEdit.GetLineCount();
        theEdit.LineScroll(glPos,0);
    return 0;
    }
    }
    else
    {
    AfxMessageBox("线程101d并没有启动!");
    return 0;
    }
    } //此乃停止线程函数看看吧,比较容易明白的。