'wparam'에 해당되는 글 1건

  1. 2007.10.17 [TIP] wparam, lparam 2

[TIP] wparam, lparam

API Reference 2007. 10. 17. 11:05

WM_CHAR


wParam

WM_CHAR 메시지는 입력된 문자의 코드를 wParam 으로 전달하며 wParam 의 값을 읽어 사용자가 어떤 문자키를 눌렀는지 알 수 있다.

메시지의 추가 정보는 받고자하는 타입에 맞게 적당히 캐스팅해야 한다.

( TCHAR )wParam;


lParam

키의 눌림/놓음 상태, 메시지가 보내지기 전 키의 상태, Alt 키, 오른쪽 Alt, Ctrl 키, 반복 카운트 등의 정보




WM_KEYDOWN


wParam

WM_KEYDOWN 메시지는 키보드를 누를 때마다 윈도우로 전달되는데 문자가 아닌 모든 키에 대해서도 발생한다. 단, Alt 키와 윈도우 키, 한영 전환키 등의 특수 키 몇 가지는 제외된다.

이때 wParam 으로는 문자 코드가 아닌 가상 키코드라는 것이 전달된다.

숫자 및 영문자의 가상 키코드는 아스키 코드와 같으며 매크로 상수는 정의되어 있지 않으므로 문자 상수와 wParam 을 바로 비교하면 된다. 단, 영문자의 경우는 대문자 코드와 일치되어 있으므로 반드시 대문자와 비교해야 한다.

if( wParam == 'Z' )


lParam

WM_CHAR 메시지와 동일하나 잘 사용되지 않는다.




Mouse 입력에 관한 메시지


wParam

마우스 버튼의 상태와 키보드 조합 키( shift, Ctrl )의 상태가 전달된다.


lParam

하위 워드에 마우스 버튼이 눌러진 x 좌표, 상위 워드에 y 좌표를 가지며 좌표값을 검출해 내기 위해 LOWORD, HIWORD 등의 매크로 함수를 사용한다.

( LOWORD( lParam ), HIWORD( lParam ) )



wParam, lParam 의 상하위 워드/바이트 를 분리( LOWORD, HIWORD, LOBYTE, HIBYTE )하는 매크로


#define LOWORD( l )     ( ( WORD )( l ) )


#define HIWORD( l )      ( ( WORD )( ( ( DWORD )( l ) >> 16 ) & 0xFFFF ) )


#define LOBYTE( w )    ( ( BYTE )( w ) )


#define HIBYTE( w )     ( ( BYTE )( ( ( WORD )( w ) >> 8 & 0xFF ) )



두 개의 16비트값을 가지고 32비트값을 조립하는 매크로


#define MAKEWORD( a, b )

    ( ( WORD )( ( ( BYTE )( a ) ) | ( ( WORD )( ( BYTE )( b ) ) ) << 8 ) )


#define MAKELONG( a, b )

    ( ( LONG )( ( ( WORD )( a ) ) | ( ( DWORD )( ( WORD )( b ) ) ) << 16 ) )




LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );


강제로 메시지가 발생한 것처럼 만드는 함수


hWnd 윈도우로 Msg 메시지를 보내며 세 번째, 네 번째 인수는 메시지의 추가 정보인 wParam, lParam 이며 보내는 메시지에 따라 의미는 달라진다.




WM_SIZE


wParam

이 메시지가 발생한 이유를 나타내는 플래그가 전달된다.


SIZE_MAXHIDE

다른 윈도우가 최대화되어 이 윈도우가 가려졌다.


SIZE_MAXIMIZED

최대화되었다.


SIZE_MAXSHOW

다른 윈도우가 원래 크기로 복구되어 이 윈도우가 드러났다.


SIZE_MINIMIZED

최소화되었다.


SIZE_RESTORED

크기가 변경되었다.



lParam

윈도우의 크기가 변경될 때 하위 워드에 변경된 후의 윈도우 폭이, 상위 워드에 높이가 전달된다.




WM_MOVE


lParam

윈도우의 위치가 변경될 때마다 보내지며 하위 워드에 윈도우의 새 X 좌표, 상위 워드에 윈도우의 새 Y 좌표가 전달된다.




WM_COMMAND( 가장 중요하므로 암기 필수!! )


프로그램 실행중에 사용자가 메뉴 항목을 선택하거나 액셀러레이터를 누를 때 발생한다. 또한 버튼, 에디트 박스 등의 컨트롤이 부모 윈도우로 통지 메시지를 보낼 때도 발생한다.


wParam

하위 워드로 어떤 메뉴 항목이 선택되었는가가 전달되며 LOWORD( wParam ) 을 읽어 판단할 수 있다.


LOWORD( wParam )

메뉴나 액셀러레이터, 컨트롤의 ID


HIWORD( wParam )

컨트롤이 보내는 통지 메시지( 통지 코드 ), 메뉴가 선택된 경우는 0 이 되며 액셀러레이터가 선택된 경우는 1 이 된다.


lParam

통지 메시지를 발생시킨 컨트롤의 윈도우 핸들,

메시지를 보낸 차일드 윈도우의 윈도우 핸들

Posted by 명혀니
,