2012-04-05 2 views
1

그래서 알파 채널을 포함하여 배경을 설정하려는 WINDOWCLASSX가 있지만 "RGB"매크로 만 보았습니다. RGBA 없음.WINDOWCLASSX hbrBackground 알파 채널은 어떻게 설정합니까? (C++)

그래서 어떻게 hbrBackground에 알파를 설정합니까? 여기 내 코드는 다음과 같습니다.

WNDCLASSEX wincl; 


wincl.hInstance = hThisInstance; 
wincl.lpszClassName = szClassName; 
wincl.lpfnWndProc = WindowProcedure;  
wincl.style = CS_DBLCLKS;    
wincl.cbSize = sizeof (WNDCLASSEX); 

wincl.hIcon = LoadIcon (GetModuleHandle(0), MAKEINTRESOURCE(IDI_MYAPP)); 
wincl.hIconSm = LoadIcon (GetModuleHandle(0), MAKEINTRESOURCE(IDI_MYAPP)); 
wincl.hCursor = LoadCursor (NULL, IDC_ARROW); 
wincl.lpszMenuName = MAKEINTRESOURCE(IDR_MAINFRAME);    
wincl.cbClsExtra = 0;      
wincl.cbWndExtra = 0;      

wincl.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); 

마지막 줄에는 알파를 설정하고 싶습니다.

- 도움을 주셔서 감사합니다.

+0

투명한 브러시로 투명한 창을 만들지 마십시오. http://stackoverflow.com/questions/9413154/custom-window-frame-smooth-border/ – arx

답변

2

창 클래스에서 배경 브러시를 사용하여 알파 채널을 만들 수 없습니다. 대신 WS_EX_LAYERED 스타일을 창에 적용한 다음 SetLayeredWindowAttributes() 또는 UpdateLayeredWindow()을 사용하여 창의 알파 채널을 설정해야합니다. 자세한 내용은 MSDN 문서를 읽기 :

Using Layered Windows

Layered Windows

+0

그래서 SetLayeredWindowAttributes() 및 UpdateLayeredWindow()를 사용하는 방법을 배우고 있었고 지금은 세미 (semi) 창을 가지고 있습니다. - 투명한 - ish (에어로가 분명히 전체 클라이언트 영역을 덮고있다)하지만 내부는 흰색 무엇, 아무리 내가 배경을 변경 색상. 여기 내 코드는 여기 있습니다 : [링크] (http://pastebin.com/Wu12uPYD) – BananasGoMoo

+0

신경 쓰지 마, 방금 알아 낸 것, 나는 원래의 브러쉬를 다시 검은 색으로 만들었고 지금은 작동합니다. 도와 주셔서 감사합니다 :) – BananasGoMoo

0

이 그냥 날 위해 일 :

// Set WS_EX_LAYERED on this window 
SetWindowLong(g_mainWnd, GWL_EXSTYLE, GetWindowLong(g_mainWnd, GWL_EXSTYLE) | WS_EX_LAYERED); 

// Make this window 70% alpha 
SetLayeredWindowAttributes(g_mainWnd, 0, (255 * 70)/100, LWA_ALPHA); 

g_mainWnd 변수가 내 경우에는 (해당 창에 대한 참조입니다 , HWND 변수).