BOOL CBitMap1Dlg::OnInitDialog()
{
...
CPaintDC dc(this); // 创建内存兼容DC
m_memDC.CreateCompatibleDC(&dc); CBitmap memBit ;
memBit.CreateCompatibleBitmap(&dc, 1000, 1000); // 内存位图大小
pSizeBmp = memDC.SelectObject(&memBit);
// 创建临时兼容内存DC, 用于贴到memDC中
CBitmap memDC_temp;
memDC_temp.CreateCompatibleDC(&dc); // 背景
bit0.LoadBitmap(IDB_BG);
memDC_temp.SelectObject(&bit0);
memDC.BitBlt(0, 0, 1000, 1000, &memDC_temp, 0, 0, SRCCOPY);
memDC_temp.SelectObject(pSizeBmp);
// 贴其他图片
...
}void CBitMap1Dlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// 把m_memDC画到dc上
dc.BitBlt(0, 0, 1000, 1000, &m_memDC, 0, 0, SRCCOPY);
memDC.SelectObject(pSizeBmp);
}我是用一个m_memDC做内存DC,每次将memDC_temp的位图贴到m_memDC中,最后在OnPaint函数中一次贴到窗口中。问题:程序启动,显示图片,但是移动窗口时,即再次调用OnPaint,为什么图片就没了?
{
...
CPaintDC dc(this); // 创建内存兼容DC
m_memDC.CreateCompatibleDC(&dc); CBitmap memBit ;
memBit.CreateCompatibleBitmap(&dc, 1000, 1000); // 内存位图大小
pSizeBmp = memDC.SelectObject(&memBit);
// 创建临时兼容内存DC, 用于贴到memDC中
CBitmap memDC_temp;
memDC_temp.CreateCompatibleDC(&dc); // 背景
bit0.LoadBitmap(IDB_BG);
memDC_temp.SelectObject(&bit0);
memDC.BitBlt(0, 0, 1000, 1000, &memDC_temp, 0, 0, SRCCOPY);
memDC_temp.SelectObject(pSizeBmp);
// 贴其他图片
...
}void CBitMap1Dlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// 把m_memDC画到dc上
dc.BitBlt(0, 0, 1000, 1000, &m_memDC, 0, 0, SRCCOPY);
memDC.SelectObject(pSizeBmp);
}我是用一个m_memDC做内存DC,每次将memDC_temp的位图贴到m_memDC中,最后在OnPaint函数中一次贴到窗口中。问题:程序启动,显示图片,但是移动窗口时,即再次调用OnPaint,为什么图片就没了?
// memDC.SelectObject(pSizeBmp);
应该自己写一个控件,放在dialog里,所有的画图有这个控件自己完成。
不想自己写控件,可以考虑subclass一个static控件。