Win32_API - WPARAM 과 LPARAM

컴퓨터/Win32-API

728x90
반응형

서론

Windows 응용 프로그래밍 중 다양한 메시지를 콜백 함수에서 처리합니다. 이 콜백 함수에는 윈도의 메시지와 2종류의 파라미터 값을 통해서 어떠한 메시지에 어떤 키가 눌렸는가 또는 어디 위치에서 클릭했는가 등을 판단하고 처리하게 됩니다. 오늘은 이 파라미터가 어떤 방식으로 들어오는지 알아보도록 합시다.

 

WPARAM과 LPARAM

Windows 응용 프로그래밍 중 콜백 함수의 선언 부분을 보면 다음과 같습니다.

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

여기서 서론에서 말한 것과 같이 두 가지의 파라미터 변수로 윈도 메시지와 함께 다양한 상태의 정보를 제공해 줍니다. 

과거부터 지금까지 Window 운영체제 역시 16비트, 32비트, 64비트로 변경되어 사용되고 있습니다. 당연히 우리가 사용하고 있던 다양한 정보를 받는 이 2개의 파라미터의 크기 역시 운영체제에 따라 다릅니다. 

또한 16비트 시절의 운영체제 때부터 사용하던 함수와 64비트에서 새로 만들어진 함수에서 파라미터로 담기는 정보는 약간의 문제가 있을 수 있습니다. 

 

또한 많은 데이터를 단 2개의 파라미터만으로 사용하는 것도 한계가 있을 수 있습니다.

이 때문에 Windows에서는 비트단위의 활용을 사용했습니다. 

어떠한 함수가 호출되어 실행된다면, 상태에 따라 파라미터에 크기와 값을 제공하게 됩니다.

 

따라서 우리는 특정 함수에 따라 파라미터로부터 받는 크기와 값을 파악하여 이용하여야 합니다.

 

어떻게 크기와 값을 이용하여야 하는가?

사실 크기와 값을 제공해 준다고 해도, 비트 연산을 실제로 하면서 사용하기에는 상당히 번거롭고 귀찮은 일입니다.

그래서  Windows API에서는 편리하게 사용할 수 있는 함수들을 제공해 줍니다.

 

 

LOWORD와 HIWORD 함수

 단순하게 반으로 쪼개는 역할을 한다고 생각하시면 됩니다.

 

예를 들어 Wparam에 2가지의 정보를 담은 상태로 전달을 받는다고 합시다. 

10 20

각각 10과 20의 정보지만 메모리의 전체 크기를 읽는다면 원하는 값이 아닌 다른 값이 존재할 것입니다.

??

이런 전체 메모리에서 반으로 나누어 값을 정확하게 가지고 오기 위해 LOWORD와 HIWORD 함수를 이용할 수 있습니다.

 

예시

지난 포스트에서 버튼을 이벤트를 제어해보았습니다. 해당 메시지에 관해서 MSDN을 확인해 보면 다음과 같습니다.

 

BN_CLICKED 알림 코드(Winuser.h) - Win32 apps

사용자가 단추를 클릭할 때 전송됩니다. 단추의 부모 창은 WM COMMAND 메시지를 통해 이 알림 코드를 \_ 받습니다.

docs.microsoft.com

이 API에 대한 설명을 읽고 콜백 함수로 들어오는 2가지 파라미터 변수를 이용할 수 있게 됩니다.

  • Wparam에는 2가지의 정보로 식별자와, 알림 코드가 들어온다.
  • Lparam에는 버튼에 대한 핸들 값이 들어온다.

다음 포스트에서는 이 예시를 가지고 2가지 이상의 버튼이 윈도에 존재할 때 파라미터 값을 가지고 제어하는 실습을 해보도록 하겠습니다.

728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

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

TODAY :

YESTER DAY :

TOTAL :