亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? newtreelistctrl.cpp

?? vc++源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
			{
				m_nWidth += GetColumnWidth(i-1);
				DrawItemText(&dc, pItem->GetSubstring(i), CRect(m_nWidth, rect.top, m_nWidth+GetColumnWidth(i), rect.bottom), GetColumnWidth(i), GetColumnAlign(i));
			}

			if(pItem->m_Bold)
			{
				dc.SelectObject( &fontDC );
			}
		}

		hItem = GetNextVisibleItem( hItem );
		n--;
	}

	dc.SelectObject( pFontDC );
}

void CNewTreeListCtrl::ResetVertScrollBar()
{
	CTLFrame *pFrame = (CTLFrame*)GetParent();

	CRect m_treeRect;
	GetClientRect(&m_treeRect);

	CRect m_wndRect;
	pFrame->GetClientRect(&m_wndRect);

	CRect m_headerRect;
	m_wndHeader.GetClientRect(&m_headerRect);

	CRect m_barRect;
	pFrame->m_horScrollBar.GetClientRect(&m_barRect);

	if(!pFrame->HorizontalScrollVisible())
		SetWindowPos(&wndTop, 0, 0, m_wndRect.Width(), m_wndRect.Height()-m_headerRect.Height(), SWP_NOMOVE);
	else
		SetWindowPos(&wndTop, 0, 0, m_wndRect.Width(), m_wndRect.Height()-m_barRect.Height()-m_headerRect.Height(), SWP_NOMOVE);

	if(pFrame->HorizontalScrollVisible())
	{
		if(!pFrame->VerticalScrollVisible())
		{
			pFrame->m_horScrollBar.SetWindowPos(&wndTop, 0, 0, m_wndRect.Width(), m_barRect.Height(), SWP_NOMOVE);

			int nMin, nMax;
			pFrame->m_horScrollBar.GetScrollRange(&nMin, &nMax);
			if((nMax-nMin) == (GetColumnsWidth()-m_treeRect.Width()+GetSystemMetrics(SM_CXVSCROLL)))
				// i.e. it disappeared because of calling
				// SetWindowPos
			{
				if(nMax - GetSystemMetrics(SM_CXVSCROLL) > 0)
					pFrame->m_horScrollBar.SetScrollRange(nMin, nMax - GetSystemMetrics(SM_CXVSCROLL));
				else
					// hide the horz scroll bar and update the tree
				{
					pFrame->m_horScrollBar.EnableWindow(FALSE);

					// we no longer need it, so hide it!
					{
						pFrame->m_horScrollBar.ShowWindow(SW_HIDE);

						SetWindowPos(&wndTop, 0, 0, m_wndRect.Width(), m_wndRect.Height() - m_headerRect.Height(), SWP_NOMOVE);
						// the tree takes scroll's place
					}

					pFrame->m_horScrollBar.SetScrollRange(0, 0);

					// set scroll offset to zero
					{
						m_nOffset = 0;
						Invalidate();
						m_wndHeader.GetWindowRect(&m_headerRect);
						m_wndHeader.SetWindowPos(&wndTop, m_nOffset, 0, max(pFrame->StretchWidth(GetColumnsWidth(),m_wndRect.Width()),m_wndRect.Width()), m_headerRect.Height(), SWP_SHOWWINDOW);
					}
				}
			}
		}
		else
		{
			pFrame->m_horScrollBar.SetWindowPos(&wndTop, 0, 0, m_wndRect.Width() - GetSystemMetrics(SM_CXVSCROLL), m_barRect.Height(), SWP_NOMOVE);

			int nMin, nMax;
			pFrame->m_horScrollBar.GetScrollRange(&nMin, &nMax);
			if((nMax-nMin) == (GetColumnsWidth()-m_treeRect.Width()-GetSystemMetrics(SM_CXVSCROLL)))
				// i.e. it appeared because of calling
				// SetWindowPos
			{
				pFrame->m_horScrollBar.SetScrollRange(nMin, nMax + GetSystemMetrics(SM_CXVSCROLL));
			}
		}
	}
	else
	if(pFrame->VerticalScrollVisible())
	{
		if(GetColumnsWidth()>m_treeRect.Width())
			// the vertical scroll bar takes some place
			// and the columns are a bit bigger than the client
			// area but smaller than (client area + vertical scroll width)
		{
			// show the horz scroll bar
			{
				pFrame->m_horScrollBar.EnableWindow(TRUE);

				pFrame->m_horScrollBar.ShowWindow(SW_SHOW);

				// the tree becomes smaller
				SetWindowPos(&wndTop, 0, 0, m_wndRect.Width(), m_wndRect.Height()-m_barRect.Height()-m_headerRect.Height(), SWP_NOMOVE);

				pFrame->m_horScrollBar.SetWindowPos(&wndTop, 0, 0, m_wndRect.Width() - GetSystemMetrics(SM_CXVSCROLL), m_barRect.Height(), SWP_NOMOVE);
			}

			pFrame->m_horScrollBar.SetScrollRange(0, GetColumnsWidth()-m_treeRect.Width());

		}
	}
}

void CNewTreeListCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
{
	UINT flags;
	HTREEITEM m_selectedItem = HitTest(point, &flags);

	if((flags & TVHT_ONITEMRIGHT) || (flags & TVHT_ONITEMINDENT) ||
	   (flags & TVHT_ONITEM))
	{
		SelectItem(m_selectedItem);
	}

	if((GetColumnsNum()==0) || (point.x<GetColumnWidth(0)))
	{
		point.x -= m_nOffset;
		m_selectedItem = HitTest(point, &flags);
		if(flags & TVHT_ONITEMBUTTON)
		{
			Expand(m_selectedItem, TVE_TOGGLE);
		}
	}

	SetFocus();

	ResetVertScrollBar();

//	CTreeCtrl::OnLButtonDown(nFlags, point);
}

void CNewTreeListCtrl::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	if((GetColumnsNum()==0) || (point.x<GetColumnWidth(0)))
	{
		CTreeCtrl::OnLButtonDblClk(nFlags, point);
		ResetVertScrollBar();
	}

	SetFocus();
}

void CNewTreeListCtrl::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	CTreeCtrl::OnKeyDown(nChar, nRepCnt, nFlags);
	ResetVertScrollBar();
}

BOOL CNewTreeListCtrl::SetItemData(HTREEITEM hItem, DWORD dwData)
{
	CTLItem *pItem = (CTLItem *)CTreeCtrl::GetItemData(hItem);
	if(!pItem)
		return FALSE;
	pItem->itemData = dwData;
	return CTreeCtrl::SetItemData(hItem, (LPARAM)pItem);
}

DWORD CNewTreeListCtrl::GetItemData(HTREEITEM hItem) const
{
	CTLItem *pItem = (CTLItem *)CTreeCtrl::GetItemData(hItem);
	if(!pItem)
		return NULL;
	return pItem->itemData;
}

HTREEITEM CNewTreeListCtrl::InsertItem(LPCTSTR lpszItem, HTREEITEM hParent, HTREEITEM hInsertAfter)
{
	CTLItem *pItem = new CTLItem;
	pItem->InsertItem(lpszItem);
	m_nItems++;
	((CTLFrame*)GetParent())->ResetScrollBar();

	return CTreeCtrl::InsertItem(TVIF_PARAM|TVIF_TEXT, "", 0, 0, 0, 0, (LPARAM)pItem, hParent, hInsertAfter);
}

