在主对话框类中重写PreTranslateMessage(MSG* pMsg)函数

myDlg.h
class MyDlg : public CDialogEx
{
public:
	BOOL PreTranslateMessage(MSG* pMsg);
}

//法一:判断控件ID的方式
BOOL MyDlg ::PreTranslateMessage(MSG* pMsg)
{
	if (pMsg->message == WM_LBUTTONDOWN) // 检查是否是鼠标左键按下消息
	{
		if (pMsg->hwnd == GetDlgItem(IDC_RET_DOIP_VIEW)->GetSafeHwnd())		//IDC_RET_DOIP_VIEW:RichEditCtrl控件的ID
		{
			MessageBox(_T("单击事件触发!"));
		}
	}

//法二:判断点击区域的类名,不过我的识别不准(控件内有的位置没有弹框),可能是我之前设置自适应窗口大小导致页面布局改变了,我没找到解决办法就没用这个写法了
BOOL CDoipEcuDlg::PreTranslateMessage(MSG* pMsg)
{
	if (pMsg->message == WM_LBUTTONDOWN) // 检查是否是鼠标左键按下消息
	{
		CPoint point(LOWORD(pMsg->lParam), HIWORD(pMsg->lParam));
		CWnd* pWnd = WindowFromPoint(point);				// 判断pWnd是否是你想要监控的控件
		if (pWnd != NULL)
		{
			if (pWnd->IsKindOf(RUNTIME_CLASS(CRichEditCtrl)))	//判断是否按下RichEditCtrl控件,CRichEditCtrl是控件的类名
			{
				MessageBox(_T("单击事件触发!"));
		   }
		//	 其他控件类型检查...
		}
	}

在控件内监控鼠标消息

第一次接触MFC,记录一下学习和踩坑的过程。
最初想法是直接监控RichEditCtrl控件内的鼠标消息,有点击就把鼠标对应行高亮,但是考虑到还要对其它控件进行操作,就重新在主对话框实现监控鼠标点击RichEditCtrl的消息。
MFC中RichEdit2.0控件,实现鼠标选中行高亮显示

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