当前位置:   article > 正文

MFC实时显示鼠标坐标_mfc鼠标移动显示坐标

mfc鼠标移动显示坐标

实时显示鼠标坐标

方法一:在窗口的客户区实时显示鼠标坐标
以左上角为例,直接在鼠标移动消息的响应函数中添加以下代码。

void CMFC_DrawView::OnMouseMove(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	//方法一:在窗口的左上角实时显示鼠标坐标
    CString str;
    str.Format(_T("[%d,%d]  "), point.x, point.y); //引号中的两个空格是为了消除重叠现象
    CDC *pDC = GetDC();
    pDC->TextOut(0,0,str); //窗口左上角坐标为(0,0),修改可改变鼠标坐标的显示位置
    ReleaseDC (pDC);

	CView::OnMouseMove(nFlags, point);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

运行效果如下:
在这里插入图片描述
方法二:在状态栏最左边实时显示鼠标坐标
直接在鼠标移动消息的响应函数中添加以下代码。

void CMFC_DrawView::OnMouseMove(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	//方法二:在状态栏最左边实时显示鼠标坐标
	CString str;
    str.Format(_T("[%d,%d]  "), point.x, point.y);

	//获得程序状态栏对象的指针,AFX_IDW_STATUS_BAR就是状态栏的ID
	//它的功能是通过指定的ID来获得子孙窗口
	GetParent()->GetDescendantWindow(AFX_IDW_STATUS_BAR)->SetWindowText(str);
    
	CView::OnMouseMove(nFlags, point);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

运行效果如下:
在这里插入图片描述
方法三:在状态栏添加窗格用来实时显示鼠标坐标
1、打开MainFrm.cpp文件,找到静态数组indicators的定义,在数组中增加一个新的元素,即添加了一个新的窗格。新元素在数组中的位置,对应窗格在状态栏中的位置。
例如,将显示鼠标坐标的窗格放在状态栏的第二个位置,则在第一个数组元素ID_SEPARATOR后面增加一个新的数组元素ID_INDICATOR_MOUSE_POS。
在这里插入图片描述
修改后的代码如下:

static UINT indicators[] =
{
	ID_SEPARATOR,           // 状态行指示器
	ID_INDICATOR_MOUSE_POS, //鼠标位置坐标值窗格
	ID_INDICATOR_CAPS,	    // 大写 
	ID_INDICATOR_NUM,		// 数字键 
	ID_INDICATOR_SCRL,		// 滚动
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2、在Resource View资源视图中打开String Table字符串资源,然后在最后一行的下一个空白行中,或者任意处点右键选择“New String”,添加一个新的字符串资源。
ID为ID_INDICATOR_MOUSE_POS,Value设为一个不与任何其他字符串资源重复的整数值(一般采用默认值),Caption设为"鼠标的当前坐标",这是为了给时间的显示预留空间,因为状态栏会根据字符串的长度为相应的窗格确定缺省宽度。
在这里插入图片描述
3、在鼠标移动消息的响应函数中添加以下代码。
调用函数SetPaneText在窗格中输出当前鼠标位置,由于窗格编号为其在数组中的位置,故其编号从0开始,则第二个窗格的编号为1。

void CMFC_DrawView::OnMouseMove(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	//方法三:在状态栏实时显示鼠标坐标
	CString MousePosition;
	MousePosition.Format(_T("[%4d,%4d]"),point.x,point.y);

	//获得状态栏的指针
	CStatusBar* pStatusBar=(CStatusBar*)GetParentFrame()->
    GetDescendantWindow(ID_VIEW_STATUS_BAR);
	
	//在状态栏的第二个窗格中输出当前鼠标位置
	pStatusBar->SetPaneText(1,MousePosition); //将窗格编号改为0效果与方法二一样
    
	CView::OnMouseMove(nFlags, point);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

4、运行效果如下:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/492641
推荐阅读
相关标签
  

闽ICP备14008679号