Getting the boundary of a button

How can I get the boundary of a button? I wish to get the cursor's co-ordinate such that when the cursor's co-ordinate is within the boundary of a button, a particular function is performed.
thankyouallAsked:
Who is Participating?
 
wyy_cqCommented:
1, in OnTimer(...) you must conver the point between screen and window coordinates .

2,so i recommend you'd better work with the OnSetCursor(....)
you must add some flag to you application to identify when will popup the message box.

there are some false code:

BOOL fP;

in OnSetCursor(...)
{
  check the point is in area.
  if in
   {
    fP=FALSE;
    AfxMessageBox(...);
    // fP=TRUE; do not do this ,
   }
  else
   {
     fP=TRUE;
   }
   ....
}
0
 
Tommy HuiEngineerCommented:
Use GetWindowRect() in conjunction with GetCursorPos() will get you that information.
0
 
V245Commented:
I guess in this case it is better to override CButton::OnMouseMove.
0
Cloud Class® Course: C++ 11 Fundamentals

This course will introduce you to C++ 11 and teach you about syntax fundamentals.

 
thankyouallAuthor Commented:
It gaves me the co-ordinate of the window, how can I determine if the cursor has entered within the boundary of a component within the window? Please help.
0
 
thankyouallAuthor Commented:
It gaves me the co-ordinate of the window, how can I determine if the cursor has entered within the boundary of a component within the window? Please help.
0
 
wyy_cqCommented:
you 'd better redefine the WM_SETCUSROR message map in the parent window.
when the cursor move in the button , the
afx_msg BOOL OnSetCursor( CWnd* pWnd, UINT nHitTest, UINT message ); will be called .
from the pWnd you can get the control's ID or HWND, and know which control it is.

by this way you can deal with all the child button in the same method.




0
 
wyy_cqCommented:
define a timer to get the curent cursor position.(onSetCursor is also a good idea ,as my last comment)
you 'd better not to define mouseMove because the mouse move message will not send to parent window .

i recommend all the operation will be done in parent window.
code:
in OnTimer or OnSetCursor
{
 CPoint ptCursor
 ::GetCursorPos(&ptCursor);//in screen coordinates
 CRect rcBtn;
 GetDlgItem(IDC_BTN)->GetWindowRect(rcBtn);// in screen coordinates
 // if in onSetCursor handler, you will retrieve the CWnd* from the parameter
 
 if(ptCursor.x< rcBtn.Width()/2+rcBtn.left
     && ptCursor.x>rcBtn.left)
 {// in the left of the button
    do your function here
 }
}


0
 
thankyouallAuthor Commented:
thanks!... please gimme sometime to try it out!
0
 
thankyouallAuthor Commented:
I've tried it out... but it seems that sometimes when my mouse doesn't even go near or go within the boundary of the button, it also performs the function which I wrote them at the "do your function here" line. Why is this so? I just insert a simple MessageBox function.
I used the OnSetCursor function and after running, when my mouse go near or within the boundary of the button, the messagebox keeps on appearing after I terminate it. It just keep on appearing non-stop. Please help...thanks!
0
 
thankyouallAuthor Commented:
Thanks!
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.

All Courses

From novice to tech pro — start learning today.