MFC中,目的是要在状态栏中显示当前鼠标的位置,要求在MainFream中实现。
要求在mainframe中实现是因为我们课本就是这样显示时间的,现在我想用这样的方法来实现显示鼠标位置,先谢谢大家了。在MainFrm.cpp中添加如下代码:static...
要求在mainframe中实现是因为我们课本就是这样显示时间的,现在我想用这样的方法来实现显示鼠标位置,先谢谢大家了。
在MainFrm.cpp中添加如下代码:
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
IDR_xx,//这个是添加的
};
在CMainFrame中添加函数OnMouseMove函数来获取鼠标位置,代码如下:
void CMainFrame::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
s=point.x;//s为int型,包含鼠标X值
t=point.y;//t为int型,包含鼠标Y值
CFrameWnd::OnMouseMove(nFlags, point);
}
还有Ontimer函数,代码如下:
void CMainFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
CString k;
k.Format("%d,%d",s,t);
m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex(IDR_xx),k,true);
CFrameWnd::OnTimer(nIDEvent);
}
OnCreat函数中包括代码如下:
在return 0;前面添加了代码:
SetTimer(1,1000,NULL);
好像就是全部了,结果是这样的:
数值非常大。我测试了好像是在OnMouseMove中的数字没有传递到s和t中。但是不知道为什么,求解。再次谢谢,我已经写得很详细了。。。 展开
在MainFrm.cpp中添加如下代码:
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
IDR_xx,//这个是添加的
};
在CMainFrame中添加函数OnMouseMove函数来获取鼠标位置,代码如下:
void CMainFrame::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
s=point.x;//s为int型,包含鼠标X值
t=point.y;//t为int型,包含鼠标Y值
CFrameWnd::OnMouseMove(nFlags, point);
}
还有Ontimer函数,代码如下:
void CMainFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
CString k;
k.Format("%d,%d",s,t);
m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex(IDR_xx),k,true);
CFrameWnd::OnTimer(nIDEvent);
}
OnCreat函数中包括代码如下:
在return 0;前面添加了代码:
SetTimer(1,1000,NULL);
好像就是全部了,结果是这样的:
数值非常大。我测试了好像是在OnMouseMove中的数字没有传递到s和t中。但是不知道为什么,求解。再次谢谢,我已经写得很详细了。。。 展开
2个回答
展开全部
s和t的定义在哪里, 是single document么
这样思路不对 你的timer很难跟上mousemove消息的速度
这样思路不对 你的timer很难跟上mousemove消息的速度
追问
在classview的名称上点右键定义的。在MainFrm.h中定义的。
追答
如果是single document的话, Frame是无法接受mousemove消息的 断点看看 显示部分是view
void CMFCTestView::OnMouseMove(UINT nFlags, CPoint point)
{
CString strToPrint;
strToPrint.Format(TEXT("%d,%d"),point.x, point.y);
static_cast(theApp.m_pMainWnd)->SetStatusBarText(strToPrint);
CView::OnMouseMove(nFlags, point);
}
int CMainFrame::SetStatusBarText(CString strInfo)
{
m_wndStatusBar.SetPaneText(0, strInfo);
return 0;
}
展开全部
他没有收到消息,s和t还是未初始化的值,消息都跑上面的视图或子框架里去了
你直接在ontime里GetCursorPos吧,时间改短点,1000/30,每秒30次比较流畅
CPoint pt;
CRect rt;
GetCursorPos(&pt);
ScreenToClient(&pt);
GetClientRect(&rt);
if(rt.PtInRect(pt)){
CString str;
str.Format("%d,%d",pt.x,pt.y);
GetMessageBar()->SetWindowText(str);
}
你直接在ontime里GetCursorPos吧,时间改短点,1000/30,每秒30次比较流畅
CPoint pt;
CRect rt;
GetCursorPos(&pt);
ScreenToClient(&pt);
GetClientRect(&rt);
if(rt.PtInRect(pt)){
CString str;
str.Format("%d,%d",pt.x,pt.y);
GetMessageBar()->SetWindowText(str);
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询