您的位置:首页 > 其它

MFC MDI GetActiveView() 为空

2014-12-16 14:30 441 查看
今天写了一个多文档的应用程序,要响应菜单消息。

消息是在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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: