응용 프로그램을 제작하게 되면 일반적으로 타이틀바가 존재하며 그 때문에 자연스럽게 윈도우7의 경우에는 밖의 프레임에 그림자를 알아서 잘 그려줍니다.

보통 위와 같이 두텁고 4방향으로 모두 퍼지는 그립자가 나타나게 됩니다.

그런데 타이틀바가 없는 일반적인 다이얼로그를 만들게 되면 윈도우7에서는 위와 같은 그림자를 나타내주지 않게 됩니다.

이런 경우는 직접 그림자를 만들어줘야 하는데 일단 만들기 전에 비교대상이 될 수 있는 윈도우7의 스티커메모의 경우를 보면 아래와 같이 나타납니다.

스티커메모는 직접 테두리를 그리는 방식으로 그림자를 표현하고 있는데 위 그림과 같이 아래쪽은 약간 짙게 보이면서 어색하지 않은 그림자를 보여주고 있습니다. 

위에서 언급한 바와 같이 윈도우7에서는 타이틀바가 없을 경우, 즉 WS_OVERLAPPEDWINDOW 스타일이 아니면 아예 그림자를 그려주지 않게 됩니다. 그래서 아래와 같이 허전한 모양이 됩니다.

그나마 그림자를 그릴 수 있는 것은 클래스를 등록할 때 CS_DROPSHADOW 스타일을 주어서 아래와 같이 얇은 그림자를 조금이나마 표현할 수 있습니다.

이것도 좀 많이 어색한 느낌이 들기 때문에 스티커 메모와 같이 적당히 이쁜 테투리를 만들어보겠습니다. 먼저 스티커메모에서 사용하고 있는 테두리 이미지를 추출합니다. 리소스에디터를 사용하여 스티커메모 실행파일을 열어보면 PNG 파일이 12개 나옵니다. 상단에 사용되는 3개, 하단에 사용되는 3개, 측면에 사용되는 2개씩 4개 및 측면용 굵은거2개 해서 총 12개의 PNG 파일이 나옵니다. 그리고 적용할 프로젝트에서 자식 윈도우가 아니라 탑 윈도우 4개를 만들고 메인윈도우의 4방향에 밀착되게 MoveWindow 시킵니다. 각 윈도우는 특별히 하는 일이 없고 PNG 파일만 로드해서 보여주면 됩니다. 다만, 메인 윈도우가 움직일때는 같이 움직일 수 있도록 WM_MOVING 이벤트가 발생하면 그림자 윈도우에 전달해 주어야 합니다. 아래는 적용했을 때의 모습입니다.


  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기