gpt4 book ai didi

c++ - 如何在MFC应用程序中添加文档菜单?

转载 作者:行者123 更新时间:2023-11-28 04:38:37 24 4
gpt4 key购买 nike

当您在 visual studio 中的任何选项卡上单击鼠标右键时,将出现一个菜单,其中包含一些选项,例如(保存、关闭除此以外的所有内容、复制完整路径、打开包含的文件夹等)。如何在 MFC(doc/view) 选项卡式应用程序中添加这样的菜单?提前致谢。

最佳答案

您应该有多个菜单。 IDR_MAINFRAME 通常在没有文档打开时使用,那不是你想要的。

资源编辑器应该显示另一个主菜单(不是弹出菜单),其 ID 类似于 IDR_MyAppTYPE。此菜单 ID 应该已经在您的 CWinAppEx 类中:

BOOL CMyApp::InitInstance()
{
...
pDocTemplate = new CMultiDocTemplate(IDR_MyAppTYPE, ...);
...
}

这是您的文档菜单。

使用资源编辑器编辑此菜单。添加命令 "Close all but this" 并且菜单命令的 id 类似于 ID_WINDOW_CLOSEALL_BUT_THIS

您必须在 CView 派生类中处理此命令。示例:

BEGIN_MESSAGE_MAP(CMyView, CView)
ON_COMMAND(ID_WINDOW_CLOSEALL_BUT_THIS, OnCloseAllButThis)
...
END_MESSAGE_MAP()

void CMyView::OnCloseAllButThis()
{
POSITION p1 = AfxGetApp()->GetFirstDocTemplatePosition();
while(p1)
{
CDocTemplate *doctempl = AfxGetApp()->GetNextDocTemplate(p1);
POSITION p2 = doctempl->GetFirstDocPosition();
while(p2)
{
CDocument* doc = doctempl->GetNextDoc(p2);
POSITION p3 = doc->GetFirstViewPosition();
while(p3)
{
CView* view = doc->GetNextView(p3);
if(view && view->GetParentFrame() && view != this)
view->GetParentFrame()->SendMessage(WM_CLOSE);
}
}
}
}

关于c++ - 如何在MFC应用程序中添加文档菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50738001/

24 4 0