MFC MDI GetActiveView() 为空

本文介绍了一个多文档界面(MDI)应用程序中菜单响应的问题及解决方案。作者最初尝试使用GetActiveView()获取当前活动视图但失败,之后通过CMDIChildWnd成功实现了功能。此外,还提供了解决菜单项默认不显示问题的方法。
摘要由CSDN通过智能技术生成

今天写了一个多文档的应用程序,要响应菜单消息。

消息是在MainFrame中响应的。然后对当前的活动窗口进行修改。

结果我直接调用GetActiveView()返回的一直是空。

我上网搜了一下没有找到解决办法,后来查了一下MSDN才发现对应多文档(MDI)下这么用是不行的。需要先获得CMDIChildWnd然后在通过CMDIChildWnd获得view才行。

代码如下;


        CMDIChildWnd *pChild = static_cast<CMDIChildWnd *>(GetActiveFrame());
	if (pChild)
	{
		CYourView *pView = NULL;
		pView = static_cast<CYourView*>(pChild->GetActiveView());
		if (pView)
		{
			//do something
		}
	}

另外还有个问题,就是我添加的菜单一开始默认没有显示,需要在点击一次才能显示。

解决的办法是在MainFrame的create函数里面的下面部分

// 启用菜单个性化(最近使用的命令)
// TODO: 定义您自己的基本命令,确保每个下拉菜单至少有一个基本命令。
CList<UINT, UINT> lstBasicCommands;

里面加上默认要显示的菜单命令ID:

lstBasicCommands.AddTail(ID_YOURID);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值