您的位置:首页 > 其它

获取鼠标在Picture控件中的坐标,并显示到对话框的状态栏中

2010-07-29 02:04 741 查看


获取鼠标在Picture控件中的坐标,并显示到对话框的状态栏中 

1. 
题目

获取鼠标在Picture
控件中的坐标,并显示到对话框的状态栏中 

 
 
2. 
关键知识点

1) 
对话框客户区的概念;

对话框客户区不包括状态栏。

2) 
ScreenToClient的作用;

ScreenToClient将获取的屏幕坐标转换成相对客户区的坐标。

 
 
3. 
我的代码

view plain
copy to clipboard
print
?

/******************************************************************
 

*功能:获取鼠标在Picture控件中的坐标,并显示到对话框的状态栏中
 

*
 

*2010-04-10,by Li Chengyu
 

******************************************************************/
  

  

  

void
 CGetDlgWndDlg::OnMouseMove(
UINT
 nFlags, CPoint point)   

{  

    // TODO: Add your message handler code here and/or call default
  

  

    CRect rect_ctr;  

    (this
->GetDlgItem(IDC_STATIC))->GetWindowRect(&rect_ctr);
//获取Picture控件相对屏幕左上角的坐标,
  

                                                             //存储到rect_ctr中
  

  

//  CRect rect_dlg; 
  

//  this->GetWindowRect(&rect_dlg);//获取对话框相对屏幕左上角的坐标,存储到rect_dlg中
  

  

    //***************** test ***********************************
  

    //Picture控件左上角相对对话框客户区左上角的坐标
  

//  ScreenToClient(rect_ctr);//这里的客户区不包括对话框的状态栏
  

//  point.x =  rect_ctr.left;//
  

//  point.y =  rect_ctr.top;
  

  

    //***************** test ***********************************
  

    //对话框窗口左上角相对对话框客户区左上角的坐标
  

//  ScreenToClient(rect_dlg);//这里的客户区不包括对话框的状态栏
  

//  point.x = rect_dlg.left;
  

//  point.y = rect_dlg.top;
  

  

  

    ScreenToClient(rect_ctr);//获取Picture控件相对对话框客户区左上角的坐标
  

    point.x -=  rect_ctr.left;//point获取的是鼠标相对对话框客户区左上角的坐标,减去rect_ctr.left和
  

    point.y -=  rect_ctr.top;//rect_ctr.top后,即为鼠标相对Picture控件左上角的坐标
  

  

  

    //获取状态栏上的文字,并将鼠标的坐标显示在状态栏上
  

    char
    szString[100]={0};  

    char
    szText[512];  

      

    HWND
 hWnd = ::GetActiveWindow();  

    ::GetWindowText(hWnd,szText,200);  

    memset(szText+strlen(szText),' '
,20);  

      

    //如果鼠标位于Picture控件之外,在对话框状态栏上不显示其坐标
  

    if
( point.x>(rect_ctr.right-rect_ctr.left) || point.y>(rect_ctr.bottom-rect_ctr.top )  

        || point.x<0 || point.y<0 )  

        ;  

    else
  

        sprintf(szString,"(%4i,%4i)"
,point.x,point.y);  

  

    //将鼠标坐标显示到对话框状态栏上
  

//  sprintf(szString,"(%4i,%4i)",point.x,point.y);
  

  

    strcpy(szText+20,szString);  

    ::SetWindowText(hWnd,szText);  

  

  

    CDialog::OnMouseMove(nFlags, point);  

}  

来自http://blog.csdn.net/lichengyu/archive/2010/04/10/5470864.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  存储 2010
相关文章推荐