现在的位置: 首页 > 综合 > 正文

设置对话框背景2

2013年01月14日 ⁄ 综合 ⁄ 共 919字 ⁄ 字号 评论关闭

VC对话框默认的灰度背景实在是不美观,填充背景图成了改善用户界面的一个很好的选择。

首先在资源视图中添加一个位图资源,如命名为IDB_BMPBK

在对话框中添加OnEraseBkgnd()事件处理函数,用于擦除背景进行重绘。其中添加的代码如下:

BOOL DialogClass::OnEraseBkgnd(CDC* pDC)
{

//创建内存DC
CDC MemDC;

//CBitmap对象
CBitmap Bitmap,*pOldBitmap;

//BITMAP句柄
BITMAP bm;

//加载位图
Bitmap.LoadBitmap(IDB_BMPBK);

//将位图资源与句柄绑定
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;

}

默认生成的OnEraseBkgnd()处理函数会有调用基类的处理函数然后再返回结果,要注意把这一句直接删除,然后直接返

TRUE

但这样会造成控件颜色与背景颜色不符合,解决办法是把所有控件设置为透明的,具体实现如下:

添加OnCtlColor函数,在里面加入两条代码,具体代码如下:
  HBRUSH   CBaozhan1Dlg::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor
  {  
          pDC->SetBkMode(TRANSPARENT);  
          return   (HBRUSH)GetStockObject(NULL_BRUSH);  
  }

这样控件的颜色就和背景图片的颜色一致了

 

抱歉!评论已关闭.