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

C++ WinAPI Display bitmaps on the custom window frame using DWM

我使用 DWM 参考 Custom Window Frame Using DWM 创建了一个带有自定义 window 框架的 window。我尝试使用 StretchBlt 将位图添加到标题栏。然而,它没有正确显示。图片画在边框上会变亮:

如果边框是黑色的,则图像可以正常显示。你是怎么解决这个问题的?

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);

使用 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);