方法一:
处理ON_WM_ERASEBKGND消息,在OnEraseBkgnd里加如下代码
<textarea cols="50" rows="15" name="code" class="cpp"> CDC MemDC; //CBitmap对象 CBitmap Bitmap,*pOldBitmap; //BITMAP句柄 BITMAP bm; //加载位图 Bitmap.LoadBitmap(IDB_BITMAP1); //将位图资源与句柄绑定 Bitmap.GetObject(sizeof(BITMAP),&bm); //创建与内存兼容的DC MemDC.CreateCompatibleDC(pDC); //替换原位图 pOldBitmap=(CBitmap*)(MemDC.SelectObject(&Bitmap)); //获取绘制的区域 CRect rcClient; GetClientRect(&rcClient); //绘制到客户区 pDC->BitBlt(0,0,rcClient.Width(),rcClient.Height(),&MemDC,0,0,SRCCOPY); MemDC.SelectObject(pOldBitmap); MemDC.DeleteDC(); return TRUE;</textarea>
方法二:
处理对话框的ON_WM_PAINT消息,在OnPaint里做如下处理
<textarea cols="50" rows="15" name="code" class="cpp"> if (IsIconic()) { //这里使用编辑器自动产生的代码 } else { CPaintDC dc(this); dc.DrawState(CPoint(0,0), CSize(500,500), m_bitmapBack, DST_BITMAP); CDialog::OnPaint(); } } </textarea>
方法三:
同方法二,只不过使用双缓冲的方式
<textarea cols="50" rows="15" name="code" class="cpp"> if (IsIconic()) { //编辑器自动产生的代码 } else { CPaintDC dc(this); CRect rect; GetClientRect(&rect); CDC dcMem; dcMem.CreateCompatibleDC(&dc); CBitmap bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP1); BITMAP bitmap; bmpBackground.GetBitmap(&bitmap); CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground); dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY); }</textarea>