2012-03-10 3 views
3

내가 C 사용하고 있습니다 - (NO MFC 또는 GDI +) :-)를는 Win32 (GDI) - 정전기 제어의 설정 불투명도

내가 원하는 것은 100을 말할 수 있도록 내 자식 창의 투명도를 설정하는 것입니다 (우리 아이 창은 STATIC 컨트롤입니다). 나는 이것이 가능한지 궁금 해서요. 만약 그렇다면 어떻게 할 수 있는지 누군가가 나를 올바른 방향으로 가리키게하십시오.

나는 다음과 같이 내 부모 창을 만들 : 여기

내 설정이다에서

HWND  hWnd; 
WNDCLASS wndCls_s; 


wndCls_s.style   = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; 
wndCls_s.lpfnWndProc = MainWndProc; 
wndCls_s.cbClsExtra = 0; 
wndCls_s.cbWndExtra = 0; 
wndCls_s.hInstance  = hInstance; 
wndCls_s.hIcon   = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_BSN_64)); 
wndCls_s.hCursor  = LoadCursor(NULL, IDC_ARROW); 
wndCls_s.hbrBackground = CreateSolidBrush(RGB(0, 0, 0)); 
wndCls_s.lpszMenuName = NULL; 
wndCls_s.lpszClassName = pszCName; 

if (RegisterClass(&wndCls_s) == 0) 
    return EXIT_FAILURE; 


/* Creating Window */ 
hWnd = CreateWindow(
    pszCName, pszCName, 
    WS_VISIBLE | WS_POPUP | WS_SYSMENU | WS_CLIPCHILDREN, 
    0, 0, WND_WIDTH, WND_HEIGHT, 
    NULL, NULL, hInstance, NULL); 

MainWndProc :

case WM_CREATE: 
    { 
    HWND hWndChild = CreateWindow(
     L"STATIC", (LPCTSTR) NULL, 
     WS_CHILD | WS_VISIBLE, 
     10, 10, 110, 110, 
     hWnd, (HMENU) (int) 10000, 
     g_hInst, NULL); 
    } 
    break; 
case WM_CTLCOLORSTATIC: 
    { 
    COLORREF dwColor; 

    dwColor = RGB(255, 0, 0); 
    hDC = (HDC) wParam; 

    //SetBkColor(hDC, dwColor); 
    SetBkMode(hDC, TRANSPARENT); 

    /* 
    This is not going to work for child window 
    SetWindowLong(
     hWnd, GWL_EXSTYLE, 
     GetWindowLong((HWND)lParam, GWL_EXSTYLE) & ~WS_EX_LAYERED); 

     SetLayeredWindowAttributes(
      (HWND)lParam, 0, 100, LWA_ALPHA); 
     RedrawWindow((HWND)lParam, NULL, NULL, RDW_ERASE | RDW_INVALIDATE); 
    */ 

    if (g_hBrushRed == NULL) 
     g_hBrushRed = CreateSolidBrush(dwColor); 
    } 
    return (INT_PTR)g_hBrushRed; 
+0

최상위 창만 WS_EX_LAYERED 스타일을 가질 수 있습니다. 나는 WS_EX_TRANSPARENT를 찾고 있다고 생각합니다. –

+0

@HansPassant, 당신은'SetWindowLong'을'WS_EX_TRANSPARENT'를 가진 자식 창에서 사용할 것을 제안하고 나서'WM_CTLCOLORSTATIC'을 처리하겠습니까? 그런 다음 어떻게 불투명도를 설정할 수 있습니까? – markfw

답변

2

당신이려고하는 경우에 당신은 왜 TRANSPARENT과 투명성을 활성화합니까 배경에 유효한 브러시를 반환 하시겠습니까? SetBkMode이 필요 없으며 빨간색 브러시가 컨트롤에 의해 사용됩니다.

+0

더 설명해 주시겠습니까? 'SetBkMode'를 제거하고 빨간 브러시를 반환하면 투명하지 않습니다. – markfw

+0

빨간 불투명 한 배경이 있어야합니다. 맞습니까? 알파 블렌딩의 관점에서 반투명 한 빨간색 배경, 기본 이미지와 100/255의 조화를 이루고자하는 것은 무엇입니까? –

+0

네, 그게 제가 원하는 것입니다. 솔리드 브러쉬도 아니고 NULL 브러시도 완전히 투명하게 만들 수 없으므로 투명한 브러시를 만드는 법을 보여 주실 수 있습니까? – markfw

관련 문제