// /// Return pointer to this document or one of its child documents if the spcecified /// window parameter is a view associated with the document. /// \note Unlike 'HasFocus', this method allows you to distinguish whether the /// document with focus is a child document. // TDocument* TDocument::DocWithFocus(HWND hWnd) { TDocument* pdoc = 0; while ((pdoc = ChildDoc.Next(pdoc)) != 0) if (pdoc->DocWithFocus(hWnd)) return pdoc; return QueryViews(vnIsWindow, (long)hWnd) ? this : 0; }
// /// Calls TWindow::GetFocus() to determine the window with the focus. Searches the /// list of documents and returns the document that contains the view with the /// focus. Returns 0 if no document has a view with focus. // TDocument* TDocManager::GetCurrentDoc() { PRECONDITION(GetApplication()); PRECONDITION(GetApplication()->GetMainWindow()); HWND hWnd = GetApplication()->GetMainWindow()->GetCommandTarget(); TDocument* doc = 0; #if defined(OLD_DOCVIEW) // !BB This older implementation of GetCurrentDoc relies on the // !BB document's HasFocus method which does not allow 'GetCurrentDoc' // !BB to return child documents.... // !BB // !BB This obviously causes some problems (for example, closing a view // !BB associated with a child document closes the whole document and // !BB all their associated views!). // !BB // !BB However is there code that relies on this behaviour - Investigate // !BB if (hWnd && ::IsWindow(hWnd)) { while ((doc = DocList.Next(doc)) != 0 && !doc->HasFocus(hWnd)) ; } #else if (hWnd && ::IsWindow(hWnd)) { while ((doc = DocList.Next(doc)) != 0 ) { TDocument* childDoc = doc->DocWithFocus(hWnd); if (childDoc) { doc = childDoc; break; } } } #endif return doc; }