赞
踩
方法一:在窗口的客户区实时显示鼠标坐标
以左上角为例,直接在鼠标移动消息的响应函数中添加以下代码。
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);
}
运行效果如下:
方法二:在状态栏最左边实时显示鼠标坐标
直接在鼠标移动消息的响应函数中添加以下代码。
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、打开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, // 滚动
};
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); }
4、运行效果如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。