2 fengjunsen fengjunsen 于 2016.09.07 12:57 提问

MFC 主窗口中监测toolbar的按下与弹起

我如何在PreTranslateMessage中监测工具栏中某按钮的按下与弹起,我想按下执行某个事件,弹起执行某个事件。
if ( pMsg->message == WM_LBUTTONDOWN)
{
if (pMsg->hwnd == m_toolbar.GetToolBarCtrl().GetDlgItem(IDC_TOOL_FOCUSADD)->m_hWnd)

{
if(m_bIsDeviceOpen)
{
MVC_SerialSendData(m_iCurDevNo,&serial,dataToComFA,8);
}
else
{
MessageBox("请先打开千兆网设备","错误",MB_OK);
}
}
}
现在这样提示访问位置出错,获取不到工具栏中这个按钮的句柄。

3个回答

wlj1234
wlj1234   2016.09.07 14:01
已采纳

工具栏上的按钮不是独立的窗口,只是外观画出来像按钮,实际上是没有句柄的
可以拦截m_toolbar的WM_LBUTTONDOWN消息,再根据按钮位置进行处理

wlj1234
wlj1234   2016.09.07 13:10

if (m_toolbar.GetSafeWnd() && pMsg->hwnd == m_toolbar.GetToolBarCtrl().GetDlgItem(IDC_TOOL_FOCUSADD)->m_hWnd)

fengjunsen
fengjunsen 不行的哦
一年多之前 回复
fengjunsen
fengjunsen   2016.09.07 15:06

确实实际上是没有句柄的,最后的实现方式是在PreTranslateMessage中监测鼠标的按键区域,通过按键区域来模拟工具栏图标的按下

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!