Zero Code

零度代码

使用 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, 00, rc.right, rc.bottom);
23             BitBlt(hdc, 00, rc.right, rc.bottom, hMemDC, 00, 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 

posted on 2011-05-04 14:10 cntrump 阅读(581) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


My Links

Blog Stats

常用链接

留言簿

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