HTREEITEM CNewTreeListCtrl::InsertItem( LPCTSTR lpszItem, int nImage, int nSelectedImage, HTREEITEM hParent, HTREEITEM hInsertAfter)
{
	CTLItem *pItem = new CTLItem;
	pItem->InsertItem(lpszItem);
	m_nItems++;
	((CTLFrame*)GetParent())->ResetScrollBar();
	
	return CTreeCtrl::InsertItem(TVIF_PARAM|TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE, "", nImage, nSelectedImage, 0, 0, (LPARAM)pItem, hParent, hInsertAfter);
}

HTREEITEM CNewTreeListCtrl::InsertItem(UINT nMask, LPCTSTR lpszItem, int nImage, int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam, HTREEITEM hParent, HTREEITEM hInsertAfter )
{
	CTLItem *pItem = new CTLItem;
	pItem->InsertItem(lpszItem);
	pItem->itemData = lParam;
	m_nItems++;
	((CTLFrame*)GetParent())->ResetScrollBar();
	
	return CTreeCtrl::InsertItem(nMask, "", nImage, nSelectedImage, nState, nStateMask, (LPARAM)pItem, hParent, hInsertAfter);
}

HTREEITEM CNewTreeListCtrl::CopyItem(HTREEITEM hItem, HTREEITEM hParent, HTREEITEM hInsertAfter)
{
	if(ItemHasChildren(hItem))
		return NULL;

	TV_ITEM item;
	item.mask = TVIF_IMAGE | TVIF_PARAM | TVIF_SELECTEDIMAGE | TVIF_STATE | TVIF_TEXT;
	item.hItem = hItem;
	GetItem(&item);
	CTLItem *pItem = (CTLItem *)CTreeCtrl::GetItemData(hItem);
	CTLItem *pNewItem = new CTLItem(*pItem);

	item.lParam = (LPARAM)pNewItem;

	TV_INSERTSTRUCT insStruct;
	insStruct.item = item;
	insStruct.hParent = hParent;
	insStruct.hInsertAfter = hInsertAfter;

	return CTreeCtrl::InsertItem(&insStruct);
}


HTREEITEM CNewTreeListCtrl::MoveItem(HTREEITEM hItem, HTREEITEM hParent, HTREEITEM hInsertAfter)
{
	if(ItemHasChildren(hItem))
		return NULL;

	TV_ITEM item;
	item.mask = TVIF_IMAGE | TVIF_PARAM | TVIF_SELECTEDIMAGE | TVIF_STATE | TVIF_TEXT;
	item.hItem = hItem;
	GetItem(&item);
	CTLItem *pItem = (CTLItem *)CTreeCtrl::GetItemData(hItem);
	CTLItem *pNewItem = new CTLItem(*pItem);
	DeleteItem(hItem);

	item.lParam = (LPARAM)pNewItem;

	TV_INSERTSTRUCT insStruct;
	insStruct.item = item;
	insStruct.hParent = hParent;
	insStruct.hInsertAfter = hInsertAfter;

	return CTreeCtrl::InsertItem(&insStruct);
}

BOOL CNewTreeListCtrl::SetItemText( HTREEITEM hItem, int nCol ,LPCTSTR lpszItem )
{
	CTLItem *pItem = (CTLItem *)CTreeCtrl::GetItemData(hItem);
	if(!pItem)
		return FALSE;
	pItem->SetSubstring(nCol, lpszItem);
	return CTreeCtrl::SetItemData(hItem, (LPARAM)pItem);
}

BOOL CNewTreeListCtrl::SetItemColor( HTREEITEM hItem, COLORREF m_newColor, BOOL m_bInvalidate )
{
	CTLItem *pItem = (CTLItem *)CTreeCtrl::GetItemData(hItem);
	if(!pItem)
		return FALSE;
	pItem->m_Color = m_newColor;
	if(!CTreeCtrl::SetItemData(hItem, (LPARAM)pItem))
		return FALSE;
	if(m_bInvalidate)
		Invalidate();
	return TRUE;
}

