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);
}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。