void CMDIClient::ClosePage(CTabItem *pItem) { ATLASSERT(pItem); if (pItem->m_pCategory->GetWebData()->IsNoClose()) return; if (m_TabCtrl.GetTabItems().size() == 1) { // 只剩一个,则关闭category CloseCategory(pItem->m_pCategory); return; } CTabItem *pNewItem = FS()->TabItem(); if (pItem == pNewItem) { pNewItem = m_TabCtrl.GetLeftOrRight(pItem, true, false); ActivePage(pNewItem); } pItem->m_pCategory->m_TabItems.erase(pItem->m_pCategory->m_TabItems.begin() + pItem->GetIndex()); pItem->m_pCategory->Redraw(); m_TabCtrl.DeleteItem(pItem->GetIndex()); bool isTrueClose = true; if(isIE6 && wcscmp(pItem->m_pCategory->GetWebData()->GetName() , L"支付宝") == 0) isTrueClose = false; if(isIE6 && pItem->m_pCategory->m_ShowInfo == L"支付宝") isTrueClose = false; pItem->GetChildFrame()->OptionalDestroy(0, isTrueClose); }
void CMDIClient::ActiveCategory(CCategoryItem *pCateItem) { if( !m_bSafe ) return ; if (m_CateCtrl.GetCurrentSelection() != pCateItem) { m_TabCtrl.DeleteAllItems(); for (size_t i = 0; i < pCateItem->m_TabItems.size(); i++) m_TabCtrl.InsertItem(i, pCateItem->m_TabItems[i]); m_CateCtrl.SelectItem(pCateItem); if (pCateItem->m_pSelectedItem) ActivePage(pCateItem->m_pSelectedItem); else if (!pCateItem->m_TabItems.empty()) ActivePage(pCateItem->m_TabItems[0]); FS()->MainFrame()->RecalcClientSize(-1, -1); } }
LRESULT CMDIClient::OnGetExistWebPage(UINT /* uMsg */, WPARAM wParam, LPARAM lParam) { if( !m_bSafe ) return NULL; CreateNewWebPageData *pNewPage = (CreateNewWebPageData*)lParam; if (pNewPage->lpszURL != URL_NO_NAVIGATE || pNewPage->dwSize == 0) return NULL; std::tstring strURL = (LPCTSTR)((BYTE*)pNewPage + sizeof(CreateNewWebPageData)); HWND hReturnChildFrame = NULL; CCategoryItem *pCate = NULL; if(pNewPage->bGetBill == false) pCate = m_CateCtrl.FindExistItem(strURL.c_str()); else { pCate = m_CateCtrl.FindExistItem(strURL.c_str() , 1); if(pCate != NULL) { CTabItem* pTabItem = pCate->m_TabItems[0]; return (LRESULT)pTabItem->GetChildFrame()->m_hWnd; } } if (pCate == NULL) return NULL; for (size_t i = 0; i < pCate->m_TabItems.size(); ++i) { CTabItem* pTabItem = pCate->m_TabItems[i]; if (_tcsicmp(pTabItem->GetURLText(), strURL.c_str()) == 0) { ActivePage(pTabItem); return (LRESULT)pTabItem->GetChildFrame()->m_hWnd; } } return NULL; }
LRESULT CPageContainerWnd::OnActivePage(WPARAM wParam, LPARAM lParam) { TRACE("激活页面%d\n", wParam); int nPageIndex = wParam; int size = m_vPages.size(); // 前一个页面休眠 InactivePage(); if (m_vPages[nPageIndex].m_pPageWnd == NULL) { OpenPage(nPageIndex); } else { ActivePage(nPageIndex); } return 0; }
// 创建一个新的页面标签页 LRESULT CMDIClient::OnCreateNewWebPage(UINT /* uMsg */, WPARAM wParam, LPARAM lParam) { if( !m_bSafe ) return NULL; #ifndef SINGLE_PROCESS CBankLoader::GetInstance()->Safeguard(); #endif CRecordProgram::GetInstance()->RecordDebugInfo(MY_PRO_NAME, MY_COMMON_PROCESS, L"创建新的页面"); CreateNewWebPageData *pNewPage = (CreateNewWebPageData*)lParam; std::tstring strURL = _T("about:blank"); std::tstring strAdditionalInfo; if (IS_VALID_URL(pNewPage->lpszURL)) { if (pNewPage->dwSize > 0) // >0表示url的指针只是一个flag,不是真实地址,需要转换 strURL = (LPCTSTR)((BYTE*)pNewPage + sizeof(CreateNewWebPageData)); else strURL = pNewPage->lpszURL; } else if (pNewPage->lpszURL == URL_NO_NAVIGATE) // 点击链接打开新页面,此时不去navigate url,只是显示出来 { if (pNewPage->dwSize > 0) strURL = (LPCTSTR)((BYTE*)pNewPage + sizeof(CreateNewWebPageData)); else strURL = _T(" "); } else if (pNewPage->lpszURL == URL_WITH_REFERER) strURL = (LPCTSTR)((BYTE*)pNewPage + sizeof(CreateNewWebPageData)); else if (pNewPage->lpszURL == URL_WITH_POSTDATA) { strURL = (LPCTSTR)((BYTE*)pNewPage + sizeof(CreateNewWebPageData)); size_t nPos = strURL.find('\n'); if (nPos != std::wstring::npos) { strAdditionalInfo = strURL.substr(nPos + 1); strURL = strURL.substr(0, nPos); } } //std::wstring strDomain = ExtractTopDomain(strURL.c_str()); const CWebsiteData *pData; // 当创建导入账单页面时,独自进行处理,在导入账单页进行,防止新开Tab页去独立显示 if(pNewPage->bGetBill == false) pData = CURLList::GetInstance()->GetData(L"", strURL.c_str()); else pData = CURLList::GetInstance()->GetData(L"getbill", strURL.c_str()); if (pData == NULL) { if (_tcsnicmp(strURL.c_str(), _T("http"), 4) == 0) { //::ShellExecute(NULL, _T("open"), strURL.c_str(), strURL.c_str(), NULL, SW_SHOW); CListManager::NavigateWebPage(strURL.c_str()); CRecordProgram::GetInstance()->RecordCommonInfo(MY_PRO_NAME, MY_COMMON_PROCESS, L"NavigateWebPage创建新页面"); CRecordProgram::GetInstance()->RecordDebugInfo(MY_PRO_NAME, MY_COMMON_PROCESS, strURL.c_str()); return 0; } else { //MessageBox(strURL.c_str(), _T("配置文件错误"), MB_OK); return 0; } } std::tstring strChildFrameUrl; CTabItem *pCreateFromItem = NULL; if (::IsWindow(pNewPage->hCreateFromChildFrame)) { CChildFrame *pChildFrame = (CChildFrame*)::GetWindowLongPtr(pNewPage->hCreateFromChildFrame, GWLP_USERDATA); //ATLASSERT(!::IsBadReadPtr(pChildFrame, sizeof(CChildFrame))); if (pChildFrame && !::IsBadReadPtr(pChildFrame, sizeof(CChildFrame))) { pCreateFromItem = pChildFrame->GetItem(); strChildFrameUrl = pCreateFromItem->GetURLText(); } } HWND hReturnChildFrame = NULL; // 记住这里进行分类建立窗口的功能 CTabItem *pItem = new CTabItem(pNewPage->bNoClose); CCategoryItem *pCate = m_CateCtrl.FindOrCreateItem(strURL == _T("about:blank") ? strChildFrameUrl.c_str() : strURL.c_str(), pCreateFromItem, pNewPage->bGetBill, pNewPage->BillFlag);//记账页强制创建新页面 pCate->m_TabItems.push_back(pItem); pItem->m_pCategory = pCate; DWORD dwProcessID = 0; if (pCreateFromItem) ::GetWindowThreadProcessId(pCreateFromItem->GetAxControl(), &dwProcessID); CChildFrame *pChild = new CChildFrame(FS(), m_hWnd, strURL.c_str(), pItem, pNewPage->lpszURL == URL_NO_NAVIGATE, false, dwProcessID, strChildFrameUrl); if (m_CateCtrl.GetCurrentSelection() == pCate) m_TabCtrl.InsertItem(m_TabCtrl.GetTabItems().size(), pItem); if (pNewPage->bShowImmediately || m_TabCtrl.GetCurrentSelection() == NULL) ActivePage(pItem); hReturnChildFrame = pChild->m_hWnd; return (LRESULT)hReturnChildFrame; }