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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? newtreelistctrl.cpp

?? vc++源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// NewTreeListCtrl.cpp : implementation file
//

#include "stdafx.h"
#include "TLView.h"
#include "NewTreeListCtrl.h"
#include "TLFrame.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define ID_TREE_LIST_HEADER 370

/////////////////////////////////////////////////////////////////////////////
// CTLItem

CTLItem::CTLItem()
{
	m_cEnding = ' ';
	m_itemString = "";
	m_Bold = FALSE;
	m_Color = ::GetSysColor(COLOR_WINDOWTEXT);
}

CTLItem::CTLItem(CTLItem &copyItem)
{
	m_cEnding = copyItem.m_cEnding;
	m_itemString = copyItem.GetItemString();
	m_Bold = copyItem.m_Bold;
	m_Color = copyItem.m_Color;
	itemData = copyItem.itemData;
}


CString CTLItem::GetSubstring(int m_nSub)
{
	CString m_tmpStr("");
	int i=0, nHits=0;
	int length = m_itemString.GetLength();

	while((i<length) && (nHits<=m_nSub))
	{
		if(m_itemString[i]==m_cEnding)
		{
			nHits++;
		}
		else
		if(nHits==m_nSub)
			m_tmpStr+=m_itemString[i];

		i++;
	}

	if((i>=length) && (nHits<m_nSub))
		return "";
	else
		return m_tmpStr;
}

void CTLItem::SetSubstring(int m_nSub, CString m_sText)
{
	CString m_tmpStr("");
	int i=0, nHits=0, first=0;
	int length = m_itemString.GetLength();

	while((i<length) && (nHits<=m_nSub))
	{
		if(m_itemString[i]==m_cEnding)
		{
			if(nHits!=m_nSub)
				first = i;
			nHits++;
		}

		i++;
	}

	CString m_newStr("");
	if((nHits>m_nSub) || ((nHits==m_nSub) && (i>=length)))
	{
		// insert in the middle
		if(first!=0)
		{
			m_newStr = m_itemString.Left(first);
			m_newStr += m_cEnding; 
		}
		m_newStr += m_sText;
		if(i<length)
		{
			m_newStr += m_cEnding;
			m_newStr += m_itemString.Right(m_itemString.GetLength()-i);
		}

		m_itemString=m_newStr;
	}
	else
	{
		// insert at the end
		for(i=nHits;i<m_nSub;i++)
			m_itemString+=m_cEnding;
		m_itemString+=m_sText;
	}
}

/////////////////////////////////////////////////////////////////////////////
// CNewTreeListCtrl

CNewTreeListCtrl::CNewTreeListCtrl()
{
	m_nColumns = m_nColumnsWidth = 0;
	m_nOffset = 0;
}

CNewTreeListCtrl::~CNewTreeListCtrl()
{
}


BEGIN_MESSAGE_MAP(CNewTreeListCtrl, CTreeCtrl)
	//{{AFX_MSG_MAP(CNewTreeListCtrl)
	ON_WM_PAINT()
	ON_WM_CREATE()
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONDBLCLK()
	ON_WM_KEYDOWN()
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CNewTreeListCtrl message handlers

int CNewTreeListCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CTreeCtrl::OnCreate(lpCreateStruct) == -1)
		return -1;


	return 0;
}

HTREEITEM CNewTreeListCtrl::GetTreeItem(int nItem)
{
	HTREEITEM m_ParentItem = GetRootItem();
	int m_nCount = 0;

	while((m_ParentItem!=NULL) && (m_nCount<nItem))
	{
		m_nCount ++ ;
		GetNextSiblingItem(m_ParentItem);
	}

	return m_ParentItem;
}

int CNewTreeListCtrl::GetListItem(HTREEITEM hItem)
{
	HTREEITEM m_ParentItem = GetRootItem();
	int m_nCount = 0;

	while((m_ParentItem!=NULL) && (m_ParentItem!=hItem))
	{
		m_nCount ++ ;
		GetNextSiblingItem(m_ParentItem);
	}

	return m_nCount;
}

int CNewTreeListCtrl::InsertColumn( int nCol, LPCTSTR lpszColumnHeading, int nFormat, int nWidth, int nSubItem)
{
	HD_ITEM hdi;
	hdi.mask = HDI_TEXT | HDI_FORMAT;
	if(nWidth!=-1)
	{
		hdi.mask |= HDI_WIDTH;
		hdi.cxy = nWidth;
	}
	
	hdi.pszText = (LPTSTR)lpszColumnHeading;
	hdi.fmt = HDF_OWNERDRAW;

	if(nFormat == LVCFMT_RIGHT)
		hdi.fmt |= HDF_RIGHT;
	else
	if(nFormat == LVCFMT_CENTER)
		hdi.fmt |= HDF_CENTER;
	else
		hdi.fmt |= HDF_LEFT;

	m_nColumns ++ ;

	int m_nReturn = m_wndHeader.InsertItem(nCol, &hdi);

	if(m_nColumns==1)
	{
		m_wndHeader.SetItemImage(m_nReturn, 0);
	}

	RecalcColumnsWidth();

	return m_nReturn;
}

