亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产精品一二三在| 视频一区中文字幕国产| 国产精品一区三区| 国产日韩av一区| 成人爽a毛片一区二区免费| 国产日韩欧美麻豆| 97久久精品人人做人人爽| 亚洲视频在线观看一区| 欧美在线观看一二区| 午夜精品久久久久久久久 | 麻豆91在线观看| 日韩欧美国产一二三区| 国产99精品在线观看| 一区二区三区免费在线观看| 欧美性感一区二区三区| 久久精品久久99精品久久| 欧美激情中文字幕一区二区| 欧洲一区二区三区在线| 日韩中文字幕一区二区三区| 欧美精品一区二区不卡| 99久久国产免费看| 青青青伊人色综合久久| 国产精品色哟哟| 欧美日韩一二区| 粗大黑人巨茎大战欧美成人| 亚洲一区二区三区四区在线观看 | 亚洲成a天堂v人片| 欧美成人性战久久| 99视频在线精品| 三级欧美韩日大片在线看| 久久久久久99精品| 欧美日韩精品欧美日韩精品| 国产一区二区三区日韩| 一区二区久久久久| 久久综合久久综合久久综合| 在线观看不卡一区| 国产一区在线视频| 亚洲图片有声小说| 久久久www成人免费无遮挡大片 | 国产精品一区不卡| 亚洲综合久久久| 国产精品美女久久久久高潮| 久久爱另类一区二区小说| 中文字幕高清一区| 日韩欧美亚洲另类制服综合在线| 欧美午夜一区二区三区| 精品综合久久久久久8888| 亚洲人成网站精品片在线观看| 日韩一区二区精品| 91麻豆国产福利精品| 狠狠色丁香婷婷综合| 亚洲图片欧美视频| 亚洲国产岛国毛片在线| 91精品国产全国免费观看| 94-欧美-setu| 成人国产精品免费| 久久66热偷产精品| 青椒成人免费视频| 爽好多水快深点欧美视频| 亚洲精品伦理在线| 中文在线免费一区三区高中清不卡| 91精品在线麻豆| 日本高清成人免费播放| 成人app下载| 韩国成人在线视频| 日韩av中文字幕一区二区| 亚洲一区二区在线免费观看视频| 国产精品久久久久影院亚瑟| 久久久久久电影| 337p日本欧洲亚洲大胆精品| 日韩视频免费观看高清完整版在线观看 | 亚洲自拍欧美精品| 亚洲免费高清视频在线| 国产999精品久久久久久绿帽| 爽好多水快深点欧美视频| 亚洲一区免费在线观看| 亚洲人成人一区二区在线观看| 国产清纯美女被跳蛋高潮一区二区久久w | 国产精品一区在线| 国产美女娇喘av呻吟久久 | 国产一区视频导航| 国产在线不卡一卡二卡三卡四卡| 日韩电影在线一区| 日本aⅴ免费视频一区二区三区| 亚洲 欧美综合在线网络| 亚洲午夜影视影院在线观看| 亚洲高清免费在线| 三级不卡在线观看| 精品一区二区日韩| 国产精品综合一区二区三区| 国产a区久久久| 97久久久精品综合88久久| 色美美综合视频| 欧美日韩久久一区| 日韩色在线观看| 久久精品夜夜夜夜久久| 中文字幕欧美国产| 亚洲少妇30p| 99热99精品| 国产精品网友自拍| 91精品欧美综合在线观看最新| 欧美一区二区在线播放| 日韩欧美你懂的| 中文字幕欧美日本乱码一线二线| 18欧美乱大交hd1984| 亚洲一区在线视频观看| 免费成人av资源网| 国产福利91精品一区二区三区| eeuss影院一区二区三区 | 亚洲色图另类专区| 亚洲成a人片在线观看中文| 美女一区二区三区在线观看| 国内国产精品久久| 99久久精品国产导航| 欧美日韩精品一区二区三区蜜桃 | 日韩免费观看高清完整版| 久久久精品人体av艺术| 中文字幕一区二区在线播放| 亚洲国产一区二区视频| 精品一区二区三区在线播放| 不卡在线视频中文字幕| 在线不卡的av| 国产精品午夜春色av| 石原莉奈一区二区三区在线观看| 国产剧情一区二区| 在线观看精品一区| 久久这里只有精品6| 亚洲一区二区精品3399| 国产黄人亚洲片| 欧美日韩成人在线| 国产精品人成在线观看免费| 日日摸夜夜添夜夜添国产精品| 国产不卡一区视频| 欧美一区二区日韩一区二区| 中文字幕一区免费在线观看| 琪琪一区二区三区| 91看片淫黄大片一级| 久久亚洲一区二区三区明星换脸| 一区二区三区色| 国产精品亚洲成人| 欧美一级在线视频| 亚洲美腿欧美偷拍| 国产91在线|亚洲| 欧美一区二区三区视频免费| 亚洲美女屁股眼交3| 福利电影一区二区| 日韩三级视频中文字幕| 亚洲国产裸拍裸体视频在线观看乱了 | 亚洲欧美视频在线观看视频| 国产精品一区二区三区乱码 | 欧美成人一区二区三区在线观看| 亚洲欧美激情小说另类| 国产东北露脸精品视频| 亚洲精品一区二区三区香蕉| 日韩精品91亚洲二区在线观看| 91亚洲国产成人精品一区二区三 | 色呦呦一区二区三区| 国产欧美综合在线观看第十页| 国产资源精品在线观看| 国产日韩三级在线| aaa亚洲精品| 亚洲国产一二三| 精品国产a毛片| 不卡的电视剧免费网站有什么| 精品成人a区在线观看| 91啪亚洲精品| 蜜桃av噜噜一区| 久久精品国产精品青草| 欧美日韩成人高清| 亚洲国产精品天堂| 欧美午夜精品一区| 亚洲成在人线免费| 日韩精品一区二区三区四区视频| 精品国产伦理网| 激情久久久久久久久久久久久久久久| 欧美日韩精品电影| 午夜精品福利一区二区蜜股av| 精品视频全国免费看| 亚洲电影一级黄| 日韩欧美你懂的| 国产精品资源站在线| 中文字幕精品—区二区四季| 成人激情免费网站| 综合自拍亚洲综合图不卡区| 色综合色综合色综合色综合色综合 | 国产凹凸在线观看一区二区| 国产精品女上位| www.亚洲精品| 亚洲综合丁香婷婷六月香| 欧美高清www午色夜在线视频| 日韩高清在线电影| 久久精品人人做人人综合 | 午夜精品久久久久久不卡8050| 欧美日韩亚洲综合在线| 日韩精品一区第一页| 精品久久久久久久久久久久久久久| 国模无码大尺度一区二区三区| 欧美国产精品v| 欧美最新大片在线看| 免费日本视频一区|