对话框贴背景图的几种方法

方法一:

处理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),&amp;bm); //创建与内存兼容的DC MemDC.CreateCompatibleDC(pDC); //替换原位图 pOldBitmap=(CBitmap*)(MemDC.SelectObject(&amp;Bitmap)); //获取绘制的区域 CRect rcClient; GetClientRect(&amp;rcClient); //绘制到客户区 pDC-&gt;BitBlt(0,0,rcClient.Width(),rcClient.Height(),&amp;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(&amp;rect); CDC dcMem; dcMem.CreateCompatibleDC(&amp;dc); CBitmap bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP1); BITMAP bitmap; bmpBackground.GetBitmap(&amp;bitmap); CBitmap *pbmpOld=dcMem.SelectObject(&amp;bmpBackground); dc.StretchBlt(0,0,rect.Width(),rect.Height(),&amp;dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY); }</textarea>

你可能感兴趣的:(DST)