[WinAPI] 작업표시줄 아이콘 제거, 프로그램 투명하게 하기, GetWindowLong, SetWindowLong, SetLayeredWindowAttributes 활용

안녕하세요, 오늘은 작업표시줄의 아이콘을 제거하고, 프로그램을 투명하게 하는 방법을 알아보겠습니다.
예제는 MFC로 하겠습니다.

1. 작업표시줄 아이콘 제거

MFC 프로젝트를 생성해주시고 확인 버튼을 더블 클릭 하신 뒤 아래와 같이 코딩합니다.

void CMFCApplication1Dlg::OnBnClickedOk()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.

	LONG lExStyle = ::GetWindowLong(m_hWnd, GWL_EXSTYLE);
    
	// 작업표시줄 아이콘 제거
	lExStyle = lExStyle | WS_EX_TOOLWINDOW;
	if (WS_EX_APPWINDOW & lExStyle)
		lExStyle = lExStyle ^ WS_EX_APPWINDOW;

	// 윈도우 스타일 설정
	::SetWindowLong(m_hWnd, GWL_EXSTYLE, lExStyle);
}

같이 코드를 짜서 실행하면 아래와 같이 작동합니다.

보시는 것처럼 좌측 하단에 MFC 아이콘이 작업표시줄에서는 사라집니다.
저는 전/후 비교를 위해서 확인 버튼에 구현했지만, OnInitDialog에 하시면 대화상자가 생성되면서 아이콘이 제거 됩니다.

2. 투명하게 하기

저번에 OnWindowPosChaning을 사용하여 투명하게 만드는 글을 올렸습니다.
윈도우 API 함수를 사용하여 투명하게 하시려면 아래와 같이 코딩하시면 됩니다.

void CMFCApplication1Dlg::OnBnClickedOk()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.

	LONG lExStyle = ::GetWindowLong(m_hWnd, GWL_EXSTYLE);
    
	// 투명화, SetLayeredWindowAttributes을 사용하려면 WS_EX_LAYERED 속성이 있어야한다.
	 lExStyle = lExStyle | WS_EX_LAYERED;

	// 윈도우 스타일 설정
	::SetWindowLong(m_hWnd, GWL_EXSTYLE, lExStyle);
	// 투명하게 하기
    // ::SetLayeredWindowAttributes(핸들, 컬러키, 투명도, 플래그);
	::SetLayeredWindowAttributes(m_hWnd, 0, 0, LWA_ALPHA); 
}

SetLayeredWindowAttributes에 3번째 인자가 투명도인데 0은 투명, 255는 불투명 입니다. 그 중간의 값을 사용하면 반투명 효과도 할 수 있습니다.

위와 같이 코딩해서 실행시켜보시면 아래와 같이 작동합니다.

오늘은 간단한 기능을 알아봤습니다.