今天写了一个多文档的应用程序,要响应菜单消息。
消息是在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);