iga肾病能买重疾保险吗:layered?window

来源:百度文库 编辑:偶看新闻 时间:2024/05/03 10:24:50
UpdateLayeredWindow 不能SetLayeredWindowAttributes 同时使用!!!
想用 UpdateLayeredWindow 就千万不能调用 SetLayeredWindowAttributes

另外:
调用 SetLayeredWindowAttributes 之后系统会自动调整透明颜色和透明度,还会有 WM_PAINT 消息
然而调用 UpdateLayeredWindow 之后系统就不管了,以后不会再有 WM_PAINT 消息

 

// 使用 SetLayeredWindowAttributes的例子,窗口的扩展样式一定需要带有 WS_EX_LAYERED
{
    // Initialize
    BLENDFUNCTION Blend = {AC_SRC_OVER, 0, 255,AC_SRC_ALPHA };
    SetLayeredWindowAttributes(hWnd, 0, 100, LWA_ALPHA);
}

 

// 使用 UpdateLayeredWindow 的例子,窗口的扩展样式一定需要带有 WS_EX_LAYERED
void OnPaint(HWND hWnd)
{
    RECT rect;
    ::GetWindowRect(hWnd, &rect);
    POINT ptWinPos = {rect.left, rect.top};
    SIZE sizeWindow = {rect.right - rect.left, rect.bottom - rect.top};

    HDC hdc = ::GetDC (hWnd);
    HDC hdcGdi = ::CreateCompatibleDC (hdc);
    HBITMAP hBitMap = ::CreateCompatibleBitmap(hdc, rect.right - rect.left, rect.bottom - rect.top);
    HGDIOBJ hOldBmp = ::SelectObject(hdcGdi, hBitMap);

    // 在这里加入绘图代码
    // GDI 不支持 Alpha 透明,所以GDI绘图会有问题
    // GDI+ 支持 Alpha,可以使用
    // 据我的使用结果来看,如果善用 GetDIBits 和 SetDIBitsToDevice 的话,使用GDI绘图,性能上感觉要好一些

    POINT ptSrc = {0, 0};
    // Initialize
    BLENDFUNCTION Blend = {AC_SRC_OVER, 0, 255,AC_SRC_ALPHA };
    ::UpdateLayeredWindow(hWnd, NULL, &ptWinPos, &sizeWindow, hdcGdi, &ptSrc, 0, &Blend, ULW_ALPHA);

    ::SelectObject(hdcGdi, hOldBmp);
    ::DeleteObject(hBitMap);
    ::DeleteDC(hdcGdi);
    hdcGdi = NULL;
    ::ReleaseDC(hWnd, hdc);
}