MFC光标移动到按钮上时编辑框显示时间,并显示光标的窗口位置和客户区位置
建立MFC应用程序
选择基于对话框
添加一个按钮三个编辑框,三个编辑框分别用来显示系统时间、光标在windows的位置、光标在client的位置。
将Button的captain改为Time,ID改为IDC_time。
点击 项目/类向导/成员变量/ , 为按钮和编辑框添加变量m_time,m_showtime,m_client,m_window,(方法有很多)。
注意类别为control,变量类型分别为cbutton和cedit
在类向导里 点击消息 找到mousemove,双击,
以上红字部分可以直接在代码中做如下添加:(红色为添加部分
在dlg.h中
public:
CButton m_button;
CEdit m_showtime;
CEdit m_client;
CEdit m_window;
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
在dlg.cpp中
void C光标移动Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_Time, m_button);
DDX_Control(pDX, IDC_EDIT1, m_showtime);
DDX_Control(pDX, IDC_EDIT2, m_client);
DDX_Control(pDX, IDC_EDIT3, m_window);
}
BEGIN_MESSAGE_MAP(C光标移动Dlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()
void C移动鼠标显示Dlg::OnMouseMove(UINT nFlags, CPoint point)
{
/*以下为获取鼠标当前点在屏幕上面的坐标
(x,y)坐标是以整个屏幕为参照
*/
CString m_csPointScreen;
CPoint p;
GetCursorPos(&p);
m_csPointScreen.Format(_T("%d,%d"),p.x, p.y);
m_window.SetWindowText(m_csPointScreen);
/*以下为获取鼠标当前点在窗口(客户区坐标)上面的坐标
(x,y)坐标是以客户区原点(即窗口标题以下,左侧边框往右)为参照*/
CString m_csPointWindow;
m_csPointWindow.Format(_T("%d,%d"),point.x, point.y);
m_client.SetWindowText(m_csPointWindow);
/////实现到=当光标在按钮上时,编辑框1中显示系统时间
CRect rect;
//以下四行为按钮区域client坐标
rect.bottom=122;
rect.top=11;
rect.left=11;
rect.right=151;
/*rect.BottomRight=(152.111);
rect.TopLeft=(11,17);*//出错
//InvalidateRect(&rect); UpdateWindow();
//获取按钮区域可以用GetDlgItem(IDC_Time)->GetClientRect(&rect);
//以下是其他方法,但都不大好使。
// GetDlgItem(IDC_Time)->GetClientRect(&rect);//不准确
// m_button.GetClientRect(&rect);//不灵敏
//GetWindowRect(GetDlgItem(IDC_Time), &rect);
// GetDlgItem(IDC_Time)->GetWindowRect(&rect);//获取控件相对于屏幕的位置
//ScreenToClient(rect);//转化为对话框上的相对位置
////显示系统时间
if(rect.PtInRect(point))
{
CString str;
CTime time = CTime::GetCurrentTime();
str = time.Format(_T("%Y-%m-%d %H:%M:%S %A"));
SetDlgItemText(IDC_EDIT1, str);//Mouse have in the rectangle.
//To add your process code...
}
else
{
m_showtime.SetWindowText(_T("")); //Mouse have leave the rectangle.
//To add your process code...
}
CDialogEx::OnMouseMove(nFlags, point);
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。