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

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

?? xheaderctrl.cpp

?? 一個類似于CListCtrl的控件類
?? CPP
字號:
// XHeaderCtrl.cpp
//
// Author:  Hans Dietrich
//          hdietrich2@hotmail.com
//
// This code is based on "Outlook 98-Style FlatHeader Control" 
// by Maarten Hoeben.
//
// See http://www.codeguru.com/listview/FlatHeader.shtml
//
// This software is released into the public domain.
// You are free to use it in any way you like.
//
// This software is provided "as is" with no expressed
// or implied warranty.  I accept no liability for any
// damage or loss of business that this software may cause.
//
///////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "XHeaderCtrl.h"

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

/////////////////////////////////////////////////////////////////////////////
// CXHeaderCtrl

IMPLEMENT_DYNCREATE(CXHeaderCtrl, CHeaderCtrl)

BEGIN_MESSAGE_MAP(CXHeaderCtrl, CHeaderCtrl)
	//{{AFX_MSG_MAP(CXHeaderCtrl)
	ON_MESSAGE(HDM_INSERTITEMA, OnInsertItem)
	ON_MESSAGE(HDM_INSERTITEMW, OnInsertItem)
	ON_MESSAGE(HDM_DELETEITEM, OnDeleteItem)
	ON_MESSAGE(HDM_SETIMAGELIST, OnSetImageList)
	ON_MESSAGE(HDM_LAYOUT, OnLayout)
	ON_WM_PAINT()
	ON_WM_SYSCOLORCHANGE()
	ON_WM_ERASEBKGND()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

///////////////////////////////////////////////////////////////////////////////
// ctor
CXHeaderCtrl::CXHeaderCtrl()
{
	m_bDoubleBuffer = TRUE;
	m_iSpacing = 6;
	m_sizeArrow.cx = 8;
	m_sizeArrow.cy = 8;
	m_sizeImage.cx = 0;
	m_sizeImage.cy = 0;
	m_bStaticBorder = FALSE;
	m_nDontDropCursor = 0;
	m_bResizing = FALSE;
	m_nClickFlags = 0;

	m_cr3DHighLight = ::GetSysColor(COLOR_3DHIGHLIGHT);
	m_cr3DShadow    = ::GetSysColor(COLOR_3DSHADOW);
	m_cr3DFace      = ::GetSysColor(COLOR_3DFACE);
	m_crBtnText     = ::GetSysColor(COLOR_BTNTEXT);
}

///////////////////////////////////////////////////////////////////////////////
// dtor
CXHeaderCtrl::~CXHeaderCtrl()
{
}

///////////////////////////////////////////////////////////////////////////////
// ModifyProperty
BOOL CXHeaderCtrl::ModifyProperty(WPARAM wParam, LPARAM lParam)
{
	switch(wParam)
	{
		case FH_PROPERTY_SPACING:
			m_iSpacing = (int)lParam;
			break;

		case FH_PROPERTY_ARROW:
			m_sizeArrow.cx = LOWORD(lParam);
			m_sizeArrow.cy = HIWORD(lParam);
			break;

		case FH_PROPERTY_STATICBORDER:
			m_bStaticBorder = (BOOL)lParam;
			break;

		case FH_PROPERTY_DONTDROPCURSOR:
			m_nDontDropCursor = (UINT)lParam;
			break;

		default:
			return FALSE;
	}

	Invalidate();
	return TRUE;
}

