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

📄 toolbarctrl.cpp

📁 3D reconstruction, medical image processing from colons, using intel image processing for based clas
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// ToolBarCtrl.cpp : implementation file//#include "stdafx.h"#include "fusion.h"#include "ToolBarCtrl.h"#include "FusionColorUI.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endifstruct CToolBarData{	WORD wVersion;	WORD wWidth;	WORD wHeight;	WORD wItemCount;	WORD* items()		{ return (WORD*)(this+1); }};/////////////////////////////////////////////////////////////////////////////// RxToolCmdUIclass RxToolCmdUI : public CCmdUI{public: // re-implementations only	virtual void Enable(BOOL bOn);	virtual void SetCheck(int nCheck);};void RxToolCmdUI::Enable(BOOL bOn){	m_bEnableChanged = TRUE;	RxToolBarCtrl* pToolBar = (RxToolBarCtrl *)m_pOther;	if(pToolBar->GetButtonVisible(m_nIndex))		pToolBar->SetButtonEnable(m_nIndex, bOn);}void RxToolCmdUI::SetCheck(int nCheck){	RxToolBarCtrl* pToolBar = (RxToolBarCtrl *)m_pOther;	if(pToolBar->GetButtonVisible(m_nIndex))		pToolBar->SetButtonCheck(m_nIndex, nCheck);}/////////////////////////////////////////////////////////////////////////////// RxToolBarCtrlRxToolBarCtrl::RxToolBarCtrl(){	m_ArrayButton.SetSize(0, 8);	m_nMouseOverButton	= -1;}RxToolBarCtrl::~RxToolBarCtrl(){}BEGIN_MESSAGE_MAP(RxToolBarCtrl, CWnd)	//{{AFX_MSG_MAP(RxToolBarCtrl)	ON_WM_PAINT()	ON_WM_LBUTTONDOWN()	ON_WM_MOUSEMOVE()	//}}AFX_MSG_MAP	ON_MESSAGE_VOID(WM_INITIALUPDATE, OnInitialUpdate)	ON_MESSAGE(WM_IDLEUPDATECMDUI, OnIdleUpdateCmdUI)	ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipNotify)	ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipNotify)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// RxToolBarCtrl message handlersBOOL RxToolBarCtrl::LoadToolBar(UINT nIDResource, UINT nNBimapID, UINT nSBitmapID, UINT nDBitmapID){	// load tool bar resource	LPCTSTR	lpszResourceName = MAKEINTRESOURCE(nIDResource);	ASSERT_VALID(this);	ASSERT(lpszResourceName != NULL);	// determine location of the bitmap in resource fork	HINSTANCE hInst = AfxFindResourceHandle(lpszResourceName, RT_TOOLBAR);	HRSRC hRsrc = ::FindResource(hInst, lpszResourceName, RT_TOOLBAR);	if (hRsrc == NULL)		return FALSE;	HGLOBAL hGlobal = LoadResource(hInst, hRsrc);	if (hGlobal == NULL)		return FALSE;	CToolBarData* pData = (CToolBarData*)LockResource(hGlobal);	if (pData == NULL)		return FALSE;	ASSERT(pData->wVersion == 1);	RX_TBBUTTON		*pButton;	for (int i = 0; i < pData->wItemCount; i++)	{		pButton = new RX_TBBUTTON;		pButton->nID = pData->items()[i];		pButton->wStatus[0] = 0;		pButton->wStatus[1] = 0;		pButton->wStatus[2] = 0;		m_ArrayButton.Add(pButton);	}	UnlockResource(hGlobal);	FreeResource(hGlobal);	// load bitmap resource	if(m_bmpNormal.m_hObject)		m_bmpNormal.DeleteObject();	m_bmpNormal.LoadBitmap(nNBimapID);	if(m_bmpSelect.m_hObject)		m_bmpSelect.DeleteObject();	m_bmpSelect.LoadBitmap(nSBitmapID);	if(m_bmpDisable.m_hObject)		m_bmpDisable.DeleteObject();	m_bmpDisable.LoadBitmap(nDBitmapID);	return TRUE;}void RxToolBarCtrl::PostNcDestroy() {	CWnd::PostNcDestroy();	RemoveAllButton();	delete this;}/////////////////////////////////////////////////////////////////////////////void RxToolBarCtrl::OnInitialUpdate(){	EnableToolTips();	OnIdleUpdateCmdUI(TRUE, 0L);}LRESULT RxToolBarCtrl::OnIdleUpdateCmdUI(WPARAM wParam, LPARAM){	if (GetStyle() & WS_VISIBLE)	{		CFrameWnd* pTarget = (CFrameWnd*)GetOwner();		if (pTarget == NULL || !pTarget->IsFrameWnd())			pTarget = GetParentFrame();		if (pTarget != NULL)			OnUpdateCmdUI(pTarget, (BOOL)wParam);	}	return 0L;}void RxToolBarCtrl::OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler){	RxToolCmdUI		state;	state.m_pOther = this;	state.m_nIndexMax = GetButtonCount();	for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax; state.m_nIndex++)	{		RX_TBBUTTON	*pButton = GetButton(state.m_nIndex);		state.m_nID = pButton->nID;		// ignore separators and visible button		if(state.m_nID != IDTB_SEPARATOR || (pButton->wStatus[0] & RXTBS1_VISIBLE))		{			// allow reflections			if (CWnd::OnCmdMsg(0,				MAKELONG((int)CN_UPDATE_COMMAND_UI, WM_COMMAND+WM_REFLECT_BASE),				&state, NULL))				continue;			// allow the toolbar itself to have update handlers			if (CWnd::OnCmdMsg(state.m_nID, CN_UPDATE_COMMAND_UI, &state, NULL))				continue;			// allow the owner to process the update			state.DoUpdate(pTarget, bDisableIfNoHndler);		}	}	// update the dialog controls added to the toolbar	UpdateDialogControls(pTarget, bDisableIfNoHndler);}/////////////////////////////////////////////////////////////////////////////// Tooltip Functions.int RxToolBarCtrl::OnToolHitTest(CPoint point, TOOLINFO* pTI) const{	// check child windows first by calling CWnd	int nHitTest = CWnd::OnToolHitTest(point, pTI);	if (nHitTest != -1)		return nHitTest;	RECT	rect;	nHitTest = HitTest(point, &rect);	int		nID = -1;	if(nHitTest != -1 && pTI != NULL)	{		nID = ((RX_TBBUTTON *)m_ArrayButton.GetAt(nHitTest))->nID;		pTI->hwnd = m_hWnd;		pTI->rect = rect;		pTI->uId  = nID;		pTI->lpszText = LPSTR_TEXTCALLBACK;	}	// found matching rect, return the ID of the button	return nID;}// show tool tip messageBOOL RxToolBarCtrl::OnToolTipNotify(UINT id, NMHDR * pNMHDR, LRESULT * pResult){	TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;	UINT nID = pNMHDR->idFrom;	if(nID)	{		pTTT->lpszText = MAKEINTRESOURCE(nID);		pTTT->hinst = AfxGetResourceHandle();		return TRUE;	}	return FALSE;}int  RxToolBarCtrl::HitTest(CPoint point, LPRECT rect1) const{	CRect	rect;	CPoint	ptOrg, ptTar;	ptOrg.x	= 8;			ptOrg.y = 14;			// 滚瓢甸狼 盔痢	ptTar.x = ptOrg.x;		ptTar.y = ptOrg.y;		// 角力 拳搁惑狼 滚瓢狼 困摹	int		nButtonCount = m_ArrayButton.GetSize();	RX_TBBUTTON		*pButton;	for(int i = 0; i < nButtonCount; i++)	{		pButton = (RX_TBBUTTON *)m_ArrayButton.GetAt(i);		if(pButton->nID == IDTB_SEPARATOR)		{			ptTar.x  = ptOrg.x;			ptTar.y += (RX_TOOL_SEPARATOR*2) + RX_TOOL_GAB;		}		else		{			if(pButton->wStatus[0] & RXTBS1_VISIBLE)			{				rect.SetRect(ptTar.x-3, ptTar.y-3, ptTar.x+pButton->wStatus[2]+3, ptTar.y+pButton->wStatus[3]+3);				if(rect.PtInRect(point))				{					if(rect1 != NULL)					{						rect1->left   = rect.left;						rect1->top    = rect.top;						rect1->right  = rect.right;						rect1->bottom = rect.bottom;					}					return i;				}				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;			}		}	}	return -1;}/////////////////////////////////////////////////////////////////////////////// 付快胶 捞亥飘// 滚瓢 努腐饶 器目胶巩力, mouse move巩力 歹 毫具凳void RxToolBarCtrl::OnLButtonDown(UINT nFlags, CPoint point) {	int		nHitTest;	if((nHitTest = HitTest(point)) < 0)	{		CWnd::OnLButtonDown(nFlags, point);		return;	}	RX_TBBUTTON	*pButton = GetButton(nHitTest);	if(pButton->wStatus[0] & RXTBS1_DISABLE)	{		CWnd::OnLButtonDown(nFlags, point);		return;	}	pButton->wStatus[1] = RXTBS2_SELECT;	DrawToolButton(nHitTest);	BOOL	bCancelLBtnDown = FALSE;	SetCapture();	m_nMouseOverButton = -1;	for (;;)	{		MSG		msg;		VERIFY(::GetMessage(&msg, NULL, 0, 0));		ScreenToClient(&msg.pt);		switch (msg.message)		{			case WM_MOUSEMOVE :				if(nHitTest == HitTest(msg.pt))				{					if(bCancelLBtnDown)					{						pButton->wStatus[1] = RXTBS2_SELECT;						DrawToolButton(nHitTest);						bCancelLBtnDown = FALSE;					}				}				else				{					if(!bCancelLBtnDown)					{						pButton->wStatus[1] = RXTBS2_NORMAL;						DrawToolButton(nHitTest);						bCancelLBtnDown = TRUE;					}				}				break;			case WM_LBUTTONUP :				goto EndLButtonDown;				break;			default :	// just dispatch rest of the messages				DispatchMessage(&msg);				break;		}	}EndLButtonDown :

⌨️ 快捷键说明

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