前几天搞了注入DLL代码的问题,今天偶然想到如何实现控件响应鼠标事件,如何鼠标移动到某控件上静态编辑框或者鼠标显示提示信息,经过几番搜索,还好全部解决,就上回的代码
先在MainDialogWnd.cpp中声明一个对象用过存放鼠标提示信息
然后在初始化函数OnInitDialog()中设置m_stat,VS20XX的可以略过这段。也有人喜欢用老版本经典的VC6++,VC6的MFC新建的子对话框中通常没有用于初始化对话框的OnInitDialog()函数,我经过上回的学习,也发现我的VC6++代码中没有初始化函数OnInitDialog(),这也是要自己在类向导中添加,于是找遍类向导的信息,竟然没有发现OnInitDialog()这个函数,
手动添加……,我还是再找找相关资料,竟然被我找到了https://jingyan.baidu.com/article/1974b289a697daf4b1f77495.html,函数名为WM_INITDIALOG,而非OnInitDialog,害得我好找啊,于是这样:
在初始化OnInitDIalog里添加如下代码:
BOOL CMainDialogWnd::OnInitDialog()
{
CDialog::OnInitDialog();
//按钮等鼠标悬浮提示初始化
m_stat.Create(this);
m_stat.AddTool( GetDlgItem(IDC_BUTTON1), "固件无法升级时使用,详见说明书" ); //IDC_BUTTON为你要添加提示信息的按钮的ID
m_stat.AddTool( GetDlgItem(IDC_BUTTON2), "小心点击,可能会格式化" ); //IDC_BUTTON为你要添加提示信息的按钮的ID
//m_stat.AddTool( GetDlgItem(IDC_CHECK_CANRX_EN), "警告:在进行Bootloader下载时请不要打开【CAN接收】的开关!!!" );
//m_stat.AddTool( GetDlgItem(IDC_STATIC_Version), "作者邮箱:wangpeijin0326@126.com" );
m_stat.SetDelayTime(0); //设置延迟,如果为0则不等待,立即显示
m_stat.SetTipTextColor( RGB(0,0,255) ); //设置提示文本的颜色
m_stat.SetTipBkColor( RGB(255,255,255)); //设置提示框的背景颜色
//m_stat.SetMaxTipWidth(600);//设置文本框的最大宽度,注意里边的数值单位为像素,所以要通过不断测试来选定最理想的宽度。利用此句可显示多行
m_stat.Activate(TRUE); //设置是否启用提示
//按钮等鼠标悬浮提示初始化完毕
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
象这样子
在类向导里添加PreTranslateMessage消息函数,同样如下
添加如下代码
BOOL CMainDialogWnd::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
m_stat.RelayEvent(pMsg);
return CDialog::PreTranslateMessage(pMsg);
}
这是鼠标提示信息完成;如果要鼠标移到某控件,静态编辑框显示相应信息,仍然在上面的函数中添加如下代码
if(pMsg->hwnd == GetDlgItem(IDC_BUTTON1)->GetSafeHwnd() && pMsg->message == WM_MOUSEMOVE)
{
CString windowText;
GetDlgItem(IDC_BUTTON1)->GetWindowText(windowText); //得到按钮文本
GetDlgItem(IDC_STATIC1)->SetWindowText("这不是按扭"); //显示到静态文本框
}else if(pMsg->hwnd == GetDlgItem(IDC_BUTTON2)->GetSafeHwnd() && pMsg->message == WM_MOUSEMOVE)
{
CString windowText;
GetDlgItem(IDC_BUTTON2)->GetWindowText(windowText);
GetDlgItem(IDC_STATIC1)->SetWindowText("这也不是按扭");
}
象这样:
OK,完成,试下
然后鼠标放到BUtton1上
然后鼠标放到BUtton2上
打完收工