///////////////////////////////////////////////////////////////////////////////
// DrawCtrl
void CXHeaderCtrl::DrawCtrl(CDC* pDC)
{
	CRect rectClip;
	if (pDC->GetClipBox(&rectClip) == ERROR)
		return;

	CRect rectClient, rectItem;
	GetClientRect(&rectClient);

    pDC->FillSolidRect(rectClip, m_cr3DFace);

	int iItems = GetItemCount();
	ASSERT(iItems >= 0);

	CPen penHighLight(PS_SOLID, 1, m_cr3DHighLight);
	CPen penShadow(PS_SOLID, 1, m_cr3DShadow);
	CPen* pPen = pDC->GetCurrentPen();

	CFont* pFont = pDC->SelectObject(GetFont());

	pDC->SetBkColor(m_cr3DFace);
	pDC->SetTextColor(m_crBtnText);

	int iWidth = 0;

	for (int i = 0; i < iItems; i++)
	{
		int iItem = OrderToIndex(i);

		TCHAR szText[FLATHEADER_TEXT_MAX];

		HDITEM hditem;
		hditem.mask = HDI_WIDTH|HDI_FORMAT|HDI_TEXT|HDI_IMAGE|HDI_BITMAP;
		hditem.pszText = szText;
		hditem.cchTextMax = sizeof(szText);
		VERIFY(GetItem(iItem, &hditem));

		VERIFY(GetItemRect(iItem, rectItem));

		if (rectItem.right >= rectClip.left || rectItem.left <= rectClip.right)
		{
			if (hditem.fmt & HDF_OWNERDRAW)
			{
				DRAWITEMSTRUCT disItem;
				disItem.CtlType = ODT_BUTTON;
				disItem.CtlID = GetDlgCtrlID();
				disItem.itemID = iItem;
				disItem.itemAction = ODA_DRAWENTIRE;
				disItem.itemState = 0;
				disItem.hwndItem = m_hWnd;
				disItem.hDC = pDC->m_hDC;
				disItem.rcItem = rectItem;
				disItem.itemData = 0;

				DrawItem(&disItem);
			}
			else
			{
				rectItem.DeflateRect(m_iSpacing, 0);
				DrawItem(pDC, rectItem, &hditem);
				rectItem.InflateRect(m_iSpacing, 0);

				//if (m_nClickFlags & MK_LBUTTON && m_iHotIndex == iItem && m_hdhtiHotItem.flags & HHT_ONHEADER)
				//	pDC->InvertRect(rectItem);
			}

			if (i < iItems-1)
			{
				pDC->SelectObject(&penShadow);
				pDC->MoveTo(rectItem.right-1, rectItem.top+2);
				pDC->LineTo(rectItem.right-1, rectItem.bottom-2);

				pDC->SelectObject(&penHighLight);
				pDC->MoveTo(rectItem.right, rectItem.top+2);
				pDC->LineTo(rectItem.right, rectItem.bottom-2);
			}
		}

		iWidth += hditem.cxy;
	}

	if (iWidth > 0)
	{
		rectClient.right = rectClient.left + iWidth;
		pDC->Draw3dRect(rectClient, m_cr3DHighLight, m_cr3DShadow);
	}

	pDC->SelectObject(pFont);
	pDC->SelectObject(pPen);

	penHighLight.DeleteObject();
	penShadow.DeleteObject();
}

///////////////////////////////////////////////////////////////////////////////
// DrawItem
void CXHeaderCtrl::DrawItem(LPDRAWITEMSTRUCT)
{
	ASSERT(FALSE);  // must override for self draw header controls
}

///////////////////////////////////////////////////////////////////////////////
// DrawItem
void CXHeaderCtrl::DrawItem(CDC* pDC, CRect rect, LPHDITEM lphdi)
{
	ASSERT(lphdi->mask & HDI_FORMAT);

	int iWidth = 0;

	CBitmap* pBitmap = NULL;
	BITMAP BitmapInfo;

	if (lphdi->fmt & HDF_BITMAP)
	{
		ASSERT(lphdi->mask & HDI_BITMAP);
		ASSERT(lphdi->hbm);

		pBitmap = CBitmap::FromHandle(lphdi->hbm);
		if (pBitmap)
			VERIFY(pBitmap->GetObject(sizeof(BITMAP), &BitmapInfo));
	}

	rect.left += ((iWidth = DrawImage(pDC, rect, lphdi, FALSE)) != 0) ? iWidth + m_iSpacing : 0;
	rect.right -= ((iWidth = DrawBitmap(pDC, rect, lphdi, pBitmap, &BitmapInfo, TRUE)) != 0) ? 
		iWidth + m_iSpacing : 0;
	DrawText(pDC, rect, lphdi);
}

