当前位置:C++技术网 > 资讯 > 如何绘制窗口背景图片

如何绘制窗口背景图片

更新时间:2015-06-25 18:42:15浏览次数:1+次

    设置背景图片支持各种图片格式,并且是在外部加载图片的,而不是内置的位图。内置的使用LoadBitmap就可以了。
    首先介绍第一种方法,此方法需要被设置的窗口继承于CDialogEx类。因为SetBackgroundImage函数是CDialogEx类提供的,如果不是继承于CDialogEx类,这个函数就无法使用。这是CDialogEx类将设置背景封装起来,方便操作的。所以代码简单明了。如果不是基于CDialogEx的窗口,则可以选用第二种方法。

    方法一:

CString strImg = _T("D:\\1.jpg");// - 图片文件的路径
CImage img;// - 创建一个图片对象
img.Load(strImg);// - 将图片加载到对象中
HBITMAP hBitmap = (HBITMAP)img;// - 将图片转换为Bitmap,并得到Bitmap位图句柄
SetBackgroundImage(hBitmap);// - 设置背景图片
     实现说明:
    1.SetBackgroundImage函数为MFC的CDialogEx类提供的成员函数,被设置的窗口必须继承于CDialogEx类.
    2.支持的图片类型不限于BMP,也可以是JPG、PNG等。

    方法二:

CString strImg = _T("1.jpg");
CImage img;
img.Load(strImg);
HBITMAP hBitmap = (HBITMAP)img;
ModifyStyle(0,WS_CLIPCHILDREN);// - 设置窗口风格,让父窗口不绘制子窗口
CWindowDC dc(this);// - 创建窗口绘图DC对象
CRect rectWnd;     // - 记录窗口矩形
GetClientRect(&rectWnd);   // - 获得窗口矩形
CDC   cdcMem;   // - 创建一个内存DC对象
cdcMem.CreateCompatibleDC(&dc);// - 将窗口DC创建成兼容DC
cdcMem.SelectObject(hBitmap);  // - 选择绘制对象的句柄
int width,height;// - 获得图片的宽和高
width = img.GetWidth();
height = img.GetHeight();
dc.StretchBlt(0,0,rectWnd.Width(),rectWnd.Height(),&cdcMem,0,0,width,height,SRCCOPY);// - 将图片绘制到窗口背景中 
     实现说明:
    1.获取图片路径的方法,可以使用下面的代码替换,效果一样,其他的代码不需要变动。
TCHAR ImgPath[255]={0};// - 图片路径缓冲
wsprintf(ImgPath,_T("D:\\2.png"));
    2.ModifyStyle设置一下风格,让子窗口剪切。意思就是父窗口不会绘制子窗口所在的位置,免得覆盖了子窗口。
    3.因为StretchBlt需要使用到内存DC,所以要创建一个内存DC。
    4.使用CImage可以实现各种图片的支持,而最终都要转换成Bitmap位图来绘图。
    5.此方法适用于非MFC的windows窗口,但是代码量多,如果使用MFC则推荐使用第一种方法,简单。