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

来源:互联网 发布:淘宝抢购脚本 编辑:程序博客网 时间:2024/05/02 02:29

1. 题目

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

2. 关键知识点

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

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

2) ScreenToClient的作用;

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

3. 我的代码

[cpp] view plaincopy
  1. /****************************************************************** 
  2. *功能:获取鼠标在Picture控件中的坐标,并显示到对话框的状态栏中 
  3. * 
  4. *2010-04-10,by Li Chengyu 
  5. ******************************************************************/  
  6.   
  7.   
  8. void CGetDlgWndDlg::OnMouseMove(UINT nFlags, CPoint point)   
  9. {  
  10.     // TODO: Add your message handler code here and/or call default  
  11.   
  12.     CRect rect_ctr;  
  13.     (this->GetDlgItem(IDC_STATIC))->GetWindowRect(&rect_ctr);//获取Picture控件相对屏幕左上角的坐标,  
  14.                                                              //存储到rect_ctr中  
  15.   
  16. //  CRect rect_dlg;   
  17. //  this->GetWindowRect(&rect_dlg);//获取对话框相对屏幕左上角的坐标,存储到rect_dlg中  
  18.   
  19.     //***************** test ***********************************  
  20.     //Picture控件左上角相对对话框客户区左上角的坐标  
  21. //  ScreenToClient(rect_ctr);//这里的客户区不包括对话框的状态栏  
  22. //  point.x =  rect_ctr.left;//  
  23. //  point.y =  rect_ctr.top;  
  24.   
  25.     //***************** test ***********************************  
  26.     //对话框窗口左上角相对对话框客户区左上角的坐标  
  27. //  ScreenToClient(rect_dlg);//这里的客户区不包括对话框的状态栏  
  28. //  point.x = rect_dlg.left;  
  29. //  point.y = rect_dlg.top;  
  30.   
  31.   
  32.     ScreenToClient(rect_ctr);//获取Picture控件相对对话框客户区左上角的坐标  
  33.     point.x -=  rect_ctr.left;//point获取的是鼠标相对对话框客户区左上角的坐标,减去rect_ctr.left和  
  34.     point.y -=  rect_ctr.top;//rect_ctr.top后,即为鼠标相对Picture控件左上角的坐标  
  35.   
  36.   
  37.     //获取状态栏上的文字,并将鼠标的坐标显示在状态栏上  
  38.     char    szString[100]={0};  
  39.     char    szText[512];  
  40.       
  41.     HWND hWnd = ::GetActiveWindow();  
  42.     ::GetWindowText(hWnd,szText,200);  
  43.     memset(szText+strlen(szText),' ',20);  
  44.       
  45.     //如果鼠标位于Picture控件之外,在对话框状态栏上不显示其坐标  
  46.     if( point.x>(rect_ctr.right-rect_ctr.left) || point.y>(rect_ctr.bottom-rect_ctr.top )  
  47.         || point.x<0 || point.y<0 )  
  48.         ;  
  49.     else  
  50.         sprintf(szString,"(%4i,%4i)",point.x,point.y);  
  51.   
  52.     //将鼠标坐标显示到对话框状态栏上  
  53. //  sprintf(szString,"(%4i,%4i)",point.x,point.y);  
  54.   
  55.     strcpy(szText+20,szString);  
  56.     ::SetWindowText(hWnd,szText);  
  57.   
  58.   
  59.     CDialog::OnMouseMove(nFlags, point);  
  60. }  

原创粉丝点击