//绘画子项 VOID CServerItemView::DrawTreeItem(CDC * pDC, CRect & rcClient, CRect & rcClipBox) { //首项判断 HTREEITEM hItemCurrent=GetFirstVisibleItem(); if (hItemCurrent==NULL) return; //获取属性 UINT uTreeStyte=GetWindowLong(m_hWnd,GWL_STYLE); ////获取对象 //ASSERT(CSkinRenderManager::GetInstance()!=NULL); //CSkinRenderManager * pSkinRenderManager=CSkinRenderManager::GetInstance(); //绘画子项 do { //变量定义 CRect rcItem; CRect rcRect; //获取状态 HTREEITEM hParent=GetParentItem(hItemCurrent); UINT uItemState=GetItemState(hItemCurrent,TVIF_STATE); //获取属性 bool bDrawChildren=(ItemHasChildren(hItemCurrent)==TRUE); bool bDrawSelected=(uItemState&TVIS_SELECTED)&&((this==GetFocus())||(uTreeStyte&TVS_SHOWSELALWAYS)); //获取区域 if (GetItemRect(hItemCurrent,rcItem,TRUE)) { //绘画过滤 if (rcItem.top>=rcClient.bottom) break; if (rcItem.top>=rcClipBox.bottom) continue; //设置位置 rcRect.left=0; rcRect.top=rcItem.top+1; rcRect.bottom=rcItem.bottom; rcRect.right=rcClient.Width(); //绘画选择 if (bDrawSelected==true) { pDC->FillSolidRect(&rcRect,RGB(253,231,161)); } //绘画经过 if ((bDrawSelected==false)&&(m_hItemMouseHover==hItemCurrent)) { pDC->FillSolidRect(&rcRect,RGB(157,182,249)); } //绘制箭头 if (bDrawChildren==true) { //计算位置 INT nXPos=rcItem.left-m_ImageArrow.GetWidth()/2-25; INT nYPos=rcItem.top+1+(rcItem.Height()-m_ImageArrow.GetHeight())/2; //绘画图标 INT nIndex=(uItemState&TVIS_EXPANDED)?1L:0L; m_ImageArrow.DrawImage(pDC,nXPos,nYPos,m_ImageArrow.GetWidth()/2,m_ImageArrow.GetHeight(),nIndex*m_ImageArrow.GetWidth()/2,0); } //绘制列表 DrawListImage(pDC,rcItem,hItemCurrent); rcItem.right+=20; //绘制文本 DrawItemString(pDC,rcItem,hItemCurrent,bDrawSelected); } } while ((hItemCurrent=GetNextVisibleItem(hItemCurrent))!= NULL); return; }
VOID CEasySkinTreeCtrl::DrawTreeItem( CDC * pDC, CRect & rcClient, CRect & rcClipBox ) { //首项判断 HTREEITEM hItemCurrent=GetFirstVisibleItem(); if (hItemCurrent==NULL) return; //获取属性 UINT uTreeStyte = GetStyle(); //绘画子项 do { //变量定义 CRect rcItem; CRect rcRect; //获取状态 HTREEITEM hParent=GetParentItem(hItemCurrent); UINT uItemState=GetItemState(hItemCurrent,TVIF_STATE); //获取属性 bool bDrawChildren=(ItemHasChildren(hItemCurrent)==TRUE); bool bDrawSelected=(uItemState&TVIS_SELECTED)&&((this==GetFocus())||(uTreeStyte&TVS_SHOWSELALWAYS)); //获取区域 if (GetItemRect(hItemCurrent,rcItem,TRUE)) { //绘画过滤 if (rcItem.top>=rcClient.bottom) break; if (rcItem.top>=rcClipBox.bottom) continue; //设置位置 rcRect.left=0; rcRect.top=rcItem.top+1; rcRect.bottom=rcItem.bottom; rcRect.right=rcClient.Width(); //绘画选择 if (bDrawSelected) { if (m_pPressImg != NULL && !m_pPressImg->IsNull()) m_pPressImg->Draw(pDC,rcRect); else pDC->FillSolidRect(&rcRect,m_colPress); } //绘画经过 if ((bDrawSelected==false)&&(m_hItemMouseHover==hItemCurrent)) { if (m_pHovenImg != NULL && !m_pHovenImg->IsNull()) m_pHovenImg->Draw(pDC,rcRect); else pDC->FillSolidRect(&rcRect,m_colHoven); } //绘制箭头 if (bDrawChildren && (uTreeStyte&TVS_HASBUTTONS) ) { if (m_pImageButton != NULL && !m_pImageButton->IsNull()) { //计算位置 INT nXPos=rcItem.left-m_pImageButton->GetWidth()/2; INT nYPos=rcItem.top+1+(rcItem.Height()-m_pImageButton->GetHeight())/2; //绘画图标 INT nIndex=(uItemState&TVIS_EXPANDED)?1L:0L; m_pImageButton->DrawImage(pDC,nXPos,nYPos,m_pImageButton->GetWidth()/2,m_pImageButton->GetHeight(),nIndex*m_pImageButton->GetWidth()/2,0); rcItem.left += m_pImageButton->GetWidth(); rcItem.right += m_pImageButton->GetWidth();; } } //绘制列表 DrawListImage(pDC,rcItem,hItemCurrent,bDrawSelected); //绘制文本 DrawItemString(pDC,rcItem,hItemCurrent,bDrawSelected); } } while ((hItemCurrent=GetNextVisibleItem(hItemCurrent))!= NULL); }