///////////////////////////////////////////////////////////////////////////////
// DrawImage
int CXHeaderCtrl::DrawImage(CDC* pDC, CRect rect, LPHDITEM lphdi, BOOL bRight)
{
	CImageList* pImageList = GetImageList();
	int iWidth = 0;

	if (lphdi->iImage != XHEADERCTRL_NO_IMAGE)
	{
		if (pImageList)
		{
			if (rect.Width() > 0)
			{
				POINT point;

				point.y = rect.CenterPoint().y - (m_sizeImage.cy >> 1);

				if (bRight)
					point.x = rect.right - m_sizeImage.cx;
				else
					point.x = rect.left;

				SIZE size;
				size.cx = rect.Width()<m_sizeImage.cx ? rect.Width():m_sizeImage.cx;
				size.cy = m_sizeImage.cy;

				// save image list background color
				COLORREF rgb = pImageList->GetBkColor();

				// set image list background color to same as header control
				pImageList->SetBkColor(pDC->GetBkColor());
				pImageList->DrawIndirect(pDC, lphdi->iImage, point, size, CPoint(0, 0));
				pImageList->SetBkColor(rgb);

				iWidth = m_sizeImage.cx;
			}
		}
	}

	return iWidth;
}

///////////////////////////////////////////////////////////////////////////////
// DrawBitmap
int CXHeaderCtrl::DrawBitmap(CDC* pDC, 
								CRect rect, 
								LPHDITEM lphdi, 
								CBitmap* pBitmap, 
								BITMAP* pBitmapInfo, 
								BOOL bRight)
{
	UNUSED_ALWAYS(lphdi);

	int iWidth = 0;

	if (pBitmap)
	{
		iWidth = pBitmapInfo->bmWidth;
		if (iWidth <= rect.Width() && rect.Width() > 0)
		{
			POINT point;

			point.y = rect.CenterPoint().y - (pBitmapInfo->bmHeight >> 1);

			if (bRight)
				point.x = rect.right - iWidth;
			else
				point.x = rect.left;

			CDC dc;
			if (dc.CreateCompatibleDC(pDC) == TRUE) 
			{
				VERIFY(dc.SelectObject(pBitmap));
				iWidth = pDC->BitBlt(
					point.x, point.y, 
					pBitmapInfo->bmWidth, pBitmapInfo->bmHeight, 
					&dc, 
					0, 0, 
					SRCCOPY
				) ? iWidth:0;
			}
			else 
				iWidth = 0;
		}
		else
			iWidth = 0;
	}

	return iWidth;
}

///////////////////////////////////////////////////////////////////////////////
// DrawText
int CXHeaderCtrl::DrawText(CDC* pDC, CRect rect, LPHDITEM lphdi)
{
	CSize size;

	pDC->SetTextColor(RGB(0,0,255));

	if (rect.Width() > 0 && lphdi->mask & HDI_TEXT && lphdi->fmt & HDF_STRING)
	{
		size = pDC->GetTextExtent(lphdi->pszText);

		// always center column headers
		pDC->DrawText(lphdi->pszText, -1, rect, 
			DT_CENTER|DT_END_ELLIPSIS|DT_SINGLELINE|DT_VCENTER);
	}

	size.cx = rect.Width()>size.cx ? size.cx:rect.Width();
	return size.cx>0 ? size.cx:0;
}

///////////////////////////////////////////////////////////////////////////////
// OnInsertItem
LRESULT CXHeaderCtrl::OnInsertItem(WPARAM, LPARAM)
{
	return Default();
}

///////////////////////////////////////////////////////////////////////////////
// OnDeleteItem
LRESULT CXHeaderCtrl::OnDeleteItem(WPARAM, LPARAM)
{
	return Default();
}

///////////////////////////////////////////////////////////////////////////////
// OnSetImageList
LRESULT CXHeaderCtrl::OnSetImageList(WPARAM, LPARAM lParam)
{
	CImageList* pImageList;
	pImageList = CImageList::FromHandle((HIMAGELIST)lParam);

	IMAGEINFO info;
	if (pImageList->GetImageInfo(0, &info))
	{
		m_sizeImage.cx = info.rcImage.right - info.rcImage.left;
		m_sizeImage.cy = info.rcImage.bottom - info.rcImage.top;
	}

	return Default();
}

///////////////////////////////////////////////////////////////////////////////
// OnLayout
LRESULT CXHeaderCtrl::OnLayout(WPARAM, LPARAM lParam)
{
	LPHDLAYOUT lphdlayout = (LPHDLAYOUT)lParam;

	if (m_bStaticBorder)
		lphdlayout->prc->right += GetSystemMetrics(SM_CXBORDER)*2;

	return CHeaderCtrl::DefWindowProc(HDM_LAYOUT, 0, lParam);
}

///////////////////////////////////////////////////////////////////////////////
// OnSysColorChange
void CXHeaderCtrl::OnSysColorChange() 
{
	TRACE(_T("in CXHeaderCtrl::OnSysColorChange\n"));

	CHeaderCtrl::OnSysColorChange();
	
	m_cr3DHighLight = ::GetSysColor(COLOR_3DHIGHLIGHT);
	m_cr3DShadow    = ::GetSysColor(COLOR_3DSHADOW);
	m_cr3DFace      = ::GetSysColor(COLOR_3DFACE);
	m_crBtnText     = ::GetSysColor(COLOR_BTNTEXT);
}

///////////////////////////////////////////////////////////////////////////////
// OnEraseBkgnd
BOOL CXHeaderCtrl::OnEraseBkgnd(CDC* pDC) 
{
	UNUSED_ALWAYS(pDC);
	return TRUE;
}

