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

📄 bcgptoolbar.cpp

📁 远程网络监视程序的源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		AfxIsValidAddress(lpIDArray, sizeof(UINT) * nIDCount, FALSE));

	//-----------------------
	// Save customize button:
	//-----------------------
	CCustomizeButton* pCustomizeBtn = NULL;
	if (m_pCustomizeBtn != NULL)
	{
		ASSERT_VALID (m_pCustomizeBtn);
		ASSERT (m_pCustomizeBtn == m_Buttons.GetTail ());	// Should be last

		pCustomizeBtn = new CCustomizeButton;
		pCustomizeBtn->CopyFrom (*m_pCustomizeBtn);
	}

	RemoveAllButtons ();

	while (!m_OrigButtons.IsEmpty ())
	{
		delete m_OrigButtons.RemoveHead ();
	}

	if (lpIDArray == NULL)
	{
		while (nIDCount-- > 0)
		{
			InsertSeparator ();
		}
		
		return TRUE;
	}

	int iImage = m_iImagesOffset;

	//--------------------------------
	// Go through them adding buttons:
	//--------------------------------
	for (int i = 0; i < nIDCount; i ++)
	{
		int iCmd = *lpIDArray ++;

		m_OrigButtons.AddTail (new CBCGPToolbarButton (iCmd, -1));

		if (iCmd == 0)	// Separator
		{
			InsertSeparator ();
		}
		else if (bRemapImages)
		{
			if (InsertButton (CBCGPToolbarButton (iCmd, iImage, NULL, FALSE, 
				m_bLocked)) >= 0 && !m_bLocked)
			{
				m_DefaultImages.SetAt (iCmd, iImage);
			}

			iImage ++;
		}
		else
		{	
			if (m_DefaultImages.Lookup (iCmd, iImage)) 
			{
				InsertButton (CBCGPToolbarButton (iCmd, iImage, NULL, FALSE, m_bLocked));
			}
		}
	}

	//--------------------------
	// Restore customize button:
	//--------------------------
	if (pCustomizeBtn != NULL)
	{
		InsertButton (pCustomizeBtn);
		m_pCustomizeBtn = pCustomizeBtn;
	}

	if (GetSafeHwnd () != NULL)
	{
		//------------------------------------
		// Allow to produce some user actions:
		//------------------------------------

		OnReset ();

		CWnd* pParentFrame = (m_pDockSite == NULL) ?
			GetParent () : m_pDockSite;
		if (pParentFrame != NULL)
		{
			pParentFrame->SendMessage (BCGM_RESETTOOLBAR, (WPARAM) m_uiOriginalResID);

				while (!m_OrigResetButtons.IsEmpty ())
				{
					delete m_OrigResetButtons.RemoveHead ();
				}

				//-------------------------------------------
				//	Store Buttons state after OnToolbarReset
				//-------------------------------------------

				int i = 0;
				for (POSITION pos = m_Buttons.GetHeadPosition (); pos != NULL; i++)
				{
					CBCGPToolbarButton* pButton = (CBCGPToolbarButton*) m_Buttons.GetNext (pos);

					if(pButton != NULL && pButton->IsKindOf(RUNTIME_CLASS(CBCGPToolbarButton)))
					{
						CRuntimeClass* pRTC = pButton->GetRuntimeClass();
						CBCGPToolbarButton* pBtn = (CBCGPToolbarButton*)pRTC->CreateObject();
						pBtn->CopyFrom(*pButton);
						m_OrigResetButtons.AddTail(pBtn); 

					}

				
				}
		}
	}

	return TRUE;
}
//******************************************************************************************
BOOL CBCGPToolBar::LoadBitmap (UINT uiResID, UINT uiColdResID, UINT uiMenuResID, 
							  BOOL bLocked, 
							  UINT uiDisabledResID, UINT uiMenuDisabledResID)
{
	CBCGPToolBarParams params;

	params.m_uiColdResID		= uiColdResID;
	params.m_uiHotResID			= uiResID;
	params.m_uiDisabledResID	= uiDisabledResID;
	params.m_uiMenuResID		= uiMenuResID;
	params.m_uiMenuDisabledResID= uiMenuDisabledResID;

	return LoadBitmapEx (params, bLocked);
}
//******************************************************************************************
BOOL CBCGPToolBar::LoadToolBar(UINT uiResID, UINT uiColdResID, UINT uiMenuResID, 
							  BOOL bLocked,
							  UINT uiDisabledResID, UINT uiMenuDisabledResID,
							  UINT uiHotResID)
{
	CBCGPToolBarParams params;

	params.m_uiColdResID		= uiColdResID;
	params.m_uiHotResID			= uiHotResID;
	params.m_uiDisabledResID	= uiDisabledResID;
	params.m_uiMenuResID		= uiMenuResID;
	params.m_uiMenuDisabledResID= uiMenuDisabledResID;

	return LoadToolBarEx (uiResID, params, bLocked);
}
//*****************************************************************************************
BOOL CBCGPToolBar::LoadBitmapEx (CBCGPToolBarParams& params, BOOL bLocked)
{
	m_bLocked = bLocked;

	if (m_bLocked)
	{
		//------------------------------------------
		// Don't add bitmap to the shared resources!
		//------------------------------------------
		if (!m_ImagesLocked.Load (params.m_uiHotResID, AfxGetResourceHandle (), TRUE))
		{
			return FALSE;
		}

		if (params.m_uiColdResID != 0)
		{
			if (!m_ColdImagesLocked.Load (params.m_uiColdResID, AfxGetResourceHandle (), TRUE))
			{
				return FALSE;
			}

			ASSERT (m_ImagesLocked.GetCount () == m_ColdImagesLocked.GetCount ());
		}
		
		if (params.m_uiDisabledResID != 0)
		{
			if (!m_DisabledImagesLocked.Load (params.m_uiDisabledResID, AfxGetResourceHandle (), TRUE))
			{
				return FALSE;
			}
			
			ASSERT (m_ImagesLocked.GetCount () == m_DisabledImagesLocked.GetCount ());
		}

		//------------------
		// Load large images:
		//-------------------
		if (params.m_uiLargeHotResID != 0)
		{	
			if (!m_LargeImagesLocked.Load (params.m_uiLargeHotResID, AfxGetResourceHandle (), TRUE))
			{
				return FALSE;
			}

			ASSERT (m_ImagesLocked.GetCount () == m_LargeImagesLocked.GetCount ());
		}

		if (params.m_uiLargeColdResID != 0)
		{
			ASSERT (params.m_uiColdResID != 0);

			if (!m_LargeColdImagesLocked.Load (params.m_uiLargeColdResID, AfxGetResourceHandle (), TRUE))
			{
				return FALSE;
			}

			ASSERT (m_ImagesLocked.GetCount () == m_LargeColdImagesLocked.GetCount ());
		}
		
		if (params.m_uiLargeDisabledResID != 0)
		{
			ASSERT (params.m_uiDisabledResID != 0);

			if (!m_LargeDisabledImagesLocked.Load (params.m_uiLargeDisabledResID, AfxGetResourceHandle (), TRUE))
			{
				return FALSE;
			}
			
			ASSERT (m_ImagesLocked.GetCount () == m_LargeDisabledImagesLocked.GetCount ());
		}
	
		if (params.m_uiMenuResID != 0)
		{
			if (!m_MenuImagesLocked.Load (params.m_uiMenuResID, AfxGetResourceHandle (), TRUE))
			{
				return FALSE;
			}

			ASSERT (m_ImagesLocked.GetCount () == m_MenuImagesLocked.GetCount ());
		}

		if (params.m_uiMenuDisabledResID != 0)
		{
			if (!m_MenuImagesLocked.Load (params.m_uiMenuResID, AfxGetResourceHandle (), TRUE))
			{
				return FALSE;
			}

			ASSERT (m_ImagesLocked.GetCount () == m_MenuImagesLocked.GetCount ());
		}
		
		return TRUE;
	}

	if (!m_Images.Load (params.m_uiHotResID, AfxGetResourceHandle (), TRUE))
	{
		return FALSE;
	}
	
	m_iImagesOffset = m_Images.GetResourceOffset (params.m_uiHotResID);
	ASSERT (m_iImagesOffset >= 0);

	if (params.m_uiColdResID != 0)
	{
		if (!m_ColdImages.Load (params.m_uiColdResID, AfxGetResourceHandle (), TRUE))
		{
			return FALSE;
		}

		ASSERT (m_Images.GetCount () == m_ColdImages.GetCount ());
		ASSERT (m_Images.GetImageSize ().cy == m_ColdImages.GetImageSize ().cy);
	}

	if (params.m_uiMenuResID != 0)
	{
		if (!m_MenuImages.Load (params.m_uiMenuResID, AfxGetResourceHandle (), TRUE))
		{
			return FALSE;
		}

		ASSERT (m_Images.GetCount () == m_MenuImages.GetCount ());
		ASSERT (m_MenuImages.GetImageSize ().cy == m_sizeMenuImage.cy);
	}

	if (params.m_uiDisabledResID != 0)
	{
		if (!m_DisabledImages.Load (params.m_uiDisabledResID, AfxGetResourceHandle (), TRUE))
		{
			return FALSE;
		}
		
		ASSERT (m_Images.GetCount () == m_DisabledImages.GetCount ());
	}
	
	if (params.m_uiMenuDisabledResID != 0)
	{
		if (!m_DisabledMenuImages.Load (params.m_uiMenuDisabledResID, AfxGetResourceHandle (), TRUE))
		{
			return FALSE;
		}
		
		ASSERT (m_Images.GetCount () == m_DisabledMenuImages.GetCount ());
	}

	ASSERT (m_Images.GetImageSize ().cy == m_sizeImage.cy);

	//------------------
	// Load large images:
	//-------------------
	if (params.m_uiLargeHotResID != 0)
	{	
		if (!m_LargeImages.Load (params.m_uiLargeHotResID, AfxGetResourceHandle (), TRUE))
		{
			return FALSE;
		}

		ASSERT (m_Images.GetCount () == m_LargeImages.GetCount ());
	}

	if (params.m_uiLargeColdResID != 0)
	{
		ASSERT (params.m_uiColdResID != 0);

		if (!m_LargeColdImages.Load (params.m_uiLargeColdResID, AfxGetResourceHandle (), TRUE))
		{
			return FALSE;
		}

		ASSERT (m_Images.GetCount () == m_LargeColdImages.GetCount ());
	}
	
	if (params.m_uiLargeDisabledResID != 0)
	{
		ASSERT (params.m_uiDisabledResID != 0);

		if (!m_LargeDisabledImages.Load (params.m_uiLargeDisabledResID, AfxGetResourceHandle (), TRUE))
		{
			return FALSE;
		}
		
		ASSERT (m_Images.GetCount () == m_LargeDisabledImages.GetCount ());
	}
	
	return TRUE;
}
//******************************************************************************************
BOOL CBCGPToolBar::LoadToolBarEx(UINT uiToolbarResID, CBCGPToolBarParams& params, 
								BOOL bLocked)
{
	struct CToolBarData
	{
		WORD wVersion;
		WORD wWidth;
		WORD wHeight;
		WORD wItemCount;

		WORD* items()
			{ return (WORD*)(this+1); }
	};

	ASSERT_VALID(this);

	LPCTSTR lpszResourceName = MAKEINTRESOURCE (uiToolbarResID);
	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);

	UINT* pItems = new UINT[pData->wItemCount];
	ASSERT (pItems != NULL);

	if (bLocked)
	{
		SetLockedSizes (CSize (pData->wWidth + 6, pData->wHeight + 6),
						CSize (pData->wWidth, pData->wHeight));
	}
	else
	{
		SetSizes (	CSize (pData->wWidth + 6, pData->wHeight + 6),
					CSize (pData->wWidth, pData->wHeight));
	}

	BOOL bResult = TRUE;

	if (params.m_uiHotResID == 0)	// Use toolbar resource as hot image
	{
		params.m_uiHotResID = uiToolbarResID;
	}

	if (m_uiOriginalResID != 0 || // Buttons are already created
		LoadBitmapEx (params, bLocked))

	{
		int iImageIndex = m_iImagesOffset;
		for (int i = 0; i < pData->wItemCount; i++)
		{
			pItems[i] = pData->items()[i];

			if (!bLocked && pItems [i] > 0)
			{
				m_DefaultImages.SetAt (pItems[i], iImageIndex ++);
			}
		}

		m_uiOriginalResID = uiToolbarResID;
		bResult = SetButtons(pItems, pData->wItemCount);

		if (!bResult)
		{
			m_uiOriginalResID = 0;
		}
	}

	delete[] pItems;

	UnlockResource(hGlobal);
	FreeResource(hGlobal);

	return bResult;
}
//*****************************************************************************************
int CBCGPToolBar::InsertButton (const CBCGPToolbarButton& button, int iInsertAt)
{
	CRuntimeClass* pClass = button.GetRuntimeClass ();
	ASSERT (pClass != NULL);

	CBCGPToolbarButton* pButton = (CBCGPToolbarButton*) pClass->CreateObject ();
	ASSERT_VALID(pButton);

	pButton->CopyFrom (button);

	int iIndex = InsertButton (pButton, iInsertAt);
	if (iIndex < 0)
	{
		delete pButton;
	}
	
	return iIndex;
}
//******************************************************************************************
int CBCGPToolBar::ReplaceButton (UINT uiCmd, const CBCGPToolbarButton& button,
								 BOOL bAll/* = FALSE*/)
{
	ASSERT_VALID (this);

	int nButtonsCount = 0;

	for (int iStartIndex = 0;;)
	{
		int iIndex = CommandToIndex (uiCmd, iStartIndex);
		if (iIndex < 0)
		{
			break;
		}

		POSITION pos = m_Buttons.FindIndex (iIndex);
		if (pos == NULL)
		{
			ASSERT (FALSE);
			break;
		}

		CBCGPToolbarButton* pOldButton = (CBCGPToolbarButton*) m_Buttons.GetAt (pos);
		ASSERT_VALID (pOldButton);

		m_Buttons.RemoveAt (pos);
		pOldButton->OnCancelMode ();

		delete pOldButton;

		if (InsertButton (button, iIndex) < 0)
		{
			ASSERT (FALSE);
			return FALSE;
		}

		nButtonsCount++;

		if (bAll)
		{
			iStartIndex = iIndex + 1;
		}
		else
		{
			break;
		}
	}

	if (nButtonsCount == 0)
	{
		TRACE(_T("ReplaceButton: Can't find command %d\n"), uiCmd);
	}

	return nButtonsCount;
}
//******************************************************************************************
int CBCGPToolBar::InsertButton (CBCGPToolbarButton* pButton, int iInsertAt)
{
	ASSERT (pButton != NULL);

	if (!IsCommandPermitted (pButton->m_nID))
	{
		return -1;
	}

	if (iInsertAt != -1 &&
		(iInsertAt < 0 || iInsertAt > m_Buttons.GetCount ()))
	{
		return -1;
	}

	if (iInsertAt == -1 || iInsertAt == m_Buttons.GetCount ())
	{
		if (m_pCustomizeBtn != NULL)
		{
			ASSERT_VALID (m_pCustomizeBtn);
			ASSERT (m_pCustomizeBtn == m_Buttons.GetTail ());	// Should be last!

⌨️ 快捷键说明

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