Пример #1
0
// This function assigns icons to the button.
// Any previous icon or bitmap will be removed.
//
// Parameters:
//		[IN]	hIconIn
//				Handle fo the icon to show when the mouse is over the button.
//				Pass NULL to remove any icon from the button.
//		[IN]	hIconOut
//				Handle to the icon to show when the mouse is outside the button.
//				Can be NULL.
//
// Return value:
//		BTNST_OK
//			Function executed successfully.
//		BTNST_INVALIDRESOURCE
//			Failed loading the specified resource.
//
DWORD CButtonST::SetIcon(HICON hIconIn, HICON hIconOut)
{
	BOOL		bRetValue;
	ICONINFO	ii;

	// Free any loaded resource
	FreeResources();

	if (hIconIn)
	{
		// Icon when mouse over button?
		m_csIcons[0].hIcon = hIconIn;
		// Get icon dimension
		::ZeroMemory(&ii, sizeof(ICONINFO));
		bRetValue = ::GetIconInfo(hIconIn, &ii);
		if (bRetValue == FALSE)
		{
			FreeResources();
			return BTNST_INVALIDRESOURCE;
		} // if

		m_csIcons[0].dwWidth	= (DWORD)(ii.xHotspot * 2);
		m_csIcons[0].dwHeight	= (DWORD)(ii.yHotspot * 2);
		::DeleteObject(ii.hbmMask);
		::DeleteObject(ii.hbmColor);

		// Icon when mouse outside button?
		if (hIconOut)
		{
			if (hIconOut == BTNST_AUTO_GRAY)
			{
				hIconOut = CreateGrayscaleIcon(hIconIn);
			} // if

			m_csIcons[1].hIcon = hIconOut;
			// Get icon dimension
			::ZeroMemory(&ii, sizeof(ICONINFO));
			bRetValue = ::GetIconInfo(hIconOut, &ii);
			if (bRetValue == FALSE)
			{
				FreeResources();
				return BTNST_INVALIDRESOURCE;
			} // if

			m_csIcons[1].dwWidth	= (DWORD)(ii.xHotspot * 2);
			m_csIcons[1].dwHeight	= (DWORD)(ii.yHotspot * 2);
			::DeleteObject(ii.hbmMask);
			::DeleteObject(ii.hbmColor);
		} // if
	} // if

	Invalidate();

	return BTNST_OK;
} // End of SetIcon
//=============================================================================	
// Sets icon from HICON
CXButtonXP& CXButtonXP::SetIcon(HICON hIcon, ICON_ALIGNMENT ia /*= LEFT*/)
//=============================================================================	
{
	if (m_hIcon)
		DestroyIcon(m_hIcon);

	m_hIcon = hIcon;
	TRACE(_T("m_hIcon=%X\n"), m_hIcon);

	// create grayscale icon for disabled button
	if (m_hGrayIcon)
		DestroyIcon(m_hGrayIcon);
	m_hGrayIcon = NULL;
	if (hIcon)
		m_hGrayIcon = CreateGrayscaleIcon(hIcon);

	m_eIconAlignment = ia;

	RedrawWindow();

	return *this;
}
Пример #3
0
SIZE CHyperLink::GetFirstIcon()
{
	HICON    hIco   = NULL;
	ICONINFO icInfo = { 0 };
	SIZE     iconSz = { 0 };

	if ((!m_bDisabled &&
		  ((m_uShowIcon & SI_ICONUP_LEFT && !m_bMouseIn)      || 
		  (m_uShowIcon & SI_ICONHOVER_LEFT && m_bMouseIn && !m_bMouseDown)     || 
		  (m_uShowIcon & SI_ICONDOWN_LEFT && m_bMouseDown && m_bMouseIn)    || 
		  (m_uShowIcon & SI_ICONUP_RIGHT && !m_bMouseIn)      || 
		  (m_uShowIcon & SI_ICONHOVER_RIGHT && m_bMouseIn && !m_bMouseDown)    || 
		  (m_uShowIcon & SI_ICONDOWN_RIGHT && m_bMouseDown && m_bMouseIn))
		) ||
		(m_uShowIcon & SI_ICONDISABLED_LEFT && m_bDisabled) || 
		(m_uShowIcon & SI_ICONDISABLED_RIGHT && m_bDisabled))
	{
		if (m_bDisabled)
		{
			if (m_hIconDisabled == NULL && m_bAutoGenerateDisabled)
			{
				HICON hico = m_hIconUp;

				if (hico == NULL)
				{
					hico = m_hIconHover;
				}

				if (hico == NULL)
				{
					hico = m_hIconDown;
				}

				if (hico != NULL)
				{
					m_hIconDisabled  = CreateGrayscaleIcon(hico);
					m_bAutoGenerated = TRUE;
				}
			}

			hIco = m_hIconDisabled;
		}
		else if (!m_bDisabled && m_bMouseIn && !m_bMouseDown)
		{
			hIco = m_hIconHover;
		}
		else if (!m_bDisabled && m_bMouseIn && m_bMouseDown)
		{
			hIco = m_hIconDown;
		}
		else if (!m_bDisabled && !m_bMouseIn)
		{
			hIco = m_hIconUp;
		}

		if (hIco != NULL)
		{
			GetIconInfo(hIco, &icInfo);

			iconSz.cx = icInfo.xHotspot*2;
			iconSz.cy = icInfo.yHotspot*2;
		}
	}

	return iconSz;
}