【问题标题】:C++ WinAPI Display bitmaps on the custom window frame using DWMC++ WinAPI 使用 DWM 在自定义窗口框架上显示位图
【发布时间】:2015-09-27 15:18:03
【问题描述】:

我使用 DWM 创建了一个带有自定义窗口框架的窗口,并引用了Custom Window Frame Using 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);

【问题讨论】:

    标签: c++ winapi dwm


    【解决方案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);
    

    【讨论】:

    • 我已经意识到真正的问题是透明度键造成了不良影响。
    猜你喜欢
    • 2019-12-18
    • 2020-06-26
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 2020-08-18
    • 2012-08-18
    • 2019-07-28
    • 1970-01-01
    相关资源
    最近更新 更多