MFC几种给对话框添加背景图的方法

来源:互联网 发布:2017双11实时数据 编辑:程序博客网 时间:2024/05/15 10:39

1,目标

总结几种给MFC对话框添加背景图片的方法。


2,实现

方式一:(适用于多种格式)用CImage类可以加载多种格式的图片,在OnPaint中Draw即可。

void CBackgroundDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else{CRect rc;GetWindowRect(&rc);CImage mImage;if(mImage.Load(_T("1.jpg")) == S_OK){//这里让图片绘制区域和窗口大小一致mImage.Draw(GetDC()->GetSafeHdc(), CRect(0,0,rc.Width(),rc.Height()));}}}

方式二:(bmp格式)用CDC的StretchBlt 方法绘制适用窗口大小的位图。

void CBackgroundDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else{//加载位图CBitmap bitmap;bitmap.LoadBitmap(IDB_BITMAP1);//选入DCCClientDC cdc(this); CDC comdc;comdc.CreateCompatibleDC(&cdc);comdc.SelectObject(&bitmap);//生成BITMAPBITMAP bit;bitmap.GetBitmap(&bit);//客户区域CRect rect;GetClientRect(rect);//用客户区的DC绘制所生成的BITMAP,并适应为窗口大小cdc.StretchBlt(0,0,rect.Width(),rect.Height(),&comdc,0,0,bit.bmWidth,bit.bmHeight,SRCCOPY);}}

方式三:(bmp格式)用CDialog的OnCtlColor()消息响应处理背景画刷。

加载位图资源IDB_BITMAP1,在Dlg类头文件中加入:

CBrush m_brush;
在OnInitDialog()中加入:

        CBitmap bmp;bmp.LoadBitmap(IDB_BITMAP1);   //IDB_BITMAP1是图片资源IDm_brush.CreatePatternBrush(&bmp);

给Dlg类添加WM_CTLCOLOR消息处理函数OnCtlColor,修改return 为我们的画刷:

HBRUSH CBackgroundDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);return (HBRUSH)m_brush;}
这里就让大家看一种不同的效果,平铺(后面的效果图3)

3,效果

方式一效果图:



方式二效果图:



方式三效果图:



4,源码


VS2008sp1工程免费下载:

http://yun.baidu.com/s/1tL1wy


1 0