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

1. 题目

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

2. 关键知识点

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

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

2) ScreenToClient的作用;

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

3. 我的代码

/****************************************************************** *功能:获取鼠标在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); }

你可能感兴趣的:(存储,2010)