MFC功能区主页按钮双击关闭应用程序
MFC ribbon home button closes app with double click
我遇到了主页功能区按钮的奇怪行为。
我在Visual Studio 2010中使用具有功能区控件的Office模板创建了标准MFC应用程序。但是,如果我双击上方位置的"主页"功能区按钮,则应用程序将关闭。
您能否告诉我这是否是标准的 MFC 应用程序处理程序行为以及如何更改它?
我已经查看了防止双击MFC-Dialog按钮,但无法将其应用于我的情况(更清楚 - 我不知道如何将双击处理程序添加到功能区主页按钮(。
CMFCRibbonApplicationButton不是从CWnd派生的,因此无法处理WM_LBUTTONDBLCLK消息。 一种解决方案是从CMFCRibbonBar派生。
class CCustomRibbonBar : public CMFCRibbonBar
{
// ...
protected:
DECLARE_MESSAGE_MAP()
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
};
BEGIN_MESSAGE_MAP(CCustomRibbonBar, CMFCRibbonBar)
ON_WM_LBUTTONDBLCLK()
END_MESSAGE_MAP()
void CCustomRibbonBar::OnLButtonDblClk(UINT nFlags, CPoint point)
{
CMFCRibbonBaseElement* pHit = HitTest(point);
if (pHit->IsKindOf(RUNTIME_CLASS(CMFCRibbonApplicationButton)))
{
// the user double-clicked in the application button
// do what you want here but do not call CMFCRibbonBar::OnLButtonDblClk
return;
}
CMFCRibbonBar::OnLButtonDblClk(nFlags, point);
}
另一种解决方案:在CMainFrame类中重写预翻译消息;
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
if ((WM_LBUTTONDBLCLK == pMsg->message) && (pMsg->hwnd == m_wndRibbonBar))
{
CPoint point(pMsg->pt);
m_wndRibbonBar.ScreenToClient(&point);
CMFCRibbonBaseElement* pHit = m_wndRibbonBar.HitTest(point);
if (pHit && pHit->IsKindOf(RUNTIME_CLASS(CMFCRibbonApplicationButton)))
{
// do what you want but do not call CMDIFrameWndEx::PreTranslateMessage
return TRUE; // no further dispatch
}
}
return CMDIFrameWndEx::PreTranslateMessage(pMsg);
}
- 派生你自己的 CMFCRibbonApplicationButton 派生类。
- 为 CMFCRibbonApplicationButton::OnLButtonDblClk 创建消息处理程序
- 在双击时提供您想要执行的操作的自己的实现。如果什么都没发生,就把身体留空。
- 在CMainFrame中,您可以找到CMFCRibbonApplicationButton m_MainButton的定义。将类名替换为您的实现。
相关文章:
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- MFC功能区主页按钮双击关闭应用程序
- 如何在后台模拟鼠标单击到 DirectX 应用程序?
- 无论如何,是否可以确定MFC应用程序是通过PC重新启动或用户单击应用程序快捷方式开始的
- 应用程序最小化时单击显示桌面/最小化全部
- 将C 应用程序连接到WCF双工服务
- 如何检查鼠标单击位置是必需的应用程序
- 是否可以报告用户在 Android 应用程序中单击了哪些按钮
- QT通过单击Menubar C 移动整个窗口/应用程序
- 如何将OpenMP与Qt一起使用,以便应用程序仍然可以点击
- 当在C#中的WPF应用程序中单击一个按钮时,如何调用C 代码
- 从 mfc 应用程序点击网络服务,并希望从网络服务登录方法读取用户代码返回
- C++(MFC)应用程序与CWebBrowser2 -> ChromeFrame->HTML5应用程序,如何将点击事件从HTML5获取到C++应用程序?
- QT/C++,OS X:退出应用程序时可选择隐藏(),以便应用程序继续运行,并在单击dock中的图标后再次显示
- 使用 ncurses 捕获控制台应用程序上的鼠标单击
- 无线键盘/鼠标应用程序:模拟击键
- 获取第三方点击一次应用程序的配置文件夹
- 如何为我的C++应用程序提供单击以打开所述应用程序的文件的文件路径
- 使用 UI 自动化单击应用程序中的按钮
- visual studio 2010-C++Windows窗体应用程序单击按钮即可访问另一个窗体