int CNewTreeListCtrl::GetColumnWidth(int nCol)
{
	HD_ITEM hItem;
	hItem.mask = HDI_WIDTH;
	if(!m_wndHeader.GetItem(nCol, &hItem))
		return 0;

	return hItem.cxy;
}

int CNewTreeListCtrl::GetColumnAlign(int nCol)
{
	HD_ITEM hItem;
	hItem.mask = HDI_FORMAT;
	if(!m_wndHeader.GetItem(nCol, &hItem))
		return LVCFMT_LEFT;

	if(hItem.fmt & HDF_RIGHT)
		return LVCFMT_RIGHT;
	else
	if(hItem.fmt & HDF_CENTER)
		return LVCFMT_CENTER;
	else
		return LVCFMT_LEFT;
}

void CNewTreeListCtrl::RecalcColumnsWidth()
{
	m_nColumnsWidth = 0;
	for(int i=0;i<m_nColumns;i++)
		m_nColumnsWidth += GetColumnWidth(i);
}

void CNewTreeListCtrl::DrawItemText (CDC* pDC, CString text, CRect rect, int nWidth, int nFormat)
{
    //
    // Make sure the text will fit in the prescribed rectangle, and truncate
    // it if it won't.
    //
    BOOL bNeedDots = FALSE;
    int nMaxWidth = nWidth - 4;

    while ((text.GetLength()>0) && (pDC->GetTextExtent((LPCTSTR) text).cx > (nMaxWidth - 4))) {
        text = text.Left (text.GetLength () - 1);
        bNeedDots = TRUE;
    }

    if (bNeedDots) {
        if (text.GetLength () >= 1)
            text = text.Left (text.GetLength () - 1);
        text += "...";
    }

    //
    // Draw the text into the rectangle using MFC's handy CDC::DrawText
    // function.
    //
    rect.right = rect.left + nMaxWidth;

    UINT nStyle = DT_VCENTER | DT_SINGLELINE;
    if (nFormat == LVCFMT_LEFT)
        nStyle |= DT_LEFT;
    else if (nFormat == LVCFMT_CENTER)
        nStyle |= DT_CENTER;
    else // nFormat == LVCFMT_RIGHT
        nStyle |= DT_RIGHT;

	if((text.GetLength()>0) && (rect.right>rect.left))
		pDC->DrawText (text, rect, nStyle);
}