BOOL CNewTreeListCtrl::SetItemBold( HTREEITEM hItem, BOOL m_Bold, BOOL m_bInvalidate )
{
	CTLItem *pItem = (CTLItem *)CTreeCtrl::GetItemData(hItem);
	if(!pItem)
		return FALSE;
	pItem->m_Bold = m_Bold;
	if(!CTreeCtrl::SetItemData(hItem, (LPARAM)pItem))
		return FALSE;
	if(m_bInvalidate)
		Invalidate();
	return TRUE;
}

CString CNewTreeListCtrl::GetItemText( HTREEITEM hItem, int nSubItem )
{
	CTLItem *pItem = (CTLItem *)CTreeCtrl::GetItemData(hItem);
	if(!pItem)
		return _T("");
	return pItem->GetSubstring(nSubItem);
}

CString CNewTreeListCtrl::GetItemText( int nItem, int nSubItem )
{
	return GetItemText(GetTreeItem(nItem), nSubItem);
}

BOOL CNewTreeListCtrl::DeleteItem( HTREEITEM hItem )
{
	CTLItem *pItem = (CTLItem *)CTreeCtrl::GetItemData(hItem);
	if(!pItem)
		return FALSE;

	m_nItems -- ;

	return CTreeCtrl::DeleteItem(hItem);
}

BOOL CNewTreeListCtrl::DeleteItem( int nItem )
{
	return DeleteItem(GetTreeItem(nItem));
}

int CALLBACK CNewTreeListCtrl::CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
	CTLItem *pItem1 = (CTLItem *)lParam1;
	CTLItem *pItem2 = (CTLItem *)lParam2;

	SSortType *pSortType = (SSortType *)lParamSort;

	CString str1 = pItem1->GetSubstring(pSortType->nCol);
	CString str2 = pItem2->GetSubstring(pSortType->nCol);

	int m_nComp;
	// compare the two strings, but
	// notice:
	// in this case, "xxxx10" comes after "xxxx2"
	{
		CString tmpStr1, tmpStr2;
		int index = str1.FindOneOf("0123456789");
		if(index!=-1)
			tmpStr1 = str1.Right(str1.GetLength()-index);
		index = str2.FindOneOf("0123456789");
		if(index!=-1)
			tmpStr2 = str2.Right(str2.GetLength()-index);

		tmpStr1 = tmpStr1.SpanIncluding("0123456789");
		tmpStr2 = tmpStr2.SpanIncluding("0123456789");

		if((tmpStr1=="") && (tmpStr2==""))
			m_nComp = str1.CompareNoCase(str2);
		else
		{
			int num1 = atoi(tmpStr1);
			int num2 = atoi(tmpStr2);

			tmpStr1 = str1.SpanExcluding("0123456789");
			tmpStr2 = str2.SpanExcluding("0123456789");

			if(tmpStr1 == tmpStr2)
			{
				if(num1 > num2)
					m_nComp = 1;
				else
				if(num1 < num2)
					m_nComp = -1;
				else
					m_nComp = str1.CompareNoCase(str2);
			}
			else
				m_nComp = str1.CompareNoCase(str2);			
		}
	}

	if(!pSortType->bAscending)
	{
		if(m_nComp == 1)
			m_nComp = -1;
		else
		if(m_nComp == -1)
			m_nComp = 1;
	}

	return m_nComp;
}

BOOL CNewTreeListCtrl::SortItems( int nCol, BOOL bAscending, HTREEITEM low)
{
	TV_SORTCB tSort;

	tSort.hParent = low;
	tSort.lpfnCompare = CompareFunc;

	SSortType *pSortType = new SSortType;
	pSortType->nCol = nCol;
	pSortType->bAscending = bAscending;
	tSort.lParam = (LPARAM)pSortType;

	BOOL m_bReturn = SortChildrenCB(&tSort);

	delete pSortType;

	return m_bReturn;
}

