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

📄 cebtnst.cpp

📁 UHF RFID Reader Program
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		return m_nCheck;
	} // End of GetCheck

	// This function sets all colors to a default value.
	//
	// Parameters:
	//		[IN]	bRepaint
	//				If TRUE the control will be repainted.
	//
	// Return value:
	//		BTNST_OK
	//			Function executed successfully.
	//
	DWORD CCeButtonST::SetDefaultColors(BOOL bRepaint)
	{
		m_crColors[BTNST_COLOR_BK_IN]		= ::GetSysColor(COLOR_BTNFACE);
		m_crColors[BTNST_COLOR_FG_IN]		= ::GetSysColor(COLOR_BTNTEXT);
		m_crColors[BTNST_COLOR_BK_OUT]		= ::GetSysColor(COLOR_BTNFACE);
		m_crColors[BTNST_COLOR_FG_OUT]		= ::GetSysColor(COLOR_BTNTEXT);
		m_crColors[BTNST_COLOR_BK_FOCUS]	= ::GetSysColor(COLOR_BTNFACE);
		m_crColors[BTNST_COLOR_FG_FOCUS]	= ::GetSysColor(COLOR_BTNTEXT);

		if (bRepaint)	Invalidate();

		return BTNST_OK;
	} // End of SetDefaultColors

	// This function sets the color to use for a particular state.
	//
	// Parameters:
	//		[IN]	byColorIndex
	//				Index of the color to set. Can be one of the following values:
	//				BTNST_COLOR_BK_IN		Background color when mouse is over the button
	//				BTNST_COLOR_FG_IN		Text color when mouse is over the button
	//				BTNST_COLOR_BK_OUT		Background color when mouse is outside the button
	//				BTNST_COLOR_FG_OUT		Text color when mouse is outside the button
	//				BTNST_COLOR_BK_FOCUS	Background color when the button is focused
	//				BTNST_COLOR_FG_FOCUS	Text color when the button is focused
	//		[IN]	crColor
	//				New color.
	//		[IN]	bRepaint
	//				If TRUE the control will be repainted.
	//
	// Return value:
	//		BTNST_OK
	//			Function executed successfully.
	//		BTNST_INVALIDINDEX
	//			Invalid color index.
	//
	DWORD CCeButtonST::SetColor(BYTE byColorIndex, COLORREF crColor, BOOL bRepaint)
	{
		if (byColorIndex >= BTNST_MAX_COLORS)	return BTNST_INVALIDINDEX;

		// Set new color
		m_crColors[byColorIndex] = crColor;

		if (bRepaint)	Invalidate();

		return BTNST_OK;
	} // End of SetColor

	// This functions returns the color used for a particular state.
	//
	// Parameters:
	//		[IN]	byColorIndex
	//				Index of the color to get. Can be one of the following values:
	//				BTNST_COLOR_BK_IN		Background color when mouse is over the button
	//				BTNST_COLOR_FG_IN		Text color when mouse is over the button
	//				BTNST_COLOR_BK_OUT		Background color when mouse is outside the button
	//				BTNST_COLOR_FG_OUT		Text color when mouse is outside the button
	//				BTNST_COLOR_BK_FOCUS	Background color when the button is focused
	//				BTNST_COLOR_FG_FOCUS	Text color when the button is focused
	//		[OUT]	crpColor
	//				A pointer to a COLORREF that will receive the color.
	//
	// Return value:
	//		BTNST_OK
	//			Function executed successfully.
	//		BTNST_INVALIDINDEX
	//			Invalid color index.
	//
	DWORD CCeButtonST::GetColor(BYTE byColorIndex, COLORREF* crpColor)
	{
		if (byColorIndex >= BTNST_MAX_COLORS)	return BTNST_INVALIDINDEX;

		// Get color
		*crpColor = m_crColors[byColorIndex];

		return BTNST_OK;
	} // End of GetColor

	// This function sets the hilight logic for the button.
	// Applies only to flat buttons.
	//
	// Parameters:
	//		[IN]	bAlwaysTrack
	//				If TRUE the button will be hilighted even if the window that owns it, is
	//				not the active window.
	//				If FALSE the button will be hilighted only if the window that owns it,
	//				is the active window.
	//
	// Return value:
	//		BTNST_OK
	//			Function executed successfully.
	//
	DWORD CCeButtonST::SetAlwaysTrack(BOOL bAlwaysTrack)
	{
		m_bAlwaysTrack = bAlwaysTrack;
		return BTNST_OK;
	} // End of SetAlwaysTrack

	// This function sets the cursor to be used when the mouse is over the button.
	//
	// Parameters:
	//		[IN]	nCursorId
	//				ID number of the cursor resource.
	//				Pass NULL to remove a previously loaded cursor.
	//		[IN]	bRepaint
	//				If TRUE the control will be repainted.
	//
	// Return value:
	//		BTNST_OK
	//			Function executed successfully.
	//		BTNST_INVALIDRESOURCE
	//			Failed loading the specified resource.
	//
	DWORD CCeButtonST::SetBtnCursor(int nCursorId, BOOL bRepaint)
	{
		HINSTANCE	hInstResource = NULL;
		// Restore old cursor (if any)
		if (m_hOldCursor)	::SetCursor(m_hOldCursor);
		// Destroy the cursor (if any)
		if (m_hCursor)	::DestroyCursor(m_hCursor);
		m_hCursor = NULL;
		m_hOldCursor = NULL;

		// Load cursor
		if (nCursorId)
		{
			hInstResource = AfxFindResourceHandle(MAKEINTRESOURCE(nCursorId), RT_GROUP_CURSOR);
			// Load cursor resource
			m_hCursor = (HCURSOR)::LoadImage(hInstResource, MAKEINTRESOURCE(nCursorId), IMAGE_CURSOR, 0, 0, 0);
			// Repaint the button
			if (bRepaint) Invalidate();
			// If something wrong
			if (m_hCursor == NULL) return BTNST_INVALIDRESOURCE;
		} // if

		return BTNST_OK;
	} // End of SetBtnCursor

	// This function sets if the button border must be drawn.
	// Applies only to flat buttons.
	//
	// Parameters:
	//		[IN]	bDrawBorder
	//				If TRUE the border will be drawn.
	//		[IN]	bRepaint
	//				If TRUE the button will be repainted.
	//
	// Return value:
	//		BTNST_OK
	//			Function executed successfully.
	//
	DWORD CCeButtonST::DrawBorder(BOOL bDrawBorder, BOOL bRepaint)
	{
		m_bDrawBorder = bDrawBorder;
		// Repaint the button
		if (bRepaint) Invalidate();

		return BTNST_OK;
	} // End of DrawBorder

	// This function sets if the focus rectangle must be drawn for flat buttons.
	//
	// Parameters:
	//		[IN]	bDrawFlatFocus
	//				If TRUE the focus rectangle will be drawn also for flat buttons.
	//		[IN]	bRepaint
	//				If TRUE the control will be repainted.
	//
	// Return value:
	//		BTNST_OK
	//			Function executed successfully.
	//
	DWORD CCeButtonST::DrawFlatFocus(BOOL bDrawFlatFocus, BOOL bRepaint)
	{
		m_bDrawFlatFocus = bDrawFlatFocus;
		// Repaint the button
		if (bRepaint) Invalidate();

		return BTNST_OK;
	} // End of DrawFlatFocus

	// This function returns if the button is the default button.
	//
	// Return value:
	//		TRUE
	//			The button is the default button.
	//		FALSE
	//			The button is not the default button.
	//
	BOOL CCeButtonST::GetDefault()
	{
		return m_bIsDefault;
	} // End of GetDefault

	// This function sets the URL that will be opened when the button is clicked.
	//
	// Parameters:
	//		[IN]	lpszURL
	//				Pointer to a null-terminated string that contains the URL.
	//				Pass NULL to remove any previously specified URL.
	//
	// Return value:
	//		BTNST_OK
	//			Function executed successfully.
	//
	DWORD CCeButtonST::SetURL(LPCTSTR lpszURL)
	{
		// Remove any existing URL
		memset(m_szURL, 0, sizeof(m_szURL));

		if (lpszURL)
		{
			// Store the URL
			_tcsncpy(m_szURL, lpszURL, _MAX_PATH);
		} // if

		return BTNST_OK;
	} // End of SetURL

	BOOL CCeButtonST::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
	{
		HCURSOR	hOldCursor;

		// If a cursor was specified then use it!
		if (m_hCursor != NULL)
		{
			hOldCursor = ::SetCursor(m_hCursor);
			// Store old cursor
			if (!m_hOldCursor)	m_hOldCursor = hOldCursor;
			return TRUE;
		} // if

		return CButton::OnSetCursor(pWnd, nHitTest, message);
	} // End of OnSetCursor

	// This function associates a menu to the button.
	// The menu will be displayed clicking the button.
	//
	// Parameters:
	//		[IN]	nMenu
	//				ID number of the menu resource.
	//				Pass NULL to remove any menu from the button.
	//		[IN]	hParentWnd
	//				Handle to the window that owns the menu.
	//				This window receives all messages from the menu.
	//		[IN]	bRepaint
	//				If TRUE the control will be repainted.
	//
	// Return value:
	//		BTNST_OK
	//			Function executed successfully.
	//		BTNST_INVALIDRESOURCE
	//			Failed loading the specified resource.
	//
	DWORD CCeButtonST::SetMenu(UINT nMenu, HWND hParentWnd, BOOL bRepaint)
	{
		HINSTANCE	hInstResource	= NULL;

		// Destroy any previous menu
		if (m_hMenu)
		{
			::DestroyMenu(m_hMenu);
			m_hMenu = NULL;
			m_hParentWndMenu = NULL;
			m_bMenuDisplayed = FALSE;
		} // if

		// Load menu
		if (nMenu)
		{
			// Find correct resource handle
			hInstResource = AfxFindResourceHandle(MAKEINTRESOURCE(nMenu), RT_MENU);
			// Load menu resource
			m_hMenu = ::LoadMenu(hInstResource, MAKEINTRESOURCE(nMenu));
			m_hParentWndMenu = hParentWnd;
			// If something wrong
			if (m_hMenu == NULL) return BTNST_INVALIDRESOURCE;
		} // if

		// Repaint the button
		if (bRepaint) Invalidate();

		return BTNST_OK;
	} // End of SetMenu

	// This function is called every time the button background needs to be painted.
	//
	// Parameters:
	//		[IN]	pDC
	//				Pointer to a CDC object that indicates the device context.
	//		[IN]	pRect
	//				Pointer to a CRect object that indicates the bounds of the
	//				area to be painted.
	//
	// Return value:
	//		BTNST_OK
	//			Function executed successfully.
	//
	DWORD CCeButtonST::OnDrawBackground(CDC* pDC, LPCRECT pRect)
	{
		COLORREF	crColor;

		if (m_bMouseOnButton || m_bIsPressed)
			crColor = m_crColors[BTNST_COLOR_BK_IN];
		else
		{
			if (m_bIsFocused)
				crColor = m_crColors[BTNST_COLOR_BK_FOCUS];
			else
				crColor = m_crColors[BTNST_COLOR_BK_OUT];
		} // else

		CBrush		brBackground(crColor);

		pDC->FillRect(pRect, &brBackground);

		return BTNST_OK;
	} // End of OnDrawBackground

	// This function is called every time the button border needs to be painted.
	//
	// Parameters:
	//		[IN]	pDC
	//				Pointer to a CDC object that indicates the device context.
	//		[IN]	pRect
	//				Pointer to a CRect object that indicates the bounds of the
	//				area to be painted.
	//
	// Return value:
	//		BTNST_OK
	//			Function executed successfully.
	//
	DWORD CCeButtonST::OnDrawBorder(CDC* pDC, LPCRECT pRect)
	{
		if (m_bIsPressed)
			pDC->Draw3dRect(pRect, ::GetSysColor(COLOR_BTNSHADOW), ::GetSysColor(COLOR_BTNHIGHLIGHT));
		else
			if (m_bIsFlat == FALSE || (m_bIsFlat && m_bMouseOnButton))
				pDC->Draw3dRect(pRect, ::GetSysColor(COLOR_BTNHIGHLIGHT), ::GetSysColor(COLOR_BTNSHADOW));

		return BTNST_OK;
	} // End of OnDrawBorder

	void CALLBACK CCeButtonST::TimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
	{
		POINT	csPos;
		RECT	csRect;

		::GetCursorPos(&csPos);
		::ScreenToClient(hwnd, &csPos);

		::GetClientRect(hwnd, &csRect);

		if (!::PtInRect(&csRect, csPos))
		{
			::PostMessage(hwnd, WM_MOUSELEAVE, 0, 0);
			//m_bMouseOnButton = FALSE;
			//Invalidate();
		} // if
	} // End of TimerProc

};

#undef BS_TYPEMASK
#undef WM_MOUSELEAVE

/*
void CCeButtonST::OnCaptureChanged(CWnd *pWnd) 
{
if (m_bMouseOnButton)
{
ReleaseCapture();
Invalidate();
} // if

CButton::OnCaptureChanged(pWnd);
} // End of OnCaptureChanged
*/

⌨️ 快捷键说明

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