2012-03-10 12 views
3

私はC使用している - 私が欲しいもののWin32(GDI) - STATICコントロールのセットの不透明度

:-)(NO MFCまたはGDI +)は100を言わせるために、私の子ウィンドウの不透明度を設定することです(私の子ウィンドウはSTATICコントロールです)。私はこれが可能なのかどうか疑問に思っていました。もしそうなら誰かが正しい方法を教えてください。ここで

は私の設定です:

私は次のように私の親ウィンドウを作成します。

MainWndProc
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); 

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、 'WS_EX_TRANSPARENT'を持つ子ウィンドウで' SetWindowLong'を使用し、 'WM_CTLCOLORSTATIC'を処理することをお勧めしますか?それでは、どのように不透明度を設定できますか? – markfw

答えて

2

あなたが行っている場合は、なぜあなたはTRANSPARENTと透明性を有効にします背景に有効なブラシを返すのですか?あなたはSetBkModeを必要とせず、赤いブラシがコントロールによって使用されます。

+0

あなたはもっと説明できますか? 'SetBkMode'を取り除いて赤いブラシを返すことは透明ではありません。 – markfw

+0

赤い不透明な背景があるはずですか?そして、何を手に入れようとしていますか、アルファブレンディングの半透明の赤色の背景、100/255の下のイメージとのブレンド? –

+0

はい、まさに私が欲しいものです。だから私はソリッドブラシや 'NULL'ブラシ(それを完全に透明にする)を返すことができないので、透明なブラシを作る方法を私に教えてください。 – markfw

関連する問題