⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 toolbarctrl.cpp

📁 3D reconstruction, medical image processing from colons, using intel image processing for based clas
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	ReleaseCapture();	pButton->wStatus[1] = RXTBS2_NORMAL;	DrawToolButton(nHitTest);	if(!bCancelLBtnDown)	{		CFrameWnd* pTarget = (CFrameWnd*)GetOwner();		if (pTarget == NULL || !pTarget->IsFrameWnd())			pTarget = GetParentFrame();		pTarget->SendMessage(WM_COMMAND, pButton->nID);	}}void RxToolBarCtrl::OnMouseMove(UINT nFlags, CPoint point) {	if(m_nMouseOverButton < 0)	{		m_nMouseOverButton = HitTest(point);		if(m_nMouseOverButton > -1)		{			RX_TBBUTTON	*pButton = GetButton(m_nMouseOverButton);			if(!(pButton->wStatus[0] & RXTBS1_DISABLE) && !(pButton->wStatus[0] & RXTBS1_CHECKED))			{				SetCapture();				pButton->wStatus[1] = RXTBS2_FOCUS;				DrawToolButton(m_nMouseOverButton);			}			else				m_nMouseOverButton = -1;		}	}	if(m_nMouseOverButton > -1)	{		if(m_nMouseOverButton != HitTest(point))		{			ReleaseCapture();			RX_TBBUTTON	*pButton = GetButton(m_nMouseOverButton);			pButton->wStatus[1] = RXTBS2_NORMAL;			DrawToolButton(m_nMouseOverButton);			m_nMouseOverButton = -1;		}	}	CWnd::OnMouseMove(nFlags, point);}/////////////////////////////////////////////////////////////////////////////// Draw Functionsvoid RxToolBarCtrl::OnPaint() {	CPaintDC dc(this); // device context for painting		RedrawWnd();	// Do not call CWnd::OnPaint() for painting messages}void RxToolBarCtrl::RedrawWnd(){	CDC		*pDC = GetDC();	CRect	rcClient, rect;	GetClientRect(rcClient);	// fill the background	CBrush	brush, *pOldBrush;	brush.CreateSolidBrush(RXCOLOR_11);	pOldBrush = pDC->SelectObject(&brush);	pDC->PatBlt(rcClient.left, rcClient.top, rcClient.Width(), rcClient.Height(), PATCOPY);	pDC->SelectObject(pOldBrush);	brush.DeleteObject();	ReleaseDC(pDC);	DrawToolButton();}void RxToolBarCtrl::DrawToolButton(int nIndex){	CDC		*pDC = GetDC();	CRect	rcClient, rect;	GetClientRect(rcClient);	// draw top grip line	rect.SetRect(rcClient.left+5, rcClient.top, rcClient.right-5, rcClient.top+3);	pDC->Draw3dRect(rect, RGB(255,255,255), RGB(124,124,124));	CPoint		ptOrg, ptTar, ptSrc;	ptOrg.x	= 8;			ptOrg.y = 14;			// 滚瓢甸狼 盔痢	ptTar.x = ptOrg.x;		ptTar.y = ptOrg.y;		// 角力 拳搁惑狼 滚瓢狼 困摹	ptSrc.x = 0;			ptSrc.y = 0;			// bitmap狼 困摹甫 唱鸥辰促	RX_TBBUTTON		*pButton;	for(int i = 0; i < m_ArrayButton.GetSize(); i++)	{		pButton = (RX_TBBUTTON *)m_ArrayButton.GetAt(i);		if(pButton->nID == IDTB_SEPARATOR)		{			ptSrc.x += pButton->wStatus[2];			ptTar.y += RX_TOOL_SEPARATOR;			CPen		pen, *pOldPen;			pen.CreatePen(PS_SOLID, 1, RGB(124,124,124));			pOldPen = pDC->SelectObject(&pen);			pDC->MoveTo(rcClient.left +5, ptTar.y-1);			pDC->LineTo(rcClient.right-5, ptTar.y-1);			pen.DeleteObject();			pen.CreatePen(PS_SOLID, 1, RGB(255,255,255));			pDC->SelectObject(&pen);			pDC->MoveTo(rcClient.left +5, ptTar.y);			pDC->LineTo(rcClient.right-5, ptTar.y);			pen.DeleteObject();			ptTar.x  = ptOrg.x;			ptTar.y += RX_TOOL_SEPARATOR + RX_TOOL_GAB;		}		else		{			if(pButton->wStatus[0] & RXTBS1_VISIBLE)			{				if(nIndex == -1)				{					if(pButton->wStatus[0] & RXTBS1_DISABLE)						DrawBitmapButton(pDC, ptTar, ptSrc, CSize(pButton->wStatus[2], pButton->wStatus[3]), 4);					else if(pButton->wStatus[0] & RXTBS1_CHECKED)						DrawBitmapButton(pDC, ptTar, ptSrc, CSize(pButton->wStatus[2], pButton->wStatus[3]), 3);					else if(pButton->wStatus[1] == RXTBS2_SELECT)						DrawBitmapButton(pDC, ptTar, ptSrc, CSize(pButton->wStatus[2], pButton->wStatus[3]), 2);					else if(pButton->wStatus[1] == RXTBS2_FOCUS)						DrawBitmapButton(pDC, ptTar, ptSrc, CSize(pButton->wStatus[2], pButton->wStatus[3]), 1);					else						DrawBitmapButton(pDC, ptTar, ptSrc, CSize(pButton->wStatus[2], pButton->wStatus[3]), 0);				}				else if(nIndex == i)				{					if(pButton->wStatus[0] & RXTBS1_DISABLE)						DrawBitmapButton(pDC, ptTar, ptSrc, CSize(pButton->wStatus[2], pButton->wStatus[3]), 4);					else if(pButton->wStatus[0] & RXTBS1_CHECKED)						DrawBitmapButton(pDC, ptTar, ptSrc, CSize(pButton->wStatus[2], pButton->wStatus[3]), 3);					else if(pButton->wStatus[1] == RXTBS2_SELECT)						DrawBitmapButton(pDC, ptTar, ptSrc, CSize(pButton->wStatus[2], pButton->wStatus[3]), 2);					else if(pButton->wStatus[1] == RXTBS2_FOCUS)						DrawBitmapButton(pDC, ptTar, ptSrc, CSize(pButton->wStatus[2], pButton->wStatus[3]), 1);					else						DrawBitmapButton(pDC, ptTar, ptSrc, CSize(pButton->wStatus[2], pButton->wStatus[3]), 0);					ReleaseDC(pDC);					return;				}				if(pButton->wStatus[0] & RXTBS1_WRAPPED)				{					ptTar.x =  ptOrg.x;					ptTar.y += pButton->wStatus[3] + RX_TOOL_GAB;				}				else					ptTar.x += pButton->wStatus[2] + RX_TOOL_GAB;			}						ptSrc.x += pButton->wStatus[2];		}	}	// draw bottom grip line	rect.SetRect(rcClient.left+5, ptTar.y + 12, rcClient.right-5, ptTar.y + 15);	pDC->Draw3dRect(rect, RGB(255,255,255), RGB(124,124,124));	ReleaseDC(pDC);}void RxToolBarCtrl::DrawBitmapButton(CDC *pDC, CPoint ptOrg, CPoint ptSrc, CSize size, int nStatus){	int		nMargin = 3;			// between bitmap & border	CRect	rect;	rect.SetRect(ptOrg.x-nMargin, ptOrg.y-nMargin, ptOrg.x+size.cx+nMargin, ptOrg.y+size.cy+nMargin);	rect.OffsetRect(-rect.left, -rect.top);	CDC		dcMem;	dcMem.CreateCompatibleDC(pDC);	CBitmap	bmpMem, *pOldBitmap;	bmpMem.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());	pOldBitmap = dcMem.SelectObject(&bmpMem);	CBrush	brush, *pOldBrush;	brush.CreateSolidBrush(RXCOLOR_11);	pOldBrush = dcMem.SelectObject(&brush);	dcMem.PatBlt(0, 0, rect.Width(), rect.Height(), PATCOPY);	dcMem.SelectObject(pOldBrush);	brush.DeleteObject();	CDC		dcBtn;	dcBtn.CreateCompatibleDC(&dcMem);	CBitmap	*pOldBtnBitmap;	if(nStatus == 0)			// Normal	{		pOldBtnBitmap = dcBtn.SelectObject(&m_bmpNormal);		::TransparentBlt(dcMem.GetSafeHdc(), nMargin, nMargin, size.cx, size.cy, dcBtn.GetSafeHdc(),									ptSrc.x, 0, size.cx, size.cy, RGB(178,174,173));	}	else if(nStatus == 1)		// Focus	{		pOldBtnBitmap = dcBtn.SelectObject(&m_bmpSelect);		::TransparentBlt(dcMem.GetSafeHdc(), nMargin, nMargin, size.cx, size.cy, dcBtn.GetSafeHdc(),									ptSrc.x, 0, size.cx, size.cy, RGB(178,174,173));		dcMem.Draw3dRect(rect, RGB(255,255,255), RGB( 98, 98, 98));	}	else if(nStatus == 2)		// Select	{		pOldBtnBitmap = dcBtn.SelectObject(&m_bmpSelect);		::TransparentBlt(dcMem.GetSafeHdc(), nMargin+1, nMargin+1, size.cx-1, size.cy-1, dcBtn.GetSafeHdc(),									ptSrc.x, 0, size.cx-1, size.cy-1, RGB(178,174,173));		dcMem.Draw3dRect(rect, RGB(128,128,128), RGB(255,255,255));	}	else if(nStatus == 3)		// Checked	{		CBitmap		bmpPattern;		COLORREF	aPattern[] = {RGB(192,192,192), RGB(255,255,255), RGB(255,255,255), RGB(192,192,192)};		bmpPattern.CreateBitmap(2, 2, 1, 32, aPattern);		brush.CreatePatternBrush(&bmpPattern);		pOldBrush = dcMem.SelectObject(&brush);		dcMem.PatBlt(nMargin-1, nMargin-1, rect.Width()-(nMargin+1), rect.Height()-(nMargin+1), PATCOPY);		dcMem.SelectObject(pOldBrush);		brush.DeleteObject();		bmpPattern.DeleteObject();		pOldBtnBitmap = dcBtn.SelectObject(&m_bmpSelect);		::TransparentBlt(dcMem.GetSafeHdc(), 4, 4, size.cx-1, size.cy-1, dcBtn.GetSafeHdc(),									ptSrc.x, 0, size.cx-1, size.cy-1, RGB(178,174,173));		dcMem.Draw3dRect(rect, RGB(128,128,128), RGB(255,255,255));	}	else if(nStatus == 4)		// Disable	{		pOldBtnBitmap = dcBtn.SelectObject(&m_bmpDisable);		::TransparentBlt(dcMem.GetSafeHdc(), nMargin, nMargin, size.cx, size.cy, dcBtn.GetSafeHdc(),									ptSrc.x, 0, size.cx, size.cy, RGB(178,174,173));	}	pDC->BitBlt(ptOrg.x-nMargin, ptOrg.y-nMargin, rect.Width(), rect.Height(), &dcMem, 0, 0, SRCCOPY);	dcBtn.SelectObject(pOldBtnBitmap);	dcBtn.DeleteDC();	dcMem.SelectObject(pOldBitmap);	bmpMem.DeleteObject();	dcMem.DeleteDC();}/////////////////////////////////////////////////////////////////////////////void RxToolBarCtrl::SetButtonVisible(int nIndex, BOOL bShow, BOOL bRedraw){	RX_TBBUTTON		*pButton = GetButton(nIndex);	if(pButton && bShow != GetButtonVisible(nIndex))	{		if(bShow)			pButton->wStatus[0] |= RXTBS1_VISIBLE;		else			pButton->wStatus[0] &= ~RXTBS1_VISIBLE;		if(bRedraw)			RedrawWnd();	}}BOOL RxToolBarCtrl::GetButtonVisible(int nIndex){	RX_TBBUTTON		*pButton = GetButton(nIndex);		if(pButton != NULL)		return (pButton->wStatus[0] & RXTBS1_VISIBLE);	return FALSE;}void RxToolBarCtrl::SetButtonEnable(int nIndex, BOOL bEnable){	RX_TBBUTTON		*pButton = GetButton(nIndex);	if(pButton && bEnable != GetButtonEnable(nIndex))	{		if(bEnable)			pButton->wStatus[0] &= ~RXTBS1_DISABLE;		else			pButton->wStatus[0] |= RXTBS1_DISABLE;		DrawToolButton(nIndex);	}}BOOL RxToolBarCtrl::GetButtonEnable(int nIndex){	RX_TBBUTTON		*pButton = GetButton(nIndex);		if(pButton != NULL)		return !(pButton->wStatus[0] & RXTBS1_DISABLE);	return FALSE;}void RxToolBarCtrl::SetButtonCheck(int nIndex, BOOL bCheck){	RX_TBBUTTON		*pButton = GetButton(nIndex);	if(pButton != NULL && bCheck != GetButtonCheck(nIndex))	{		if(bCheck)			pButton->wStatus[0] |= RXTBS1_CHECKED;		else			pButton->wStatus[0] &= ~RXTBS1_CHECKED;		DrawToolButton(nIndex);	}}BOOL RxToolBarCtrl::GetButtonCheck(int nIndex){	RX_TBBUTTON		*pButton = GetButton(nIndex);		if(pButton)		return (pButton->wStatus[0] & RXTBS1_CHECKED);	return FALSE;}RX_TBBUTTON* RxToolBarCtrl::GetButton(int nIndex){	if(nIndex < 0 || nIndex >= m_ArrayButton.GetSize())		return NULL;	return (RX_TBBUTTON *)m_ArrayButton[nIndex];}int RxToolBarCtrl::GetButtonCount(){	return m_ArrayButton.GetSize();}void RxToolBarCtrl::RemoveAllButton(){	for(int i = 0; i < m_ArrayButton.GetSize(); i++)		delete (RX_TBBUTTON *)m_ArrayButton.GetAt(i);	m_ArrayButton.RemoveAll();	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -