Win32 C ++ SetLayeredWindowAttributes является либо полностью непрозрачным, либо полностью прозрачным;ничего между - PullRequest
1 голос
/ 09 января 2012

Итак, у меня есть второе окно, созданное в моей программе, например:

#define WINDOW_CLASS_NAME "WINCLASSFULL"

WNDCLASSEX winclass;

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_CLOSE:
            DestroyWindow(hwnd);
        break;
        case WM_DESTROY:
            PostQuitMessage(0);
        break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

some function {

HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL);

// first fill in the window class stucture

winclass.cbSize         = sizeof(WNDCLASSEX);
winclass.style          = CS_DBLCLKS | CS_OWNDC | 
                          CS_HREDRAW | CS_VREDRAW;
winclass.lpfnWndProc    =WndProc;
winclass.cbClsExtra = 0;                        //reserve data space
winclass.cbWndExtra = 0;                        //
winclass.hInstance  = hInstance;                //set instance of application
winclass.hIcon      = NULL;
winclass.hCursor    = LoadCursor(NULL, IDC_ARROW);         //load cursor type
winclass.hbrBackground  = (HBRUSH)GetStockObject(BLACK_BRUSH); //set background brush
winclass.lpszMenuName   = NULL;                               
winclass.lpszClassName  = WINDOW_CLASS_NAME;                 //set Windows class name
winclass.hIconSm        = NULL;

hWnd= CreateWindowEx(WS_EX_LAYERED,                  // extended style
                            WINDOW_CLASS_NAME,     // class
                            "Demo", // title
                            WS_POPUP,
                            x,y,
                            width,height,
                            NULL,
                            NULL, 
                            hInstance,// instance of this application
                            NULL))) // extra creation parms

}

Теперь моя проблема, если я подам заявку

Где 255 может быть что-нибудь между 1-255

SetLayeredWindowAttributes(hWnd,RGB(0,0,0),255,LWA_COLORKEY|LWA_ALPHA)

Окно полностью непрозрачное, за ним ничего не видно

Это полностью прозрачно:

SetLayeredWindowAttributes(hWnd,RGB(0,0,0),0,LWA_COLORKEY|LWA_ALPHA)

Как я могу получить

SetLayeredWindowAttributes(hWnd,RGB(0,0,0),128,LWA_COLORKEY|LWA_ALPHA)

Для работы - то есть, чтобы я частично мог видеть мое окно сверху; и частично вижу окно за ним. Я проверил документацию по MSDN здесь, но мне явно что-то не хватает См. Библиотеку Microsoft

1 Ответ

2 голосов
/ 09 января 2012

Попробуйте указать только LWA_ALPHA,, а не LWA_COLORKEY и LWA_ALPHA

...