使用C ++和WINAPI创建半透明面板

时间:2013-05-22 18:41:33

标签: c++ winapi background panel opacity

我有一个带有背景图像的窗口,我想创建一个带有白色边框和半透明背景的面板(如.NET) RGBA(255,255,255,124),因此背景中的图像也可以看到。我应该使用 STATIC 控件还是子窗口?我知道为了设置窗口的 RGBA 颜色,我必须使用SetLayeredWindowAttributes,但我不知道这是否适用于 STATIC 控件。

通常使用什么类型的控件以及我可以使用哪些 WINAPI 函数来设置边框粗细和颜色? 感谢

某些代码:

// Create the static control (inside the WM_CREATE of the parent window)
hPanel = CreateWindowEx(
    WS_EX_TRANSPARENT, 
    L"STATIC", 
    L"", 
    WS_CHILD | WS_VISIBLE | SS_WHITEFRAME, 
    10, 90, 
    200, 120, 
    hWnd, 
    (HMENU)IDC_PANEL, 
    hInstance, 
    NULL);

// Trying to set the alpha level
SetWindowLong(hPanel , GWL_EXSTYLE, 
    GetWindowLong(hPanel , GWL_EXSTYLE) | WS_EX_LAYERED);
SetLayeredWindowAttributes(hPanel , 0, (255 * 70) / 100, LWA_ALPHA);

// Changing the background color of the STATIC in WM_CTLCOLORSTATIC
case WM_CTLCOLORSTATIC:
    hStatic = (HDC)wParam;
    switch (GetDlgCtrlID((HWND)lParam)) {
        case IDC_PANEL:
            SetTextColor(hStatic, RGB(255, 255, 255));
            SetBkColor(hStatic, RGB(26, 127, 231));
        break;
        default:
            SetTextColor(hStatic, RGB(255, 255, 255));    
            SetBkMode (hStatic, TRANSPARENT);
    }
    return (LRESULT)GetStockObject(NULL_BRUSH);
    break;

所以,这个代码我唯一得到的是一个透明的边界控件。我没有得到背景颜色和alpha效果。

0 个答案:

没有答案
相关问题