void CXTPSkinObjectTab::OnMouseMove(UINT /*nFlags*/, CPoint point) { int nHotItem = -1; CTabCtrl* pTabCtrl = (CTabCtrl*)this; for (int iItem = 0; iItem < pTabCtrl->GetItemCount(); ++iItem) { CRect rcItem; pTabCtrl->GetItemRect(iItem, &rcItem); if (rcItem.PtInRect(point)) { nHotItem = iItem; break; } } if (nHotItem != m_nHotItem) { m_nHotItem = nHotItem; InvalidateRect(GetHeaderRect(), FALSE); if (m_nHotItem != -1) { TRACKMOUSEEVENT tme = {sizeof(TRACKMOUSEEVENT), TME_LEAVE, m_hWnd, HOVER_DEFAULT}; _TrackMouseEvent(&tme); } } }
//*************************************************************************************** void CBCGPropertySheet::AddPageToTree (CBCGPropSheetCategory* pCategory, CBCGPropertyPage* pPage, int nIconNum, int nSelIconNum) { ASSERT_VALID (this); ASSERT_VALID (pPage); ASSERT (m_look == PropSheetLook_Tree); if (pCategory != NULL) { ASSERT_VALID (pCategory); pCategory->m_lstPages.AddTail (pPage); } pPage->m_pCategory = pCategory; pPage->m_nIcon = nIconNum; pPage->m_nSelIconNum = nSelIconNum; CPropertySheet::AddPage (pPage); if (GetSafeHwnd () != NULL) { CTabCtrl* pTab = GetTabControl (); ASSERT_VALID (pTab); InternalAddPage (pTab->GetItemCount () - 1); } }
void CXTPSkinObjectTab::DrawTab(CDC* pDC, int iItem) { CXTPClientRect rc(this); CTabCtrl* pTabCtrl = (CTabCtrl*)this; // Get the current tab selection. int iCurSel = pTabCtrl->GetCurSel(); // Get the tab item size. CRect rcItem; pTabCtrl->GetItemRect(iItem, &rcItem); if (!CRect().IntersectRect(rcItem, rc)) return; CRect rcItemFocus(rcItem); // Draw the tab item. BOOL bSelected = (iItem == iCurSel); FillTabFace(pDC, rcItem, iItem, pTabCtrl->GetItemCount(), bSelected); DrawTabIcon(pDC, rcItem, iItem); DrawTabText(pDC, rcItem, iItem, iItem, bSelected); // draw the focus rect if (bSelected && ::GetFocus() == m_hWnd && (SendMessage(WM_QUERYUISTATE) & UISF_HIDEFOCUS) == 0) { rcItemFocus.DeflateRect(GetMetrics()->m_cxEdge / 2, GetMetrics()->m_cyEdge / 2); pDC->DrawFocusRect(&rcItemFocus); } }
void CuDlgPageFixedWidth::OnCheckConfirmChoice() { // // You have already checked one.\nThe previous check will be cancelled. CString strMsg; strMsg.LoadString(IDS_CONFIRM_CHOICE_WITH_CHECKBOX); CWnd* pParent = GetParent(); ASSERT(pParent && pParent->IsKindOf(RUNTIME_CLASS(CTabCtrl))); if (pParent && pParent->IsKindOf(RUNTIME_CLASS(CTabCtrl))) { BOOL nAsked = FALSE; TCITEM item; memset (&item, 0, sizeof (item)); item.mask = TCIF_PARAM; CTabCtrl* pTab = (CTabCtrl*)pParent; int nCheck, i, nCount = pTab->GetItemCount(); for (i=0; i<nCount; i++) { if (pTab->GetItem (i, &item)) { CWnd* pPage = (CWnd*)item.lParam; ASSERT (pPage); if (!pPage) continue; if (pPage == this) continue; nCheck = pPage->SendMessage(WMUSRMSG_GETITEMDATA, (WPARAM)CHECK_CONFIRM_CHOICE, 0); if (nCheck == 1) { if (!nAsked) { nAsked = TRUE; int nAnswer = AfxMessageBox (strMsg, MB_OKCANCEL|MB_ICONEXCLAMATION); if (nAnswer != IDOK) { m_cCheckConfirmChoice.SetCheck (0); return; } // // Uncheck the checkbox m_cCheckConfirmChoice: pPage->SendMessage(WMUSRMSG_UPDATEDATA, (WPARAM)CHECK_CONFIRM_CHOICE, 0); } else { // // Uncheck the checkbox m_cCheckConfirmChoice: pPage->SendMessage(WMUSRMSG_UPDATEDATA, (WPARAM)CHECK_CONFIRM_CHOICE, 0); } } } } } }
// @pymethod int|PyCTabCtrl|GetItemCountl|Returns the number of tabs in the control. PyObject *ui_tabctrl_get_item_count( PyObject *self, PyObject *args ) { CHECK_NO_ARGS(args); CTabCtrl *pTab; if ((pTab=PyGetTabCtrl(self))==NULL) return NULL; GUI_BGN_SAVE; int rc = pTab->GetItemCount(); GUI_END_SAVE; return Py_BuildValue("i", rc); }
void CBCGPropertySheet::AddPage(CPropertyPage* pPage) { CPropertySheet::AddPage (pPage); if (GetSafeHwnd () == NULL || m_look == PropSheetLook_Tabs) { return; } CTabCtrl* pTab = GetTabControl (); ASSERT_VALID (pTab); InternalAddPage (pTab->GetItemCount () - 1); }
BOOL CTreePropSheetBase::SelectCurrentPageTreeItem() { CTabCtrl *pTab = GetTabControl(); if (!IsWindow(pTab->GetSafeHwnd())) return FALSE; // TreePropSheetEx: Fix problem when removing last page from control. int nPage = pTab->GetCurSel(); if( nPage >= 0 && nPage < pTab->GetItemCount() ) return SelectPageTreeItem( nPage ); // TreePropSheetEx: End fix problem when removing last page from control. return FALSE; }
void CXTPSkinObjectTab::OnDraw(CDC* pDC) { CRect rc = GetHeaderRect(); DWORD dwStyle = GetStyle(); if (IsRight(dwStyle)) { rc.left -= 2; } else if (IsLeft(dwStyle)) { rc.right += 2; } else if (IsBottom(dwStyle)) { rc.top -= 2; } else { rc.bottom += 2; } CXTPBufferDC dcMem(*pDC, rc); FillClient(&dcMem, CXTPClientRect(this)); if (m_bActiveX) { m_bPaint = TRUE; CXTPBufferDC dcMem2(*pDC, rc); DefWindowProc(WM_PAINT, (WPARAM)dcMem2.GetSafeHdc(), 0); dcMem2.Discard(); m_bPaint = FALSE; } CTabCtrl* pTabCtrl = (CTabCtrl*)this; CXTPFontDC font(&dcMem, GetFont()); dcMem.SetBkMode(TRANSPARENT); for (int iItem = 0; iItem < pTabCtrl->GetItemCount(); ++iItem) { DrawTab(&dcMem, iItem); } DrawTab(&dcMem, pTabCtrl->GetCurSel()); }
void TreePropertySheet::fillTree() { CTabCtrl tab = GetTabControl(); int pages = tab.GetItemCount(); TCHAR buf[MAX_NAME_LENGTH]; TCITEM item; item.mask = TCIF_TEXT; item.pszText = buf; item.cchTextMax = MAX_NAME_LENGTH - 1; HTREEITEM initialItem = NULL; for(int i = 0; i < pages; ++i) { tab.GetItem(i, &item); if(i == (int)m_psh.nStartPage) initialItem = createTree(buf, TVI_ROOT, i); else createTree(buf, TVI_ROOT, i); } ctrlTree.SelectItem(initialItem); }
void CuDlgPageCsv::OnCheckConfirmChoice() { CaDataPage1& dataPage1 = m_pData->m_dataPage1; if (m_cCheckConfirmChoice.GetCheck() == 1) { CStringArray arrayHeader; BOOL bFirstLineAsHeader = GenerateHeader(dataPage1, m_pSeparatorSet, m_pSeparator, m_nCoumnCount, arrayHeader); if (dataPage1.GetFirstLineAsHeader() && dataPage1.GetLineCountToSkip() == 1) { if (!bFirstLineAsHeader) AfxMessageBox (IDS_MSG_ERROR_HEADERLINE); } } // // You have already checked one.\nThe previous check will be cancelled. CString strMsg; strMsg.LoadString(IDS_CONFIRM_CHOICE_WITH_CHECKBOX); CWnd* pParent = GetParent(); ASSERT(pParent && pParent->IsKindOf(RUNTIME_CLASS(CTabCtrl))); if (pParent && pParent->IsKindOf(RUNTIME_CLASS(CTabCtrl))) { BOOL nAsked = FALSE; TCITEM item; memset (&item, 0, sizeof (item)); item.mask = TCIF_PARAM; CTabCtrl* pTab = (CTabCtrl*)pParent; int nCheck, i, nCount = pTab->GetItemCount(); for (i=0; i<nCount; i++) { if (pTab->GetItem (i, &item)) { CWnd* pPage = (CWnd*)item.lParam; ASSERT (pPage); if (!pPage) continue; if (pPage == this) continue; nCheck = pPage->SendMessage(WMUSRMSG_GETITEMDATA, (WPARAM)CHECK_CONFIRM_CHOICE, 0); if (nCheck == 1) { if (!nAsked) { nAsked = TRUE; int nAnswer = AfxMessageBox (strMsg, MB_OKCANCEL|MB_ICONEXCLAMATION); if (nAnswer != IDOK) { m_cCheckConfirmChoice.SetCheck (0); return; } // // Uncheck the checkbox m_cCheckConfirmChoice: pPage->SendMessage(WMUSRMSG_UPDATEDATA, (WPARAM)CHECK_CONFIRM_CHOICE, 0); } else { // // Uncheck the checkbox m_cCheckConfirmChoice: pPage->SendMessage(WMUSRMSG_UPDATEDATA, (WPARAM)CHECK_CONFIRM_CHOICE, 0); } } } } } }
// // wParam = CHECK_CONFIRM_CHOICE (Update the control m_cCheckConfirmChoice. lParam = 0|1) // wParam = 0 (General, lParam = address of class CaIIAInfo) LONG CuDlgPageCsv::OnUpdateData (WPARAM wParam, LPARAM lParam) { int nMode = (int)wParam; if (nMode == CHECK_CONFIRM_CHOICE) { int nCheck = (int)lParam; m_cCheckConfirmChoice.SetCheck (nCheck); return 0; } ASSERT (m_pData); ASSERT (m_pSeparatorSet); if (!(m_pData && m_pSeparatorSet)) return 0; CaDataPage1& dataPage1 = m_pData->m_dataPage1; CaDataPage2& dataPage2 = m_pData->m_dataPage2; CPtrArray& arrayRecord = dataPage2.GetArrayRecord(); int i, nSize = arrayRecord.GetSize(); for (i=0; i<nSize; i++) { CaRecord* pRec = (CaRecord*)arrayRecord.GetAt(i); delete pRec; } arrayRecord.RemoveAll(); m_listCtrlHuge.ResizeToFit(); CaExecParamQueryRecords* p = new CaExecParamQueryRecords(m_pData, m_pSeparatorSet, &m_nCoumnCount); #if defined (_ANIMATION_) CString strMsgAnimateTitle; strMsgAnimateTitle.LoadString(IDS_ANIMATE_TITLE_QUERYING); CxDlgWait dlg (strMsgAnimateTitle); dlg.SetUseAnimateAvi(AVI_CLOCK); dlg.SetExecParam (p); dlg.SetDeleteParam(FALSE); dlg.SetShowProgressBar(TRUE); dlg.SetUseExtraInfo(); dlg.DoModal(); #else p->Run(); p->OnTerminate(m_hWnd); #endif delete p; SetForegroundWindow (); m_bFirstUpdate = FALSE; // // Display the separator: DisplaySeparatorSetInfo(m_pSeparatorSet, m_pSeparator); // // Initialize headers: CString strHeader; if (m_nCoumnCount > 0) { LSCTRLHEADERPARAMS* pLsp = new LSCTRLHEADERPARAMS[m_nCoumnCount]; CStringArray arrayHeader; BOOL bFirstLineAsHeader = GenerateHeader(dataPage1, m_pSeparatorSet, m_pSeparator, m_nCoumnCount, arrayHeader); for (i=0; i<m_nCoumnCount; i++) { if (bFirstLineAsHeader) strHeader = arrayHeader.GetAt(i); else strHeader.Format(_T("col%d"), i+1); #if defined (MAXLENGTH_AND_EFFECTIVE) int& nFieldMax = dataPage2.GetFieldSizeMax(i); int& nFieldEff = dataPage2.GetFieldSizeEffectiveMax(i); //if (nFieldEff < nFieldMax) // strHeader.Format(_T("col%d (%d+%d)"), i+1, nFieldEff, nFieldMax-nFieldEff); //else CString strSize; strSize.Format(_T(" (%d)"), nFieldMax); strHeader += strSize; #endif pLsp[i].m_fmt = LVCFMT_LEFT; if (strHeader.GetLength() > MAXLSCTRL_HEADERLENGTH) lstrcpyn (pLsp[i].m_tchszHeader, strHeader, MAXLSCTRL_HEADERLENGTH); else lstrcpy (pLsp[i].m_tchszHeader, strHeader); pLsp[i].m_cxWidth= 100; pLsp[i].m_bUseCheckMark = FALSE; } m_listCtrlHuge.InitializeHeader(pLsp, m_nCoumnCount); m_listCtrlHuge.SetDisplayFunction(DisplayListCtrlHugeItem, NULL); m_listCtrlHuge.SetSharedData (&arrayRecord); delete pLsp; } // // Display the new records: m_listCtrlHuge.ResizeToFit(); //If one tab displays for import format, then just check //the tab checkbox automatically CTabCtrl *cTab = (CTabCtrl *) this->GetParent(); int size = cTab->GetItemCount(); if (cTab->GetItemCount()==1) m_cCheckConfirmChoice.SetCheck(TRUE); return TRUE; }
void CTreePropSheet::RefillPageTree() { if (!IsWindow(m_hWnd)) return; m_pwndPageTree->DeleteAllItems(); CTabCtrl *pTabCtrl = GetTabControl(); if (!IsWindow(pTabCtrl->GetSafeHwnd())) { ASSERT(FALSE); return; } const int nPageCount = pTabCtrl->GetItemCount(); // rebuild image list if (m_bTreeImages) { for (int i = m_Images.GetImageCount()-1; i >= 0; --i) m_Images.Remove(i); // add page images CImageList *pPageImages = pTabCtrl->GetImageList(); if (pPageImages) { for (int nImage = 0; nImage < pPageImages->GetImageCount(); ++nImage) { HICON hIcon = pPageImages->ExtractIcon(nImage); m_Images.Add(hIcon); DestroyIcon(hIcon); } } // add default images if (m_DefaultImages.GetSafeHandle()) { HICON hIcon; // add default images hIcon = m_DefaultImages.ExtractIcon(0); if (hIcon) { m_Images.Add(hIcon); DestroyIcon(hIcon); } hIcon = m_DefaultImages.ExtractIcon(1); { m_Images.Add(hIcon); DestroyIcon(hIcon); } } } // insert tree items for (int nPage = 0; nPage < nPageCount; ++nPage) { // Get title and image of the page CString strPagePath; TCITEM ti; ZeroMemory(&ti, sizeof(ti)); ti.mask = TCIF_TEXT|TCIF_IMAGE; ti.cchTextMax = MAX_PATH; ti.pszText = strPagePath.GetBuffer(ti.cchTextMax); ASSERT(ti.pszText); if (!ti.pszText) return; pTabCtrl->GetItem(nPage, &ti); strPagePath.ReleaseBuffer(); // Create an item in the tree for the page HTREEITEM hItem = CreatePageTreeItem(ti.pszText); ASSERT(hItem); if (hItem) { m_pwndPageTree->SetItemData(hItem, nPage); // set image if (m_bTreeImages) { int nImage = ti.iImage; if (nImage < 0 || nImage >= m_Images.GetImageCount()) nImage = m_DefaultImages.GetSafeHandle()? m_Images.GetImageCount()-1 : -1; m_pwndPageTree->SetItemImage(hItem, nImage, nImage); } } } }
//*************************************************************************************** CWnd* CBCGPropertySheet::InitNavigationControl () { ASSERT_VALID (this); CTabCtrl* pTab = GetTabControl (); ASSERT_VALID (pTab); if (m_look == PropSheetLook_OutlookBar) { m_wndOutlookBar.m_pParent = this; m_wndOutlookBar.Create (this, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_LEFT, AFX_IDW_TOOLBAR); m_wndOutlookBar.SetBarStyle (CBRS_ALIGN_LEFT | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); m_wndOutlookBar.SetRouteCommandsViaFrame (FALSE); m_wndOutlookBar.SetOwner (this); m_wndOutlookBar.EnableTextLabels (TRUE); m_wndOutlookBar.EnableSplitter (FALSE); ASSERT (m_Icons.GetSafeHandle () != NULL); ASSERT (m_Icons.GetImageCount () == pTab->GetItemCount ()); for (int nTab = 0; nTab < pTab->GetItemCount (); nTab++) { InternalAddPage (nTab); } return &m_wndOutlookBar; } if (m_look == PropSheetLook_Tree) { CRect rectDummy (0, 0, 0, 0); const DWORD dwTreeStyle = WS_CHILD | WS_VISIBLE; m_wndTree.Create (dwTreeStyle, rectDummy, this, (UINT) idTree); m_wndTree.ModifyStyleEx (0, WS_EX_CLIENTEDGE); if (m_Icons.GetSafeHandle () != NULL) { m_wndTree.SetImageList (&m_Icons, TVSIL_NORMAL); m_wndTree.SetImageList (&m_Icons, TVSIL_STATE); } //---------------- // Add categories: //---------------- for (POSITION pos = m_lstTreeCategories.GetHeadPosition (); pos != NULL;) { AddCategoryToTree (m_lstTreeCategories.GetNext (pos)); } //----------- // Add pages: //----------- for (int nTab = 0; nTab < pTab->GetItemCount (); nTab++) { InternalAddPage (nTab); } return &m_wndTree; } if (m_look == PropSheetLook_OneNoteTabs) { CRect rectDummy (0, 0, 0, 0); m_wndTab.Create (CBCGTabWnd::STYLE_3D_ONENOTE, rectDummy, this, (UINT) idTab, CBCGTabWnd::LOCATION_TOP, FALSE); m_wndTab.m_pParent = this; if (m_Icons.GetSafeHandle () != NULL) { ASSERT (m_Icons.GetImageCount () == pTab->GetItemCount ()); m_wndTab.SetImageList (m_Icons.GetSafeHandle ()); } for (int nTab = 0; nTab < pTab->GetItemCount (); nTab++) { InternalAddPage (nTab); } return &m_wndTab; } return NULL; }
//**************************************************************************************** BOOL CBCGPropertySheet::OnInitDialog() { BOOL bResult = CPropertySheet::OnInitDialog(); BOOL bReposButtons = FALSE; const int nVertMargin = 5; const int nHorzMargin = 5; CWnd* pWndNavigator = InitNavigationControl (); CRect rectClient; GetClientRect (rectClient); if (m_wndTab.GetSafeHwnd () != NULL) { CTabCtrl* pTab = GetTabControl (); ASSERT_VALID (pTab); CRect rectTab; pTab->GetWindowRect (rectTab); ScreenToClient (rectTab); rectTab.InflateRect (2, 0); if (pTab->GetItemCount () > 0) { CRect rectTabsNew; m_wndTab.GetTabsRect (rectTabsNew); CRect rectTabsOld; pTab->GetItemRect (0, rectTabsOld); const int nOldHeight = rectTabsOld.Height (); const int nNewHeight = rectTabsNew.Height (); if (nNewHeight > nOldHeight) { rectClient.bottom += nNewHeight - nOldHeight + nVertMargin; rectTab.bottom += nNewHeight - nOldHeight; SetWindowPos (NULL, -1, -1, rectClient.Width (), rectClient.Height (), SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE); } } m_wndTab.MoveWindow (rectTab); pTab->ModifyStyle (WS_TABSTOP, 0); pTab->ShowWindow (SW_HIDE); if (pTab->GetItemCount () > 0) { m_wndTab.SetActiveTab (0); } bReposButtons = TRUE; } else if (pWndNavigator != NULL) { CTabCtrl* pTab = GetTabControl (); ASSERT_VALID (pTab); pTab->ModifyStyle (WS_TABSTOP, 0); CRect rectTabItem; pTab->GetItemRect (0, rectTabItem); pTab->MapWindowPoints (this, &rectTabItem); const int nTabsHeight = rectTabItem.Height () + nVertMargin; SetWindowPos (NULL, -1, -1, rectClient.Width () + m_nBarWidth, rectClient.Height () - nTabsHeight + 4 * nVertMargin, SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE); GetClientRect (rectClient); pTab->MoveWindow (m_nBarWidth, -nTabsHeight, rectClient.right, rectClient.bottom - 2 * nVertMargin); CRect rectTab; pTab->GetWindowRect (rectTab); ScreenToClient (rectTab); CRect rectNavigator = rectClient; rectNavigator.right = rectNavigator.left + m_nBarWidth; rectNavigator.bottom = rectTab.bottom; rectNavigator.DeflateRect (1, 1); pWndNavigator->SetWindowPos (&wndTop, rectNavigator.left, rectNavigator.top, rectNavigator.Width (), rectNavigator.Height (), SWP_NOACTIVATE); SetActivePage (GetActivePage ()); bReposButtons = TRUE; } if (bReposButtons) { int ids[] = { IDOK, IDCANCEL, ID_APPLY_NOW, IDHELP }; int nTotalButtonsWidth = 0; for (int iStep = 0; iStep < 2; iStep++) { for (int i = 0; i < sizeof (ids) / sizeof (ids [0]); i++) { CWnd* pButton = GetDlgItem (ids[i]); if (pButton != NULL) { if (ids [i] == IDHELP && (m_psh.dwFlags & PSH_HASHELP) == 0) { continue; } if (ids [i] == ID_APPLY_NOW && (m_psh.dwFlags & PSH_NOAPPLYNOW)) { continue; } CRect rectButton; pButton->GetWindowRect (rectButton); ScreenToClient (rectButton); if (iStep == 0) { // Align buttons at the bottom pButton->SetWindowPos (&wndTop, rectButton.left, rectClient.bottom - rectButton.Height () - nVertMargin, -1, -1, SWP_NOSIZE | SWP_NOACTIVATE); nTotalButtonsWidth = rectButton.right; } else { // Right align the buttons pButton->SetWindowPos (&wndTop, rectButton.left + rectClient.right - nTotalButtonsWidth - nHorzMargin, rectButton.top, -1, -1, SWP_NOSIZE | SWP_NOACTIVATE); } } } } } return bResult; }
void CTreePropSheetBase::RefillPageTree() { if (!IsWindow(m_hWnd)) return; // TreePropSheetEx: OnPageTreeSelChanging does not process message. TreePropSheet::CIncrementScope RefillingPageTreeContentGuard( m_nRefillingPageTreeContent ); // TreePropSheetEx: End OnPageTreeSelChanging does not process message. m_pwndPageTree->DeleteAllItems(); CTabCtrl *pTabCtrl = GetTabControl(); if (!IsWindow(pTabCtrl->GetSafeHwnd())) { ASSERT(FALSE); return; } const int nPageCount = pTabCtrl->GetItemCount(); // rebuild image list if (m_bTreeImages) { for (int i = m_Images.GetImageCount()-1; i >= 0; --i) m_Images.Remove(i); // add page images CImageList *pPageImages = pTabCtrl->GetImageList(); if (pPageImages) { for (int nImage = 0; nImage < pPageImages->GetImageCount(); ++nImage) { HICON hIcon = pPageImages->ExtractIcon(nImage); m_Images.Add(hIcon); DestroyIcon(hIcon); } } // add default images if (m_DefaultImages.GetSafeHandle()) { HICON hIcon; // add default images hIcon = m_DefaultImages.ExtractIcon(0); if (hIcon) { m_Images.Add(hIcon); DestroyIcon(hIcon); } hIcon = m_DefaultImages.ExtractIcon(1); { m_Images.Add(hIcon); DestroyIcon(hIcon); } } } // insert tree items for (int nPage = 0; nPage < nPageCount; ++nPage) { // Get title and image of the page CString strPagePath; TCITEM ti; ZeroMemory(&ti, sizeof(ti)); ti.mask = TCIF_TEXT|TCIF_IMAGE; ti.cchTextMax = MAX_PATH; ti.pszText = strPagePath.GetBuffer(ti.cchTextMax); ASSERT(ti.pszText); if (!ti.pszText) return; pTabCtrl->GetItem(nPage, &ti); strPagePath.ReleaseBuffer(); // Create an item in the tree for the page HTREEITEM hItem = CreatePageTreeItem(ti.pszText); ASSERT(hItem); if (hItem) { m_pwndPageTree->SetItemData(hItem, nPage); // set image if (m_bTreeImages) { int nImage = ti.iImage; if (nImage < 0 || nImage >= m_Images.GetImageCount()) nImage = m_DefaultImages.GetSafeHandle()? m_Images.GetImageCount()-1 : -1; m_pwndPageTree->SetItemImage(hItem, nImage, nImage); } // Set font if disabled. CPropertyPage* pPage = GetPage( nPage ); ASSERT( pPage ); if( NULL != pPage && !IsPageEnabled( pPage ) ) { ::SendMessage( m_pwndPageTree->GetSafeHwnd(), WMU_ENABLETREEITEM, (WPARAM)hItem, (LPARAM)GetSysColor(COLOR_GRAYTEXT) ); } } } }