【问题标题】:MFC Tabbed Documents - how to enable middle-mouse button to close document?MFC 选项卡式文档 - 如何启用鼠标中键关闭文档?
【发布时间】:2010-11-17 01:54:13
【问题描述】:

如果您创建新的 MFC 应用程序(使用 MFC 功能包)并使用所有默认值,请单击完成。它使用新的“选项卡式文档”样式创建 MDI 应用程序。

我认为这些都很棒,只是让我很恼火的是,我无法通过在选项卡上单击鼠标中键来关闭选项卡式文档窗口。

这在 Firefox、IE、Chrome 和更重要的 VS2008 中是可能的。但是单击选项卡上的中间按钮不会执行任何操作。

我不知道如何覆盖标签栏以允许我处理ON_WM_MBUTTONDOWN 消息。有什么想法吗?

编辑:猜想我需要继承从 CMDIFrameWndEx::GetMDITabs 返回的 CMFCTabCtrl...

【问题讨论】:

    标签: mfc mfc-feature-pack tabbed-document-interface


    【解决方案1】:

    不需要子类化(呸)。通过劫持大型机的 PreTranslateMessage 设法使其工作。如果当前消息是鼠标中键消息,我会检查单击的位置。如果它在一个选项卡上,那么我关闭该选项卡。

    BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
    {
        switch (pMsg->message)
        {
            case WM_MBUTTONDBLCLK:
            case WM_MBUTTONDOWN:
            {
                //clicked middle button somewhere in the mainframe.
                //was it on a tab group of the MDI tab area?
                CWnd* pWnd = FromHandle(pMsg->hwnd);
                CMFCTabCtrl* tabGroup = dynamic_cast<CMFCTabCtrl*>(pWnd);
                if (tabGroup)
                {
                    //clicked middle button on a tab group.
                    //was it on a tab?
                    CPoint clickLocation = pMsg->pt;
                    tabGroup->ScreenToClient(&clickLocation);
                    int tabIndex = tabGroup->GetTabFromPoint(clickLocation);
                    if (tabIndex != -1)
                    {
                        //clicked middle button on a tab.
                        //send a WM_CLOSE message to it
                        CWnd* pTab = tabGroup->GetTabWnd(tabIndex);
                        if (pTab)
                        {
                            pTab->SendMessage(WM_CLOSE, 0, 0);
                        }
                    }
                }
                break;
            }
            default:
            {
                break;
            }
        }
        return CMDIFrameWndEx::PreTranslateMessage(pMsg);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多