Win32_API - WM_PAINT(창 그리기)

컴퓨터/Win32-API

728x90
반응형

서론

윈도 응용 프로그래밍은 메시지 루프에 진입하여 운영체제의 명령어를 하나씩 처리하는 방식으로 프로그래밍됩니다. 

본문에서는 가장 대표적이며, 어떻게 보면 필수적인 WM_PAINT 메시지에 대하여 알아보도록 하겠습니다.

 

창을 그리는 메세지

윈도 운영체제는 GUI 기반으로 이루어져 있고, 동시에 여러 개의 프로그램이 실행될 수 있습니다.

간단하게 사용자가 2개의 프로그램 A와 B를 사용 중이라고 가정해 봅시다.

두 프로그램은 많은 운영체제 안에서 다양한 환경으로 존재할 수 있습니다. 

  • 최대화 모드 (화면 전체에 표시)
  • 최소화 모드 (작업 표시줄에 표시)
  • 창 모드 (창의 형태로 부분에 표시) 

윈도에서 프로그램을 사용한 경험이 있다면 위의 내용을 알고 있을 것이라 생각합니다. 그렇다면 상황을 부여해 보도록 합시다. 이때 모니터는 하나만 있다고 가정합시다.

  • A는 전체 화면으로 모니터 전체에 표시되고 있습니다.
  • B는 최소화되어 모니터에 표시되고 있지 않습니다.

위와 같은 상태에서 윈도 운영체제는 프로그램들을 구동하는데 자원을 최소하 하기 위해 

A 프로그램은 그림을 그려 출력하고, B 프로그램은 그리지 않고 있습니다.

아래와 같은 경우도 동일합니다.

B 프로그램을 화면에 그려 출력하고 A는 B에서 가린 부분만큼은 그릴 필요가 없습니다. 

이런 식으로 운영체체에서 하나의 응용프로그램에서 그래픽을 그려 출력해야 될 필요가 있을 때 WM_PAINT 메시지를 보내어 주게 됩니다.

 

WM_PAINT 메시지 제어

이제 WM_PAINT 메시지를 운영체제에서 어떤 상황에 보내주는지를 알았습니다. 이제 실제 응용 프로그밍을 하는 과정에서 해당 응용프로그램에 WM_PAINT 메시지 안에서 어떻게 처리를 할 것이냐를 작성하면 됩니다. 

 

WM_PAINT 메세지 말고 다른 메시지에서 그리기는 가능한가?

가능합니다. 사실 버튼을 누르거나, 키보드 동작을 하거나, 다양한 메세지에 의해서도 당연하게 그래픽이 변경이 되어야만 원하는 동작을 하기가 쉬울 것입니다. 하지만 몇 가지 문제점이 발생할 수도 있게 됩니다. 앞으로 실습 코드들을 통해서 문제점을 파악하고 해결해 보도록 합시다.

 

728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :