VC++在状态栏上显示鼠标的位置
在线等单文档做的voidCTmView::OnMouseMove(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandler...
在线等
单文档做的
void CTmView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CStatusBar*pFrame=(CStatusBar*)AfxGetMainWnd();
CStatusBar*pStatusBar=(CStatusBar*)pFrame->GetDescendantWindow(AFX_IDW_STATUS_BAR);
CString strMousePoint;
strMousePoint.Format("%3d,%3d",point.x,point.y);
pStatusBar->SetPaneText(pStatusBar->CommandToIndex(IDS_INDICATOR_MOUSE),strMousePoint);
CView::OnMouseMove(nFlags, point);
} 展开
单文档做的
void CTmView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CStatusBar*pFrame=(CStatusBar*)AfxGetMainWnd();
CStatusBar*pStatusBar=(CStatusBar*)pFrame->GetDescendantWindow(AFX_IDW_STATUS_BAR);
CString strMousePoint;
strMousePoint.Format("%3d,%3d",point.x,point.y);
pStatusBar->SetPaneText(pStatusBar->CommandToIndex(IDS_INDICATOR_MOUSE),strMousePoint);
CView::OnMouseMove(nFlags, point);
} 展开
4个回答
展开全部
楼上说的有一定的局限性,就是只有鼠标在本窗口中的时候有效,移出本窗口的时候,就不起作用了。如果想跟踪鼠标在屏幕的任何位置,那就要用到3中方法:
★简单一种:
设定一个定时器,然后在里面使用GetCurrentPos(好像是这个函数,反正有个能获得鼠标指针当前位置的函数,查阅一下MSDN能确定一下吧),这个函数能得到鼠标在屏幕的位置,不是某个窗口的。
★稍微复杂点的方法:
使用鼠标钩子,截获鼠标移动的消息,然后分离出鼠标的位置,显示在要显示的地方。
★基于DirectInput的方法:
创建一个DirectInput对象,创建一个鼠标设备,设置协作级别为非独占和后台属性,这样就能获得鼠标在屏幕上的任意位置了。
★简单一种:
设定一个定时器,然后在里面使用GetCurrentPos(好像是这个函数,反正有个能获得鼠标指针当前位置的函数,查阅一下MSDN能确定一下吧),这个函数能得到鼠标在屏幕的位置,不是某个窗口的。
★稍微复杂点的方法:
使用鼠标钩子,截获鼠标移动的消息,然后分离出鼠标的位置,显示在要显示的地方。
★基于DirectInput的方法:
创建一个DirectInput对象,创建一个鼠标设备,设置协作级别为非独占和后台属性,这样就能获得鼠标在屏幕上的任意位置了。
展开全部
哈哈,我抢先了,分给我吧
万能方法。
直接拦截app(也就是程序主线程)中的消息。
先在xxxApp.cpp文件上面定义一个全局变量(或者CxxxApp的成员变量):HWND hStatusBarWnd;保存要显示鼠标坐标的窗口,(这步你通过在CMainWnd里面实现也可以)。在InitInstance里面初始化。
重载 CxxxApp 的PretranslateMessage成员函数:加如下这段:
if ( pMsg ->message == WM_MOUSEMOVE )
{
......CString strPos;
.......lParam 里面保存的是鼠标座标,低自己x,高字节y,为相对于 pMsg->hwnd的相对座标。
......SetWindowText(hStatusWnd,。。。
}
万能方法。
直接拦截app(也就是程序主线程)中的消息。
先在xxxApp.cpp文件上面定义一个全局变量(或者CxxxApp的成员变量):HWND hStatusBarWnd;保存要显示鼠标坐标的窗口,(这步你通过在CMainWnd里面实现也可以)。在InitInstance里面初始化。
重载 CxxxApp 的PretranslateMessage成员函数:加如下这段:
if ( pMsg ->message == WM_MOUSEMOVE )
{
......CString strPos;
.......lParam 里面保存的是鼠标座标,低自己x,高字节y,为相对于 pMsg->hwnd的相对座标。
......SetWindowText(hStatusWnd,。。。
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接添加WM_MOUSEMOVE消息应该就可以了啊
将获得的鼠标信息用CString的Format函数转成字符串
再写到状态栏里
将获得的鼠标信息用CString的Format函数转成字符串
再写到状态栏里
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
..拙笔
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询