C ++ WinAPI Отображение растровых изображений в пользовательской рамке окна с использованием DWM

Я создал окно с пользовательской рамкой окна, используя DWM со ссылкой на Пользовательская оконная рама с использованием DWM. Я попытался добавить растровое изображение в строку заголовка, используя 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);

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

Другие решения