恩,xufen340分析得很对.
我刚才做了一下测试,在另外的工程中对话框打开时就执行到RunModalLoop.因此可以说明对话框是打开了的,只是显示不出来.于是我想到我之前为了让窗口保持显示打开的图片增加了一个窗口刷新函数,OnPaint函数.我把这个函数去掉后,对话框就显示出来了.
但是新的问题又来了,如何让窗口保持显示打开的图片?切换界面后不刷新掉?
我在窗口控件的OnPaint事件里的代码为
if (sLastPicture != "")
{
CDC* pDC = this->GetDC();
CRect rc;
GetClientRect(&rc);
CDC MemDC;
//内存DC,为解决叠加后的闪烁问题
MemDC.CreateCompatibleDC(pDC);
//使内存DC与PDC兼容DC
CBitmap bm;
bm.CreateCompatibleBitmap(pDC,Width * 2,Height);
//创建兼容位图
MemDC.SelectObject(&bm);
//将图像复制到内存DC
SetStretchBltMode(MemDC.GetSafeHdc(),COLORONCOLOR);
StretchDIBits(MemDC.GetSafeHdc(),
0,
0,
Width * 2,
//显示窗口宽度
Height,
//显示窗口高度
0,
0,
Width * 2,
//图像宽度
Height,
//图像高度
m_pSaveBuffer,
//图像缓冲区
m_pBmpInfo,
//BMP图像描述信息
DIB_RGB_COLORS,
SRCCOPY
);
pDC->SetStretchBltMode(COLORONCOLOR);
pDC->StretchBlt(0,0,rc.Width(),rc.Height(),&MemDC,0,0,Width * 2,Height,SRCCOPY);
TRACE("NUM\n");
MemDC.DeleteDC();
this->ReleaseDC(pDC);
}