多文档的程序,新建文档,然后再关闭文档则会有6个GDI的泄漏,持续该动作会导致GDI涨到上限9999。
发现其中5个GDI是在下面的代码中发生的:
void CFrameWnd::ActivateFrame(int nCmdShow)
// nCmdShow is the normal show mode this frame should be in
{
// translate default nCmdShow (-1)
if (nCmdShow == -1)
{
if (!IsWindowVisible())
nCmdShow = SW_SHOWNORMAL;
else if (IsIconic())
nCmdShow = SW_RESTORE;
}
// bring to top before showing
BringToTop(nCmdShow);
if (nCmdShow != -1)
{
// show the window as specified
ShowWindow(nCmdShow);
// and finally, bring to top after showing
BringToTop(nCmdShow);
}
}
第一次调用BringToTop(nCmdShow);时会增加5个;若跳过该句则会在ShowWindow(nCmdShow);时增加5个;
请教此中缘由,并请教这几个GDI什么时候释放,怎么释放?本人调用childFrame::OnClose了,但却未释放。谢谢。

解决方案 »

  1.   

    查看BringToTop里的代码,看看里面是否有申请DC未释放
      

  2.   

    谢谢,又看了看;发现BringToTop那句不涨,还是ShowWindow的问题,但是ShowWindow里面的代码无法查看。
      

  3.   

    和ShowWindow应该没关系,看你的视图VIEW里代码,都是做什么的,有绘图的代码吗?
      

  4.   

    这些代码看不出来你怎么使用gdi的注意创建和消除gdi对象一定要对应
      

  5.   

    我也这样觉得应该和ShowWindow没关系,但是就是执行了它导致的泄漏,那么它的执行又会引起什么调用呢?我正在查View类。
      

  6.   

    你说的和你的代码每看到和Gdi有关阿?
      

  7.   


    问题应该出在OnPaint()函数里面。