void CuDlgCacheTab::DisplayPage (CACHELINEINFO* pData) { CString csButtonTitle; CWnd* pParent1 = GetParent (); // View (CvDbmsCacheViewRight) ASSERT_VALID (pParent1); CWnd* pParent2 = pParent1->GetParent (); // SplitterWnd ASSERT_VALID (pParent2); CWnd* pParent3 = pParent2->GetParent (); // Frame (CfDbmsCacheFrame) ASSERT_VALID (pParent3); CWnd* pParent4 = pParent3->GetParent (); // Modeless Dialog (CuDlgDbmsCache) ASSERT_VALID (pParent4); CWnd* pParent5 = pParent4->GetParent (); // CTabCtrl ASSERT_VALID (pParent5); CWnd* pParent6 = pParent5->GetParent (); // CConfRightDlg ASSERT_VALID (pParent6); CButton* pButton1 = (CButton*)((CConfRightDlg*)pParent6)->GetDlgItem (IDC_BUTTON1); CButton* pButton2 = (CButton*)((CConfRightDlg*)pParent6)->GetDlgItem (IDC_BUTTON2); CuCacheCheckListCtrl* pList = GetCacheListCtrl(); CTabCtrl* pTab = (CTabCtrl*)GetDlgItem(IDC_TAB1); if (m_pCurrentPage) { // // Try to save (and validate) the data that has been changed // in the old page before displaying a new page. m_pCurrentPage->SendMessage(WMUSRMSG_CBF_PAGE_VALIDATE, (WPARAM)0, (LPARAM)0); m_pCurrentPage->ShowWindow (SW_HIDE); m_pCurrentPage = NULL; } if (!(pTab && IsWindow (pTab->m_hWnd))) return; UINT nState = 0; int i, nCurSel = -1, nCount = pList->GetItemCount(); for (i=0; i<nCount; i++) { nState = pList->GetItemState (i, LVIS_SELECTED); if (nState & LVIS_SELECTED) { nCurSel = i; break; } } if (nCurSel == -1) return; if (!pData) return; try { if (!VCBFllInitCacheParms(pData)) return; int nSel = pTab->GetCurSel(); switch (nSel) { case 0: csButtonTitle.LoadString(IDS_BUTTON_EDIT_VALUE); pButton1->SetWindowText (csButtonTitle); csButtonTitle.LoadString(IDS_BUTTON_RESTORE); pButton2->SetWindowText (csButtonTitle); if (!m_pCacheParameter) { m_pCacheParameter = new CuDlgDbmsCacheParameter (pTab); m_pCacheParameter->Create (IDD_DBMS_PAGE_CACHE_PARAMETER, pTab); } m_pCurrentPage = m_pCacheParameter; break; case 1: csButtonTitle.LoadString(IDS_BUTTON_EDIT_VALUE); pButton1->SetWindowText (csButtonTitle); csButtonTitle.LoadString(IDS_BUTTON_RECALCULATE); pButton2->SetWindowText (csButtonTitle); if (!m_pCacheDerived) { m_pCacheDerived = new CuDlgDbmsCacheDerived (pTab); m_pCacheDerived->Create (IDD_DBMS_PAGE_CACHE_DERIVED, pTab); } m_pCurrentPage = m_pCacheDerived; break; default: break; } if (m_pCurrentPage) { CRect r; pTab->GetClientRect (r); pTab->AdjustRect (FALSE, r); m_pCurrentPage->SendMessage (WMUSRMSG_CBF_PAGE_UPDATING, 0, 0); m_pCurrentPage->MoveWindow(r); m_pCurrentPage->ShowWindow(SW_SHOW); } } catch (CeVcbfException e) { // // Catch critical error TRACE1 ("CuDlgCacheTab::DisplayPage has caught exception: %s\n", e.m_strReason); CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd(); pMain->CloseApplication (FALSE); } catch (CMemoryException* e) { VCBF_OutOfMemoryMessage (); e->Delete(); } catch (...) { TRACE0 ("Other error occured ...\n"); } }
BOOL CMainTabDlg::OnInitDialog() { CRect r; TC_ITEM item; CString strTab; UINT nTabID[3]= {IDS_TAB_MAIN_CONFIGURE,IDS_TAB_MAIN_HISTORY,IDS_TAB_MAIN_PREFERENCES}; CDialog::OnInitDialog(); memset (&item, 0, sizeof (item)); item.mask = TCIF_TEXT|TCIF_IMAGE; item.cchTextMax = 32; item.iImage = -1; CTabCtrl * ptab = (CTabCtrl * )GetDlgItem(IDC_TAB1); ASSERT(ptab); ptab->GetWindowRect (r); ScreenToClient (r); m_dlgPadding.cx = r.left; m_dlgPadding.cy = r.top; CButton* pButton1= (CButton*)GetDlgItem(IDC_BUTTON1); ASSERT (pButton1); pButton1->GetWindowRect (r); ScreenToClient (r); m_buttonPadding.cx = r.right; m_buttonPadding.cy = r.bottom; int nTab = 2; #if defined (OIDSK) nTab = 2; #endif for (int i=0; i<nTab; i++) { strTab.LoadString (nTabID [i]); item.pszText = (LPTSTR)(LPCTSTR)strTab; ptab->InsertItem (i, &item); } if (m_pCurDlg) m_pCurDlg->ShowWindow (SW_HIDE); CTabCtrl* pTab = (CTabCtrl*) GetDlgItem(IDC_TAB1); int nsel = pTab->GetCurSel(); switch (nsel) { case PANE_CONFIG: if (!m_pConfigDlg) { m_pConfigDlg = new CConfigDlg(pTab); m_pConfigDlg->Create(IDD_CONFIG,pTab); } m_pCurDlg= m_pConfigDlg; break; case PANE_HISTORY: if (!m_pHistDlg) { m_pHistDlg = new CHistDlg(pTab); m_pHistDlg->Create(IDD_HISTORY,pTab); } m_pCurDlg= m_pHistDlg; break; case PANE_PREFERENCES: if (!m_pPrefDlg) { m_pPrefDlg = new CPrefDlg(pTab); m_pPrefDlg->Create(IDD_PREFERENCES,pTab); } m_pCurDlg= m_pPrefDlg; break; } if (m_pCurDlg) { CRect r; pTab->GetClientRect (r); pTab->AdjustRect (FALSE, r); m_pCurDlg->MoveWindow(r); m_pCurDlg->ShowWindow(SW_SHOW); } SHOSTINFO CurInfo; VCBFGetHostInfos(&CurInfo); CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC_NAME_INSTALL); pStatic->SetWindowText((LPCTSTR)CurInfo.ii_installation_name); pStatic = (CStatic*)GetDlgItem(IDC_STATIC_INSTALL); pStatic->SetWindowText((LPCTSTR)CurInfo.ii_installation); pStatic = (CStatic*)GetDlgItem(IDC_STATIC_IISYSTEM_NAME); pStatic->SetWindowText((LPCTSTR)CurInfo.ii_system_name); pStatic = (CStatic*)GetDlgItem(IDC_STATIC_II_SYSTEM); pStatic->SetWindowText((LPCTSTR)CurInfo.ii_system); pStatic = (CStatic*)GetDlgItem(IDC_STATIC_HOST); pStatic->SetWindowText((LPCTSTR)CurInfo.host); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
void CMainTabDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); CTabCtrl * pTab = (CTabCtrl *) GetDlgItem(IDC_TAB1); CRect rDlg; GetClientRect (rDlg); if (pTab && IsWindow(pTab->m_hWnd)) { // // Move the buttons to the right place. CButton* pB1 = (CButton*) GetDlgItem(IDC_BUTTON2); // Close; CButton* pB2 = (CButton*) GetDlgItem(IDC_BUTTON1); // Help CButton* pB3 = (CButton*) GetDlgItem(IDC_BUTTON3); int ibY = 0; CRect r, newRect; pB1->GetClientRect (r); newRect.top = rDlg.bottom - 10 - r.Height(); newRect.right = rDlg.right - m_dlgPadding.cx; newRect.left = newRect.right - r.Width(); newRect.bottom = newRect.top + r.Height(); pB1->MoveWindow (newRect); newRect.right = newRect.left - 10; newRect.left = newRect.right - r.Width(); pB2->MoveWindow (newRect); newRect.right = newRect.left - 10; newRect.left = newRect.right - r.Width(); pB3->MoveWindow (newRect); ibY = newRect.top; // // Move the static Text Header II_SYSTEM // to the right place. CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC_II_SYSTEM); pStatic->GetWindowRect (r); ScreenToClient (r); r.right = rDlg.right - m_dlgPadding.cx; pStatic->MoveWindow (r); // // Move the Tab Control to the right place. pStatic->GetWindowRect (r); ScreenToClient (r); r.top = r.bottom + 10; r.bottom = ibY - 10; r.left = m_dlgPadding.cx; r.right = rDlg.right - m_dlgPadding.cx; pTab->MoveWindow(r); if (m_pCurDlg) { CRect r; pTab->GetClientRect (r); pTab->AdjustRect (FALSE, r); m_pCurDlg->MoveWindow(r); } } }
void CMainTabDlg::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult) { if (m_pCurDlg) { // // Try to save (and validate) the data that has been changed // in the old page before displaying a new page. m_pCurDlg->SendMessage(WMUSRMSG_CBF_PAGE_VALIDATE, (WPARAM)0, (LPARAM)0); m_pCurDlg->ShowWindow(SW_HIDE); m_pCurDlg->SendMessage (WM_COMPONENT_EXIT, 0, 0); m_pCurDlg = NULL; } CTabCtrl* pTab = (CTabCtrl*) GetDlgItem(IDC_TAB1); int nsel = pTab->GetCurSel(); switch (nsel) { case PANE_CONFIG: if (!m_pConfigDlg) { m_pConfigDlg = new CConfigDlg(pTab); m_pConfigDlg->Create(IDD_CONFIG,pTab); } m_pCurDlg= m_pConfigDlg; break; case PANE_HISTORY: if (!m_pHistDlg) { m_pHistDlg = new CHistDlg(pTab); m_pHistDlg->Create(IDD_HISTORY,pTab); } m_pCurDlg= m_pHistDlg; break; case PANE_PREFERENCES: if (!m_pPrefDlg) { m_pPrefDlg = new CPrefDlg(pTab); m_pPrefDlg->Create(IDD_PREFERENCES,pTab); } m_pCurDlg= m_pPrefDlg; break; } if (m_pCurDlg) { CRect r; pTab->GetClientRect (r); pTab->AdjustRect (FALSE, r); m_pCurDlg->MoveWindow(r); m_pCurDlg->ShowWindow(SW_SHOW); m_pCurDlg->SendMessage(WMUSRMSG_CBF_PAGE_UPDATING, 0, 0); m_pCurDlg->SendMessage(WM_COMPONENT_ENTER, 0, 0); } }
void CuDlgCacheTab::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); CTabCtrl* pTab = (CTabCtrl*)GetDlgItem (IDC_TAB1); if (!(pTab && IsWindow (pTab->m_hWnd))) return; CRect rDlg, r; GetClientRect (rDlg); pTab->MoveWindow (rDlg); if (!m_pCurrentPage) return; pTab->GetClientRect (r); pTab->AdjustRect (FALSE, r); m_pCurrentPage->MoveWindow(r); m_pCurrentPage->ShowWindow(SW_SHOW); }
void CMyPropertySheet::OnSize(UINT nType, int cx, int cy) { //TABLE内的窗口页在其WM_SIZE响应函数里调整大小即可 CRect rcClient; CPropertySheet::OnSize(nType, cx, cy); if(!m_bIsInited)return; CTabCtrl *pTab = GetTabControl(); //ASSERT(NULL != pTab && IsWindow(pTab->m_hWnd)); int dx = cx - m_rCrt.Width(); int dy = cy - m_rCrt.Height(); GetClientRect(&m_rCrt); HDWP hDWP = ::BeginDeferWindowPos(5); pTab->GetClientRect(&rcClient); rcClient.right += dx; rcClient.bottom += dy; ::DeferWindowPos(hDWP, pTab->m_hWnd, NULL, 0, 0, rcClient.Width(), rcClient.Height(), SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOZORDER); for (CWnd *pChild = GetWindow(GW_CHILD); pChild != NULL; pChild = pChild->GetWindow(GW_HWNDNEXT)) { if (pChild->SendMessage(WM_GETDLGCODE) & DLGC_BUTTON) { pChild->GetWindowRect(&rcClient); ScreenToClient(&rcClient); rcClient.top += dy; rcClient.bottom += dy; rcClient.left+= dx; rcClient.right += dx; ::DeferWindowPos(hDWP, pChild->m_hWnd, NULL, rcClient.left, rcClient.top, 0, 0, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOZORDER); } else { pChild->GetClientRect(&rcClient); rcClient.right += dx; rcClient.bottom += dy; ::DeferWindowPos(hDWP, pChild->m_hWnd, NULL, 0, 0, rcClient.Width(), rcClient.Height(), SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOZORDER); } } ::EndDeferWindowPos(hDWP); // TODO: 在此处添加消息处理程序代码 }
void CComPropertySheet::OnActivated(CPropertyPage* pPage) { if(!pPage) return; CRect bounds(30000,30000,-30000,-30000); CRect wr, cr; GetWindowRect(wr); GetClientRect(cr); CSize ws = wr.Size(), cs = cr.Size(); CRect twr, tcr; CTabCtrl* pTC = (CTabCtrl*)GetDlgItem(AFX_IDC_TAB_CONTROL); pTC->GetWindowRect(twr); pTC->GetClientRect(tcr); CSize tws = twr.Size(), tcs = tcr.Size(); if(CWnd* pChild = pPage->GetWindow(GW_CHILD)) { pChild->ModifyStyle(WS_CAPTION|WS_THICKFRAME, 0); pChild->ModifyStyleEx(WS_EX_DLGMODALFRAME, WS_EX_CONTROLPARENT); for(CWnd* pGrandChild = pChild->GetWindow(GW_CHILD); pGrandChild; pGrandChild = pGrandChild->GetNextWindow()) { if(!(pGrandChild->GetStyle()&WS_VISIBLE)) continue; CRect r; pGrandChild->GetWindowRect(&r); pChild->ScreenToClient(r); bounds |= r; } } bounds |= CRect(0,0,0,0); bounds.SetRect(0, 0, bounds.right + max(bounds.left, 4), bounds.bottom + max(bounds.top, 4)); CRect r = CRect(CPoint(0,0), bounds.Size()); pTC->AdjustRect(TRUE, r); r.SetRect(twr.TopLeft(), twr.TopLeft() + r.Size()); ScreenToClient(r); pTC->MoveWindow(r); pTC->ModifyStyle(TCS_MULTILINE, TCS_SINGLELINE); CSize diff = r.Size() - tws; if(!bounds.IsRectEmpty()) { if(CWnd* pChild = pPage->GetWindow(GW_CHILD)) pChild->MoveWindow(bounds); CRect r = twr; pTC->AdjustRect(FALSE, r); ScreenToClient(r); pPage->MoveWindow(CRect(r.TopLeft(), bounds.Size())); } int _afxPropSheetButtons[] = { IDOK, IDCANCEL, ID_APPLY_NOW, IDHELP }; for(int i = 0; i < countof(_afxPropSheetButtons); i++) { if(CWnd* pWnd = GetDlgItem(_afxPropSheetButtons[i])) { pWnd->GetWindowRect(r); ScreenToClient(r); pWnd->MoveWindow(CRect(r.TopLeft() + diff, r.Size())); } } MoveWindow(CRect(wr.TopLeft(), ws + diff)); Invalidate(); }