BOOL CPropertyPageHost::EnsurePageCreated(int nIndex) { if (nIndex < 0 || nIndex >= m_aPages.GetSize()) return FALSE; CPropertyPage* pPage = m_aPages[nIndex].pPage; if (!pPage) return FALSE; if (pPage->GetSafeHwnd() == NULL) // first time only { if (!pPage->Create(pPage->m_psp.pszTemplate, this)) return FALSE; // make sure we can into/out of the page pPage->ModifyStyleEx(0, WS_EX_CONTROLPARENT | DS_CONTROL); // make sure the page is a child and modify it if necessary pPage->ModifyStyle(WS_POPUPWINDOW | WS_OVERLAPPEDWINDOW, 0); if (!(pPage->GetStyle() & WS_CHILD)) { pPage->ModifyStyle(0, WS_CHILD); pPage->SetParent(this); ASSERT (pPage->GetParent() == this); } // set font to our parent's font CWnd* pOurParent = GetParent(); ASSERT (pOurParent); CFont* pFont = pOurParent->GetFont(); if (pFont) CDialogHelper::SetFont(pPage, (HFONT)pFont->GetSafeHandle(), FALSE); // and our parent pPage->SetParent(this); // snapshot the pages original size CRect rOrg; pPage->GetClientRect(rOrg); m_aPages[nIndex].sizeOrg = rOrg.Size(); // then fit to the current Host size UpdatePageSize(nIndex); } return (pPage->GetSafeHwnd() != NULL); }
CPropertyPage* CPropertyPageHost::GetActivePage() { if (m_nSelIndex < 0) return NULL; CPropertyPage* pPage = m_aPages[m_nSelIndex].pPage; if (!pPage || !pPage->GetSafeHwnd()) return NULL; return pPage; }
void CPropertyPageHost::OnApply() { int nPage = m_aPages.GetSize(); while (nPage--) { CPropertyPage* pPage = m_aPages[nPage].pPage; if (pPage && pPage->GetSafeHwnd()) pPage->UpdateData(); } }
void CBCGPPropertySheetCtrl::ResizeControl() { CWnd* pTabCtrl = GetTabControl(); if (m_wndTab.GetSafeHwnd() != NULL) { pTabCtrl = &m_wndTab; m_wndTab.SetButtonsVisible(FALSE); } if (pTabCtrl->GetSafeHwnd() == NULL) { return; } CRect rectClient; GetClientRect(rectClient); pTabCtrl->SetWindowPos(NULL, 0, 0, rectClient.Width(), rectClient.Height(), SWP_NOZORDER | SWP_NOACTIVATE); int nPageCount = CBCGPPropertySheet::GetPageCount(); int nXBorder = ::GetSystemMetrics(SM_CXEDGE); int nYBorder = ::GetSystemMetrics(SM_CYEDGE); for (int nPage = 0; nPage <= nPageCount - 1; nPage++) { CPropertyPage* pPage = GetPage(nPage); if (pPage->GetSafeHwnd() != NULL) { CRect rectPage; pPage->GetWindowRect(&rectPage); pTabCtrl->ScreenToClient(rectPage); pPage->SetWindowPos(NULL, rectPage.left, rectPage.top, rectClient.Width() - nXBorder * 3, rectClient.Height() - rectPage.top - nYBorder, SWP_NOZORDER | SWP_NOACTIVATE); } } RedrawWindow(); }
void CExtChildResizablePropertySheet::_TrickSyncActviveChild() { CPropertyPage * pWnd = CPropertySheet::GetActivePage(); CTabCtrl * pTabCtrl = CPropertySheet::GetTabControl(); if( pWnd != NULL && pWnd->GetSafeHwnd() != NULL && ::IsWindow( pWnd->GetSafeHwnd() ) && pTabCtrl != NULL && pTabCtrl->GetSafeHwnd() != NULL && ::IsWindow( pTabCtrl->GetSafeHwnd() ) ) { if( !m_bTabStylesInitialized ) { m_bTabStylesInitialized = true; DWORD dwStylesRemove = 0L; DWORD dwStylesAdd = 0L; if( m_bInitTabSingleLine ) { dwStylesRemove |= TCS_MULTILINE; dwStylesAdd |= TCS_SINGLELINE; } if( m_bInitTabButtons ) { dwStylesAdd |= TCS_BUTTONS; if( m_bInitTabButtonsFlat ) dwStylesAdd |= TCS_FLATBUTTONS; } if( dwStylesRemove != 0 || dwStylesAdd != 0 ) pTabCtrl->ModifyStyle( dwStylesRemove, dwStylesAdd, SWP_FRAMECHANGED ); if( m_bInitTabButtons && m_bInitTabButtonsFlat && m_bInitTabSeparatorsFlat ) pTabCtrl->SetExtendedStyle( TCS_EX_FLATSEPARATORS, TCS_EX_FLATSEPARATORS ); } RECT lpRect; GetClientRect(&lpRect); // dirty fix of the access vialation bug of // the tab control with single item when item's // width/height is same as tab control width/height __try { pTabCtrl->AdjustRect(FALSE, &lpRect); } __except( EXCEPTION_EXECUTE_HANDLER ) { lpRect.right ++; lpRect.bottom ++; __try { pTabCtrl->AdjustRect(FALSE, &lpRect); } __except( EXCEPTION_EXECUTE_HANDLER ) { } } pWnd->MoveWindow(&lpRect, TRUE); } }