void CNewTreeListCtrl::OnPaint() 
{
	CPaintDC dc(this); // device context for painting

	CRect rcClip, rcClient;
	dc.GetClipBox( &rcClip );
	GetClientRect(&rcClient);

	// Set clip region to be same as that in paint DC
	CRgn rgn;
	rgn.CreateRectRgnIndirect( &rcClip );
	dc.SelectClipRgn(&rgn);
	rgn.DeleteObject();
	
	COLORREF m_wndColor = GetSysColor( COLOR_WINDOW );

	dc.SetViewportOrg(m_nOffset, 0);

	dc.SetTextColor(m_wndColor);

	 
	// First let the control do its default drawing.
	CWnd::DefWindowProc( WM_PAINT, (WPARAM)dc.m_hDC, 0 );

	HTREEITEM hItem = GetFirstVisibleItem();

	int n = GetVisibleCount(), m_nWidth;

	dc.FillSolidRect(GetColumnWidth(0),1,rcClient.Width(),rcClient.Height(),m_wndColor);

	CTLItem *pItem;

	// the most urgent thing is to erase the labels that were drawn by the tree
	while(hItem!=NULL && n>=0)
	{
		CRect rect;

		UINT selflag = TVIS_DROPHILITED | TVIS_SELECTED;
	
		CRect m_labelRect;
		GetItemRect( hItem, &m_labelRect, TRUE );
		GetItemRect( hItem, &rect, FALSE );
		if(GetColumnsNum()>1)
			rect.left = min(m_labelRect.left, GetColumnWidth(0));
		else
			rect.left = m_labelRect.left;
		rect.right = m_nColumnsWidth;
		dc.FillSolidRect(rect.left,rect.top,rect.Width(),rect.Height(),m_wndColor);

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

	// create the font
	CFont *pFontDC;
	CFont fontDC, boldFontDC;
	LOGFONT logfont;

	CFont *pFont = GetFont();
	pFont->GetLogFont( &logfont );

	fontDC.CreateFontIndirect( &logfont );
	pFontDC = dc.SelectObject( &fontDC );

	logfont.lfWeight = 700;
	boldFontDC.CreateFontIndirect( &logfont );

	// and now let's get to the painting itself

	hItem = GetFirstVisibleItem();
	n = GetVisibleCount();
	while(hItem!=NULL && n>=0)
	{
		CRect rect;

		UINT selflag = TVIS_DROPHILITED | TVIS_SELECTED;
	
		if ( !(GetItemState( hItem, selflag ) & selflag ))
		{
			dc.SetBkMode(TRANSPARENT);

			pItem = (CTLItem *)CTreeCtrl::GetItemData(hItem);
			CString sItem = pItem->GetItemText();


			CRect m_labelRect;
			GetItemRect( hItem, &m_labelRect, TRUE );
			GetItemRect( hItem, &rect, FALSE );
			if(GetColumnsNum()>1)
				rect.left = min(m_labelRect.left, GetColumnWidth(0));
			else
				rect.left = m_labelRect.left;
			rect.right = m_nColumnsWidth;


			dc.SetBkColor( m_wndColor );

			dc.SetTextColor( pItem->m_Color );

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

			DrawItemText(&dc, sItem, CRect(rect.left+2, rect.top, GetColumnWidth(0), rect.bottom), GetColumnWidth(0)-rect.left-2, GetColumnAlign(0));

			m_nWidth = 0;
			for(int i=1;i<m_nColumns;i++)
			{
				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));
			}
			
			dc.SetTextColor(::GetSysColor (COLOR_WINDOWTEXT ));

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

			CRect m_labelRect;
			GetItemRect( hItem, &m_labelRect, TRUE );
			GetItemRect( hItem, &rect, FALSE );
			if(GetColumnsNum()>1)
				rect.left = min(m_labelRect.left, GetColumnWidth(0));
			else
				rect.left = m_labelRect.left;
			rect.right = m_nColumnsWidth;


			// If the item is selected, paint the rectangle with the system color
			// COLOR_HIGHLIGHT

			COLORREF m_highlightColor = ::GetSysColor (COLOR_HIGHLIGHT);

			CBrush brush(m_highlightColor);
			dc.FillRect (rect, &brush);

			// draw a dotted focus rectangle

			dc.DrawFocusRect (rect);
			
			pItem = (CTLItem *)CTreeCtrl::GetItemData(hItem);
			CString sItem = pItem->GetItemText();

			dc.SetBkColor(m_highlightColor);

			dc.SetTextColor(::GetSysColor (COLOR_HIGHLIGHTTEXT));

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

			DrawItemText(&dc, sItem, CRect(rect.left+2, rect.top, GetColumnWidth(0), rect.bottom), GetColumnWidth(0)-rect.left-2, GetColumnAlign(0));

			m_nWidth = 0;
			for(int i=1;i<m_nColumns;i++)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧洲国内综合视频| 美女脱光内衣内裤视频久久影院| 国产精品乱子久久久久| 亚洲香肠在线观看| 色婷婷综合久久久久中文| 国产老妇另类xxxxx| 精品久久久久久久久久久久包黑料 | 精品理论电影在线| 裸体健美xxxx欧美裸体表演| 精品国产三级a在线观看| 成人网页在线观看| 亚洲一区二区三区自拍| 日韩免费电影网站| 96av麻豆蜜桃一区二区| 污片在线观看一区二区| 久久人人97超碰com| 99久久精品国产导航| 日韩电影免费一区| 久久久久久久网| 一本色道a无线码一区v| 天天av天天翘天天综合网| 日韩欧美一二三四区| 成人激情黄色小说| 亚洲成人综合视频| 国产日韩高清在线| 欧美日韩欧美一区二区| 国产麻豆视频一区二区| 夜夜亚洲天天久久| 精品久久久久久久久久久久久久久久久 | 中文字幕在线免费不卡| 欧美日韩国产精品自在自线| 国产成人高清在线| 五月天一区二区三区| 国产欧美一区二区精品婷婷| 欧美三级电影网站| 成人免费视频一区| 久久99久久久久| 亚洲激情在线激情| 国产日韩欧美高清| 日韩欧美一区二区视频| 欧美综合欧美视频| jlzzjlzz亚洲女人18| 极品少妇一区二区| 亚洲成人手机在线| 国产成人免费在线观看不卡| 亚洲国产另类精品专区| 国产精品污污网站在线观看| 日韩欧美国产电影| 欧美日韩一区二区不卡| av在线不卡免费看| 国产成人免费9x9x人网站视频| 亚洲国产精品久久久久秋霞影院 | 综合电影一区二区三区| 欧美va亚洲va| 91精品国产一区二区三区| 日本精品一区二区三区四区的功能| 精品一区二区三区在线播放视频 | 亚洲午夜免费视频| 中文字幕在线不卡国产视频| 久久久久久97三级| 精品欧美乱码久久久久久1区2区| 欧美日韩第一区日日骚| 欧美日韩日日摸| 在线亚洲高清视频| 色综合久久中文字幕| 99久久久精品| 99久久精品99国产精品| 高潮精品一区videoshd| 国产中文一区二区三区| 国产一区在线看| 老司机免费视频一区二区三区| 奇米色一区二区| 免费xxxx性欧美18vr| 麻豆精品久久久| 青青青伊人色综合久久| 另类小说色综合网站| 轻轻草成人在线| 精品综合久久久久久8888| 久久爱www久久做| 国产一区二区电影| 国产.精品.日韩.另类.中文.在线.播放 | 91免费视频网址| 91色综合久久久久婷婷| 91久久精品一区二区| 在线亚洲+欧美+日本专区| 在线观看欧美精品| 51久久夜色精品国产麻豆| 欧美一区欧美二区| 精品999久久久| 国产精品久线观看视频| 亚洲人成在线播放网站岛国| 一区二区三区久久| 日韩福利视频导航| 国产综合久久久久影院| 波多野结衣中文字幕一区| 91免费视频观看| 91精品国产黑色紧身裤美女| 精品国产欧美一区二区| 国产精品国产精品国产专区不蜜| 日韩理论片一区二区| 99riav久久精品riav| 色婷婷av一区二区三区之一色屋| 欧美日韩中文一区| 精品国产在天天线2019| 中文字幕一区免费在线观看| 亚洲国产一区视频| 国产一区二区三区香蕉| 99久久er热在这里只有精品15| 欧美日精品一区视频| 精品对白一区国产伦| 17c精品麻豆一区二区免费| 亚洲一区二区av在线| 免费三级欧美电影| 国产一区二区三区久久久 | 欧美写真视频网站| 日韩精品一区二区在线观看| 一区在线观看免费| 日韩精品一二三四| 成a人片国产精品| 欧美日韩dvd在线观看| 久久精品一区四区| 亚洲大型综合色站| 国产99久久久国产精品免费看 | 国产欧美精品一区二区三区四区| 亚洲日本免费电影| 国产一区二区伦理片| 欧美日韩国产综合草草| 国产精品―色哟哟| 久久这里只有精品视频网| 久久精品在这里| 国产丶欧美丶日本不卡视频| 波多野结衣中文一区| 精品国产电影一区二区| 亚洲精品成人精品456| 欧洲人成人精品| 亚州成人在线电影| 宅男在线国产精品| 国产精品88av| 老司机午夜精品| 精品久久久久久久久久久院品网| 97久久精品人人澡人人爽| 美国精品在线观看| 久久国产精品99久久人人澡| 视频一区在线播放| 亚洲成人精品一区| 免费欧美日韩国产三级电影| 日韩国产欧美视频| 亚洲国产婷婷综合在线精品| 国产网红主播福利一区二区| 风间由美中文字幕在线看视频国产欧美| 中文字幕在线一区| 日韩一区二区在线免费观看| 成人精品国产一区二区4080| 樱桃国产成人精品视频| 久久综合九色欧美综合狠狠| 日本道在线观看一区二区| 高清不卡一二三区| 国内外成人在线| 首页国产丝袜综合| 日韩av午夜在线观看| 亚洲男人的天堂在线aⅴ视频| 精品国产精品网麻豆系列| 91精品国产综合久久精品麻豆| 国产高清不卡二三区| 国产大片一区二区| 日本韩国欧美一区二区三区| 26uuu欧美| av一区二区三区| 日本强好片久久久久久aaa| 悠悠色在线精品| 一区二区三区在线播放| 成人免费在线观看入口| 日本一区二区三区四区| 亚洲卡通动漫在线| 伊人婷婷欧美激情| 国产裸体歌舞团一区二区| 91福利精品第一导航| 2022国产精品视频| 亚洲欧美电影院| 国产一区二区三区不卡在线观看 | 亚洲午夜精品在线| 国产精品欧美一区二区三区| 国产精品美女一区二区三区| 国产精品久久久久久久久久久免费看 | 中文字幕一区二区三区视频| 欧美电影免费观看高清完整版在线观看 | 精品一区二区免费在线观看| 久久精品国产99| 国内精品免费**视频| 五月激情六月综合| 久久成人免费网站| 337p亚洲精品色噜噜噜| 成人欧美一区二区三区视频网页| 欧美特级限制片免费在线观看| 欧美在线观看18| 欧美xfplay| 亚洲成人av免费| 国产成人综合网站| 欧美一激情一区二区三区| 亚洲精品视频在线|