void CNewTreeListCtrl::MemDeleteAllItems(HTREEITEM hParent)
{
	HTREEITEM hItem = hParent;
	CTLItem *pItem;

	while(hItem!=NULL)
	{
		pItem = (CTLItem *)CTreeCtrl::GetItemData(hItem);
		if(pItem)
			delete pItem;

		if(ItemHasChildren(hItem))
			MemDeleteAllItems(GetChildItem(hItem));

		hItem = GetNextSiblingItem(hItem);
	}
}

BOOL CNewTreeListCtrl::DeleteAllItems()
{
	LockWindowUpdate();
	BeginWaitCursor();

	MemDeleteAllItems(GetRootItem());
	BOOL m_bReturn = CTreeCtrl::DeleteAllItems();

	EndWaitCursor();
	UnlockWindowUpdate();
	return m_bReturn;
}

void CNewTreeListCtrl::OnDestroy()
{
	MemDeleteAllItems(GetRootItem());

	CTreeCtrl::OnDestroy();
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美大度的电影原声| 亚洲人成电影网站色mp4| 制服丝袜在线91| 欧洲av一区二区嗯嗯嗯啊| 91亚洲精品一区二区乱码| 波波电影院一区二区三区| 国产宾馆实践打屁股91| 成人av在线网站| 成人国产在线观看| 91免费看片在线观看| 欧美性生活大片视频| 欧美日韩午夜精品| 欧美一区二区精品在线| 日韩片之四级片| 337p粉嫩大胆噜噜噜噜噜91av| 精品国产乱码久久久久久夜甘婷婷| 欧美精品一区二区三区蜜桃视频 | 精品999在线播放| 欧美成人乱码一区二区三区| 日韩欧美国产三级电影视频| 欧美xfplay| 亚洲国产岛国毛片在线| 亚洲另类春色国产| 性做久久久久久久免费看| 麻豆免费看一区二区三区| 国产一区二区在线观看免费 | 在线成人免费观看| 欧美va亚洲va香蕉在线| 国产日韩欧美精品在线| 亚洲三级免费观看| 日韩国产精品久久久久久亚洲| 精品亚洲国内自在自线福利| 国产精品亚洲第一区在线暖暖韩国| 成人美女视频在线观看| 欧美专区在线观看一区| 日韩一区二区三区视频| 久久久91精品国产一区二区精品| 亚洲欧美色一区| 日产国产欧美视频一区精品| 国产女同性恋一区二区| 亚洲天堂a在线| 日韩一区欧美二区| 国产一区二区三区| 一本到不卡免费一区二区| 91精品国产一区二区人妖| 欧美国产1区2区| 亚洲高清视频在线| 国产精品99久| 欧美性色黄大片| 国产亚洲综合色| 亚洲h精品动漫在线观看| 国产精品综合一区二区三区| 91福利在线免费观看| xnxx国产精品| 亚洲国产精品久久艾草纯爱 | 99re8在线精品视频免费播放| 欧美丰满高潮xxxx喷水动漫| 国产精品亲子伦对白| 亚洲成人av电影在线| 成人午夜激情片| 91精品国产一区二区人妖| 亚洲品质自拍视频网站| 狠狠久久亚洲欧美| 欧美日韩亚洲综合在线| 国产精品毛片大码女人| 久久精品av麻豆的观看方式| 欧美午夜视频网站| 欧美高清在线一区| 韩国成人在线视频| 欧美欧美午夜aⅴ在线观看| 亚洲欧美在线视频观看| 黄色日韩三级电影| 91精品国产高清一区二区三区| 亚洲色欲色欲www在线观看| 国产一区二区视频在线| 91麻豆精品国产91久久久| 一区二区三区四区蜜桃| hitomi一区二区三区精品| 2023国产精华国产精品| 日日夜夜免费精品| 欧美无乱码久久久免费午夜一区| 中文字幕亚洲视频| 国产精品一区一区| 精品国产青草久久久久福利| 五月天网站亚洲| 欧美中文一区二区三区| 亚洲男帅同性gay1069| 99精品久久久久久| 久久新电视剧免费观看| 精品久久久久av影院| 99久久777色| 久久午夜羞羞影院免费观看| 麻豆精品国产91久久久久久| 欧美日韩国产大片| 亚洲精品久久久蜜桃| 色偷偷一区二区三区| 制服丝袜一区二区三区| 久久嫩草精品久久久久| 九九九久久久精品| 精品区一区二区| 青娱乐精品在线视频| 欧美日韩美女一区二区| 亚洲www啪成人一区二区麻豆| 欧美综合一区二区三区| 亚洲综合一二区| 在线免费不卡视频| 亚洲国产成人精品视频| 欧洲日韩一区二区三区| 亚洲国产精品久久久男人的天堂| 欧美怡红院视频| 爽好久久久欧美精品| 日韩欧美一区二区免费| 久久精品久久99精品久久| 日韩精品综合一本久道在线视频| 美女www一区二区| 欧美videos中文字幕| 国产一区二区三区精品视频| 日本一区二区三区国色天香 | 久久国产精品第一页| 精品精品国产高清a毛片牛牛 | 精品亚洲欧美一区| 国产日韩欧美综合一区| av在线综合网| 一区二区三区四区在线播放| 欧美三级电影在线观看| 日本亚洲电影天堂| 精品国精品自拍自在线| 国产·精品毛片| 亚洲免费在线看| 欧美日韩国产大片| 加勒比av一区二区| ●精品国产综合乱码久久久久| 欧美系列一区二区| 美女在线视频一区| 国产精品久久久久一区二区三区 | 成人av影院在线| 亚洲精品视频在线观看免费 | 一区二区欧美精品| 欧美一区二区三区在线观看| 国产在线精品一区二区三区不卡| 国产日韩欧美麻豆| 欧美日韩小视频| 国产露脸91国语对白| 亚洲激情五月婷婷| 欧美变态凌虐bdsm| 一本大道久久a久久综合婷婷| 日韩电影在线一区二区| 日本一区二区三区久久久久久久久不 | 95精品视频在线| 中文字幕在线不卡视频| 欧美日本高清视频在线观看| 国模大尺度一区二区三区| 亚洲摸摸操操av| 久久一区二区三区四区| 在线免费一区三区| 国产黑丝在线一区二区三区| 亚洲最大成人网4388xx| 久久综合狠狠综合| 在线观看网站黄不卡| 国产激情一区二区三区四区| 无吗不卡中文字幕| 国产精品久久久久久久久动漫 | 国产欧美在线观看一区| 欧美日韩的一区二区| www.欧美日韩| 欧美aaa在线| 亚洲激情男女视频| 国产欧美日韩综合精品一区二区 | 一区二区三区四区乱视频| 精品国产伦一区二区三区免费 | 久久亚区不卡日本| 欧美精品xxxxbbbb| 色哟哟国产精品免费观看| 国产盗摄一区二区| 免费在线观看视频一区| 一区二区三区四区视频精品免费| 国产无遮挡一区二区三区毛片日本| 欧美情侣在线播放| 色婷婷av一区二区三区gif| 福利一区福利二区| 国产伦精品一区二区三区在线观看| 亚洲欧美日韩综合aⅴ视频| 久久久亚洲精品石原莉奈| 日韩一级二级三级| 欧美视频一区在线观看| av电影天堂一区二区在线观看| 国内精品在线播放| 麻豆国产一区二区| 日韩成人精品在线| 天天综合网天天综合色| 亚洲在线视频一区| 亚洲美女在线国产| 国产精品久久久久婷婷二区次| 2024国产精品视频| 日韩精品一区二区三区蜜臀| 555www色欧美视频| 欧美日韩国产另类一区| 欧美天堂一区二区三区| 91精品办公室少妇高潮对白| 色婷婷久久99综合精品jk白丝|