gpt4 book ai didi

MFC 选项卡式文档 - 如何启用鼠标中键关闭文档?

转载 作者:行者123 更新时间:2023-12-01 14:50:46 24 4
gpt4 key购买 nike

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

alt text

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

这在 Firefox、IE、Chrome 中是可能的,更重要的是 VS2008 .但是单击选项卡上的中间按钮没有任何作用。

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

编辑 :猜测我需要对从 CMDIFrameWndEx::GetMDITabs 返回的 CMFCTabCtrl 进行子类化...

最佳答案

不需要子类化(呼)。通过劫持大型机的 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);
}

关于MFC 选项卡式文档 - 如何启用鼠标中键关闭文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1234205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com