2015-07-09 4 views
1

Я создал окно с пользовательским оконным фреймом с использованием DWM со ссылкой на Custom Window Frame Using DWM. Я попытался добавить растровое изображение в строку заголовка, используя StretchBlt. Тем не менее, это не показало должным образом. Изображение будет ярче, если оно обращено на раме:C++ WinAPI Отображение растровых изображений в пользовательском окне с использованием DWM

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

Использование 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

Когда я собирался сдаться, я попробовал это и добился успеха. Мощный GDI + !!! –

+0

Я осознал реальную проблему, которая является ключом прозрачности, вызывающим нежелательный эффект. –