请问这段代码有问题吗。。为嘛内存泄露啊
HDC g_screenDC = GetDC(NULL);
BOOL CGDITestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
SetTimer(1000,100,0);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CGDITestDlg::OnPaint()
{
PAINTSTRUCT paintStruct;
::BeginPaint(this->m_hWnd,&paintStruct);
::EndPaint(this->m_hWnd,&paintStruct);
// 创建或者销毁对话框
if(g_dlg)
{
g_dlg->DestroyWindow();
delete g_dlg;
g_dlg = NULL;
}else
{
g_dlg = new CTestDialog1();
g_dlg->Create(IDD_DIALOG1, NULL);
g_dlg->ShowWindow(SW_SHOW);
}
// 内存信息
WCHAR buf[MAX_PATH] = {0};
MEMORYSTATUS mem_stat;
memset(&mem_stat,0,sizeof(MEMORYSTATUS));
mem_stat.dwLength = sizeof(MEMORYSTATUS);
GlobalMemoryStatus(&mem_stat);
_snwprintf(buf,MAX_PATH,L"%d %d",mem_stat.dwTotalPhys/1024, mem_stat.dwAvailPhys/1024);
HDC memDC = CreateCompatibleDC(g_screenDC);
HBITMAP hBitmap = CreateCompatibleBitmap( memDC, 800 , 600 );
HGDIOBJ hObj = SelectObject( memDC , hBitmap );
SetBkColor(memDC,RGB(0,0,0));
SetTextColor(memDC,RGB(255,255,255));
RECT rect = {0,0,800,600};
DrawText(memDC,buf,-1, &rect, DT_VCENTER|DT_CENTER);
// 将临时DC绘制到屏幕
BitBlt( g_screenDC, 0 , 0 ,800,600 ,memDC,0,0,SRCCOPY);
// 销毁
if(memDC && hObj)
{
::SelectObject(memDC,hObj);
}
if(memDC)
{
::DeleteDC(memDC);
}
if(hBitmap)
{
::DeleteObject(hBitmap);
}
}
CDialog* g_dlg = NULL;
void CGDITestDlg::OnTimer(UINT_PTR nIDEvent)
{
CDialog::OnTimer(nIDEvent);
// 刷新界面
SendMessage(WM_PAINT,0,0);
}
CTestDialog1 是一个很普通的对话框,用向导添加的,就2个button
这段代码,内存不会断减少,但不是每次调用都减少,而是某个速度,比如几十秒减少4或者8K。。