bool CMainFrame::MakeWave(const WAVEGEN_PARMS& Parms) { POSITION pos = theApp.GetFirstDocTemplatePosition(); CDocTemplate *pTpl = theApp.GetNextDocTemplate(pos); CWaveShopDoc *pDoc = DYNAMIC_DOWNCAST(CWaveShopDoc, pTpl->CreateNewDocument()); if (pDoc == NULL) return(FALSE); bool retc, canceled; { CProgressDlg ProgDlg; if (!ProgDlg.Create()) // create progress dialog AfxThrowResourceException(); ProgDlg.SetWindowText(LDS(IDS_MAIN_GENERATING_AUDIO)); retc = CWaveGenDlg::MakeWave(Parms, pDoc->m_Wave, &ProgDlg); canceled = ProgDlg.Canceled(); } // destroy progress dialog if (!retc) { // if generation failed if (!canceled) // if user canceled AfxMessageBox(IDS_MAIN_CANT_MAKE_WAVE); return(FALSE); } CDocument *pEmptyDoc = pTpl->OpenDocumentFile(NULL); // create new view if (pEmptyDoc == NULL || m_View == NULL) return(FALSE); CString title = pEmptyDoc->GetTitle(); pEmptyDoc->RemoveView(m_View); // remove empty document from view pDoc->SetTitle(title); // copy empty document's title to generated document pDoc->AddView(m_View); // add generated document to view m_View->OnInitialUpdate(); OnActivateView(m_View); // view is still linked to empty document's undo manager; must relink m_View->SetUndoManager(&pDoc->m_UndoMgr); // link view to undo manager pDoc->m_UndoMgr.SetRoot(m_View); // link undo manager to view return(TRUE); }
CProgressDlg * CProgressDlg::Instance() { static CProgressDlg dlg; if (!dlg.m_hWnd) { dlg.Create(IDD_PROGRESS_DLG); } return &dlg; }
bool CFindServersDlg::FindServersAddressRange() { UINT start, end; if (!GetIPAddrRange(m_RangeStart, m_RangeEnd, start, end)) { AfxMessageBox(IDS_FSRV_BAD_IP_RANGE); return(FALSE); } if (!m_Done.Create(NULL, FALSE, FALSE, NULL)) return(FALSE); m_Kill = FALSE; AfxBeginThread(RcvThread, this); bool retc = TRUE; try { CProgressDlg dlg; dlg.Create(); dlg.SetRange(start, end); dlg.SetWindowText(LDS(IDS_FSRV_PROGRESS_CAP)); for (UINT i = start; i <= end; i++) { dlg.SetPos(i); if (!IsBroadcastAddr(i)) { // exclude broadcast address SOCKADDR_IN addr; addr.sin_family = AF_INET; addr.sin_port = htons(m_PortNumber); addr.sin_addr.s_addr = ntohl(i); m_Finder->RequestReply(addr); // request reply } if (dlg.Canceled()) { retc = FALSE; break; } } CWaitCursor wc; if (retc) Sleep(1000); // give last replies a chance to come in m_Kill = TRUE; WaitForSingleObject(m_Done, INFINITE); } catch (const WError& e) { CString msg(e.what()); AfxMessageBox(msg); return(FALSE); } return(retc); }