///////////////////////////////////////////////////////////////////////////////
// OnPaint
void CXHeaderCtrl::OnPaint() 
{
    CPaintDC dc(this);

    if (m_bDoubleBuffer)
    {
        CMemDC MemDC(&dc);
        DrawCtrl(&MemDC);
    }
    else
        DrawCtrl(&dc);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品一区二区三区视频 | 自拍偷自拍亚洲精品播放| 精品久久久久久久久久久久久久久久久 | 91.麻豆视频| 日韩国产精品91| 精品国产百合女同互慰| 美女网站色91| 日韩女优毛片在线| 不卡一区二区在线| 婷婷久久综合九色综合绿巨人| 欧美日韩国产高清一区二区三区| 亚洲高清在线精品| 国产亚洲欧美在线| 欧美久久免费观看| 99久久久久久| 精品一区二区三区视频在线观看| 亚洲国产成人私人影院tom| 色欧美片视频在线观看| 国产乱码字幕精品高清av| 一区二区三区在线免费| 精品国产一区二区亚洲人成毛片 | 欧美一区二区三区视频在线| 国产中文一区二区三区| 亚洲高清视频中文字幕| 亚洲欧洲无码一区二区三区| 亚洲精品一区二区三区香蕉| 精品视频999| 91麻豆免费看片| 91小视频在线观看| www.日韩在线| 99国产精品国产精品毛片| 成人午夜电影网站| 99热99精品| 一本久道中文字幕精品亚洲嫩| 国产精品系列在线播放| 国产精品综合网| 国产精品一线二线三线| 国产一区在线观看麻豆| 国产精品99久久久| 成人免费观看av| 在线视频一区二区三区| 在线免费观看视频一区| 在线亚洲人成电影网站色www| 国产suv精品一区二区三区| 成人黄动漫网站免费app| 成人国产电影网| 欧美日韩国产成人在线免费| 欧美一区二区免费视频| 国产日韩精品一区二区浪潮av | 国产精品久久99| 一区二区在线免费| 国产综合色视频| 日本精品一区二区三区四区的功能| 色94色欧美sute亚洲线路一ni| 欧美综合欧美视频| 国产日韩高清在线| 偷拍自拍另类欧美| 99视频国产精品| 欧美成人艳星乳罩| 一区二区三区精品视频| 久久99精品一区二区三区| 99久久精品国产一区二区三区| 欧美日韩一区三区四区| 久久久噜噜噜久久人人看| 日韩中文欧美在线| 欧美自拍偷拍午夜视频| 中文字幕一区免费在线观看| 久久精品999| 91精品国产色综合久久久蜜香臀| 综合激情网...| av亚洲精华国产精华精| 精品毛片乱码1区2区3区| 男男成人高潮片免费网站| 91成人看片片| 婷婷一区二区三区| 欧美日韩视频一区二区| 亚洲一级二级在线| 色综合久久久久网| 亚洲一区二区四区蜜桃| a4yy欧美一区二区三区| 国产精品系列在线| 一本大道av伊人久久综合| 亚洲天堂精品在线观看| 欧美中文字幕亚洲一区二区va在线| 国产精品色眯眯| 99久久精品国产观看| 自拍偷拍欧美精品| 91精品国产美女浴室洗澡无遮挡| 亚洲一级二级在线| 久久亚洲私人国产精品va媚药| 国产剧情一区在线| 一区二区三区欧美日| 3d动漫精品啪啪一区二区竹菊| 婷婷成人激情在线网| 日韩欧美在线1卡| 91丝袜美女网| 人禽交欧美网站| 中文字幕五月欧美| 91.麻豆视频| 色婷婷久久久综合中文字幕| 日本亚洲视频在线| 一区二区免费在线| 国产欧美日韩一区二区三区在线观看| 成人av电影免费观看| 亚洲成人免费电影| 国产精品高潮呻吟久久| 337p亚洲精品色噜噜| 本田岬高潮一区二区三区| 激情久久五月天| 亚洲图片有声小说| 亚洲激情图片qvod| 亚洲国产精品成人综合 | 国产成人免费在线观看不卡| 日韩国产在线一| 一区二区高清视频在线观看| 亚洲精品一线二线三线无人区| 欧美体内she精高潮| 色婷婷综合在线| 欧美亚洲免费在线一区| 91网站最新网址| 欧美中文字幕一区二区三区| 一本色道久久综合亚洲91| 色婷婷亚洲一区二区三区| 欧洲精品中文字幕| 欧美久久久久中文字幕| 日韩亚洲欧美综合| 精品成人一区二区三区四区| 久久这里都是精品| 国产精品久久久久久久久免费相片| 久久你懂得1024| 一区二区三区欧美在线观看| 亚洲一区在线观看网站| 日韩高清一区二区| 成人av资源网站| 欧美久久久久久蜜桃| 久久影院视频免费| 亚洲一区二区三区中文字幕在线| 亚洲不卡一区二区三区| 精品亚洲国内自在自线福利| 成人免费看的视频| 欧美一级日韩一级| 国产精品美女久久久久久久| 亚洲老妇xxxxxx| 国产一区二区不卡在线| 色噜噜狠狠色综合中国| 精品国产乱码91久久久久久网站| 国产精品久久久久久久久快鸭| 亚洲成a天堂v人片| 91啪在线观看| 国产精品视频一二三| 久久av资源站| 日韩一区二区电影在线| 一区二区三区在线观看欧美| 久久精品国产精品亚洲红杏| 欧美伊人精品成人久久综合97| 国产免费成人在线视频| 久久成人免费电影| 8v天堂国产在线一区二区| 亚洲成a天堂v人片| 欧美一区二区人人喊爽| 免费在线一区观看| 久久综合色综合88| 国产乱色国产精品免费视频| 日韩美女一区二区三区| 久久99国产精品尤物| 国产亚洲成年网址在线观看| 狠狠色狠狠色综合| 中文字幕国产一区| 91色在线porny| 亚洲第一av色| 日韩免费成人网| 国产一区二区不卡在线| 亚洲国产精品国自产拍av| 91麻豆免费视频| 免费xxxx性欧美18vr| 日本一区二区综合亚洲| 精品视频全国免费看| 久久99国产乱子伦精品免费| 国产精品久久久久影视| 色欧美乱欧美15图片| 精品亚洲porn| 伊人婷婷欧美激情| 国产三级欧美三级| 在线观看不卡一区| 国产91精品入口| 青青国产91久久久久久| 综合久久久久久久| 久久久久久久性| 日韩欧美国产三级电影视频| eeuss鲁一区二区三区| 精品一区二区免费在线观看| 亚洲色大成网站www久久九九| 精品少妇一区二区| 在线不卡免费欧美| www日韩大片| 欧美男人的天堂一二区| 日本女人一区二区三区| 欧美一区二区不卡视频| 一区二区三区中文在线观看| 成人福利视频在线看|