使用 Gdiplus 将图片设置为窗口背景

使用 Gdiplus 将图片设置为窗口背景

 1  在窗口创建时加载一幅图作为背景
 2 
 3       case  WM_CREATE:
 4          {
 5              Gdiplus::GdiplusStartup( & token,  & input, NULL);
 6              pImage  =   new  Gdiplus::Image(L " pic02.png " );
 7          }
 8           break ;
 9 
10  在 WM_ERASEBKGND 消息中显示图片,也可以直接返回 TRUE ,而在 WM_PAINT 中显示图片。
11 
12       case  WM_ERASEBKGND:
13          {
14              HDC hdc  =  (HDC)wParam;
15              RECT rc;
16              GetClientRect(hWnd,  & rc);
17              HDC hMemDC  =  CreateCompatibleDC(hdc);
18              HBITMAP hMemBmp  =  CreateCompatibleBitmap(hdc, rc.right, rc.bottom);
19              SelectObject(hMemDC, hMemBmp);
20              FillRect(hMemDC,  & rc, GetSysColorBrush(COLOR_WINDOW));  //  把透明背景填充为系统窗口颜色
21              Gdiplus::Graphics g(hMemDC);
22              g.DrawImage(pImage,  0 0 , rc.right, rc.bottom);
23              BitBlt(hdc,  0 0 , rc.right, rc.bottom, hMemDC,  0 0 , SRCCOPY);
24              DeleteObject(hMemBmp);
25              DeleteDC(hMemDC);
26          }
27           return  TRUE;
28 
29  对于一般窗口这样就可以了,网上的很多代码也是这样写的,但是用于对话框时,就会有问题,在拖动改变对话框大小之后,背景图片会有残留。需要在 WM_SIZE 中 调用 RedrawWindow 进行处理:
30 
31       case  WM_SIZE:
32          RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE);
33           return   0 ;
34 
35  这样就完美了。
36   
37 

你可能感兴趣的:(使用 Gdiplus 将图片设置为窗口背景)