VC6中添加一个SDI工程,在class CMainFrame : public CFrameWnd中添加一个函数,除了这个函数外其它代码都是系统默认的,
void CMainFrame::ChgCurMenu(DWORD dwMenuid)
{
   if (m_hMenuDefault)
   {
       SetMenu(NULL);// 有没有这个语句都会有内存增涨
       ::DestroyMenu(m_hMenuDefault);
       HINSTANCE hInst = AfxGetResourceHandle();
       m_hMenuDefault = LoadMenu(hInst, MAKEINTRESOURCE(dwMenuid));
       OnUpdateFrameMenu(m_hMenuDefault);
   }
}
添加10个不同的菜单,点一次鼠标,依次将这10个菜单换一遍。刚开始几次,内存增涨,点几次之后就看不到明显增涨了。但是,如果把鼠标移动菜单上面,来回移动显示不同的菜单,内存还是会增加。
折腾好几天了,各位帮帮忙,看看到底什么原因。

解决方案 »

  1.   

    看看DestroyMenu的返回值是否为0
      

  2.   

    做了个样例,SDI,只有3句话
    HINSTANCE hInst = AfxGetResourceHandle();
    m_hMenuDefault = LoadMenu(hInst, MAKEINTRESOURCE(dwMenuid));
    OnUpdateFrameMenu(m_hMenuDefault);
    重复调用并没有发现内存增加,楼主可能是其他地方出的问题。
      

  3.   

    anmychen2001,我也是专门做的一个样例,除了上面帖出来的代码没有其它东西。难道我VC编译器出了问题?另外有位兄弟也做了个测试,他的结果是开始的时候增加,一段时间之后就不变了。我用定时器反复替换菜单,一段时间之后内存也没变化了。但是停止定时一会儿,再开始还是会增涨。
      

  4.   

    我把整个测试代码弄到这里了,有空的兄弟帮忙看看。谢谢了
    http://dl5.csdn.net/fd.php?i=625443914039685&s=4a695547240295ad454ba2391c1fdf57