Win32(GDI) – 设置静态控制的不透明度

我正在使用C – (没有MFC或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; 

如果要为背景返回有效的画笔,为什么要使用TRANSPARENT启用透明度? 您不需要SetBkMode ,然后控件将使用您的红色画笔。