Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 349
  • Last Modified:

Need some help with mouse over, change color

Hello,
I would like to change the color of a static text (like a hyperlink) when I go with my mouse over the
text.
I already change the cursor to a hand-cursor when my mouse is over the static text.
Please let me know. 500 points
Best regards,
Thomas


BOOL COffenePostenDialog_Detail::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
	BOOL bReturn;
	
	CRect rcBtn;
	CRect rcBtn1;
	CRect rcBtn2;
 
	CPoint ptCursor;
	CPoint ptCursor1;
	CPoint ptCursor2;
 
    // Calculate the current cursor position
	// Change cursor if we are over Internet and Email link
	//-----------------------------------
	CWnd* pBtn  = GetDlgItem(IDC_STATIC_INTERNET);
	CWnd* pBtn1 = GetDlgItem(IDC_STATIC_EMAIL);
	CWnd* pBtn2 = GetDlgItem(IDC_STATIC_TELEFON);
 
	pBtn->GetWindowRect(rcBtn);
    GetCursorPos(&ptCursor);
 
	pBtn1->GetWindowRect(rcBtn1);
	GetCursorPos(&ptCursor1);
 
	pBtn2->GetWindowRect(rcBtn2);
	GetCursorPos(&ptCursor1);
 
 
    //===========================================================================
	if(rcBtn.PtInRect(ptCursor)==TRUE ||rcBtn1.PtInRect(ptCursor1)==TRUE||rcBtn2.PtInRect(ptCursor1)==TRUE)
	{
		CWinApp* pApp = AfxGetApp();
		HCURSOR my_new_cursor = pApp->LoadCursor(IDC_CURSOR2); // load new cursor
		SetCursor(my_new_cursor);
		 bReturn = TRUE;
 
	}
   	else
	{
		bReturn = CDialog::OnSetCursor(pWnd, nHitTest, message);// default cursor
	}
	return bReturn;
   //===========================================================================
 
	return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
 
 
 
 
 
HBRUSH COffenePostenDialog_Detail::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
  {
	   HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
       //--------------------------- Link Color Internet/ Email ------------------------------
	  if((pWnd->GetDlgCtrlID()==IDC_STATIC_INTERNET) ||(pWnd->GetDlgCtrlID()==IDC_STATIC_EMAIL))
      {
		  pDC->SetTextColor(clr_blue); 		   
	  }
      //---------------------------------------------------------------------------------
  
 
 
 
	  return hbr;
  }
  //###############################################################################

Open in new window

0
Thomas Stockbruegger
Asked:
Thomas Stockbruegger
  • 2
1 Solution
 
alb66Commented:
This is a nice sample (it is for a button, but you can apply the same concept to a static control):
http://www.codeproject.com/KB/buttons/hoverbutton.aspx

NOTE: may be you need to change CHoverButton::OnMouseHover from
void CHoverButton::OnMouseHover(WPARAM wparam, LPARAM lparam)
to
LRESULT CHoverButton::OnMouseHover(WPARAM wparam, LPARAM lparam)
and return 0 from it
0
 
LordOfPortsCommented:
This article might also be useful http://www.sahirshah.com/cpp/mouseover/MouseOver.html
0
 
LordOfPortsCommented:
Thomas, since you already are able to detect when the mouse is over your CStatic control here is some additional information and an approach I tested successfully:

1. Add a private BOOL variable to your CDialog derived class and name it "m_bMouseOver".

2. Associate control variables with your CStatic controls, you can do so by right-clicking on the static control and selecting "Add Variable" and name them e.g. "m_idc_internet" and "m_idc_email".

3. In your OnSetCursor method add the following code when you detect the on mouse over event in the if statement:

// Trigger a call to OnCtlColor
m_bMouseOver = TRUE;
m_idc_internet.Invalidate();
m_idc_email.Invalidate();

and in the else case, i.e. mouse out event:

m_bMouseOver = FALSE;
m_idc_internet.Invalidate();
m_idc_email.Invalidate();


4. Use the OnCtlColor code in the code snippet below.

Alternatively you could e.g. use the ColorStatic control from the project at http://www.codeproject.com/KB/static/coloredit_colorstatic.aspx as it provides a simple member method for changing the text color and might be easier to implement.
HBRUSH COffenePostenDialog_Detail::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	
	//------- Link Color Internet/ Email ------------------------------
	
	if(pWnd->GetDlgCtrlID() == IDC_STATIC_INTERNET || pWnd->GetDlgCtrlID() == IDC_STATIC_EMAIL) {
		if(m_bMouseOver == TRUE) {
			pDC->SetTextColor(RGB(0, 0, 255)); // Blue link color
		}
		else {
			pDC->SetTextColor(RGB(1, 1, 1)); // Black text color
		}
	}
      
	//---------------------------------------------------------------------------------
  
	return hbr;
}

Open in new window

0
 
Thomas StockbrueggerAuthor Commented:
Thank you. That was easy and the code I was looking for, thanks a lot
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now