C ++ WinAPI使用DWM在自定义窗口框架上显示位图

时间:2015-07-09 10:01:54

标签: c++ winapi dwm

我使用DWM创建了一个带有自定义窗口框架的窗口,其中引用了Custom Window Frame Using DWM。我尝试使用StretchBlt将位图添加到标题栏。然而,它没有正确显示。如果在框架上绘制图像,图像将变亮:

enter image description here

如果框架为黑色,则图像显示正确。你是如何解决这个问题的?

HDC hdc;
PAINTSTRUCT ps;
HBITMAP hbm=(HBITMAP)LoadImage(NULL,"C:\\Users\\admin\\Desktop\\Bitmap32.bmp",
                               IMAGE_BITMAP,166,160,LR_LOADFROMFILE);
hdc=BeginPaint(hWnd,&ps);
HDC hdcMem=CreateCompatibleDC(hdc);
SelectObject(hdcMem,hbm);
StretchBlt(hdc,0,0,166,160,hdcMem,0,0,166,160,SRCCOPY);
DeleteDC(hdcMem);
EndPaint(hWnd,&ps);

1 个答案:

答案 0 :(得分:1)

使用GDI + DrawImage()

Graphics graphics(hdc);
Image image(L"image link");
graphics.DrawImage(&image,0,0);

要解决实际问题,请使用SetLayeredWindowAttributes()设置透明度密钥。

SetWindowLong(hWnd,GWL_EXSTYLE,WS_EX_LAYERED);
SetLayeredWindowAttributes(hWnd,RGB(200,201,202),0,LWA_COLORKEY);