본문 바로가기

컴퓨터/언어,프로그래밍

두개의 16비트 데이터를 32비트로 만드는 방법들

[정의 ]   32비트 운영체제(NT, 2000, XP, ...]에서는 WORD가 16비트 데이터형이고
              DWORD가 32비트 데이터형입니다.        
 

1. MAKELONG

    1.1 함수의 원형
 
        DWORD MAKELONG( WORD wLow, WORD wHigh );
 

    1.2 함수의 기능
 
        16비트 크기의 변수인 wLow 와 wHigh의 값을 32비트 크기로 합쳐서 반환하는 함수이다.
        wLow는 32비트중에서 하위 16비트에 저장되고 wHigh는 상위 16비트에 저장된다.
       
 
    1.3 함수의 매개변수에 대한 설명
 
        1.3.1 wLow
 
            32 비트 데이터로 합쳤을 때, 하위 16비트에 위치할 값을 명시한다.
 
        1.3.2 wHigh
 
            32 비트 데이터로 합쳤을 때, 상위 16비트에 위치할 값을 명시한다.
 

    1.4 함수의 반환값
 
        wLow와 wHigh 값을 32비트 데이터로 합쳐서 반환한다. wLow값이 0x2345 이고  wHigh값이
        0x6789라면  0x67892345 라는 값이 반환된다.
 

    1.5. 사용 예제
 
        WORD wLow = 0x2345;
        WORD wHigh = 0x6789;
 
        DWORD data = MAKELONG(wLow, wHigh);
 
        CString str;
        str.Format("%x", data);
        AfxMessageBox(str);  // 67892345 라고 출력됨!!
       
    1.6. 함수의 요구사항
 
        windef.h내에 위 함수가 매크로 형식으로 선언되어있다. 하지만, 윈도우즈 프로그램을 하기 위해서
        기본적으로 포함시키는 헤더파일들에서 아래와 같이 헤더파일을 참고하도록 되어 있기 때문에
        별도로 헤더파일을 포함시킬 필요가 없다. 따라서 오류가 날때만 아래와 같이 windef.h를 포함시키면 된다.
 
        #include "windef.h"
 
        MAKELONG 매크로 함수는 windef.h 헤더파일에 아래와 같이 정의되어있다.
 
        #define MAKELONG(a, b)  ((LONG) (((WORD) (a)) | ((DWORD) ((WORD) (b))) << 16))
 
 
 
2. MAKELPARAM

    2.1 함수의 원형
 
        LPARAM MAKELPARAM( WORD wLow, WORD wHigh );
 

    2.2 함수의 기능
 
        이 매크로 함수도 MAKELONG함수와 마찬가지로 16비트 크기의 변수인 wLow 와 wHigh의 값을
        32비트 크기로 합쳐서 반환하는 함수이다.  wLow는 32비트중에서 하위 16비트에 저장되고
        wHigh는 상위 16비트에 저장된다.
 
        윈도우즈 메시지에 포함되어 전달되는 두개의 인자중 하나인 lParam 을 구성할때 사용한다.
 

    2.3 함수의 매개변수에 대한 설명과 2.4 함수의 반환값은 MAKELONG과 내용이 동일합니다.
 

    2.5. 사용 예제
 
        마우스 좌표를 얻어서 다른 윈도우로 그 좌표를 전달해야하는데 메시지를 이용한다고 가정하자.
        하지만, wParam에는 이미 다른 정보를 사용해야하기 때문에 좌표 값을 lParam에 명시해야하는
        경우라고 가정하자.
 
        마우스 좌표값은 x 좌표, y 좌표로 나누어져 있기 때문에 이 두개의 값을 합쳐서 한개의 값으로
        만들어 lParam 에 저장해야하는데 이럴때 이 매크로 함수를 사용하면 된다.
 
        [가정] 전달하는 메시지를 LM_USER_DATA 라고 가정하고 wParam에는 1이 들어가야 한다고
                  가정한다.
 
        CPoint pos;
        GetCursorPos(&pos);

        SendMessage( LM_USER_DATA, (WPARAM)1, MAKELPARAM(pos.x, pos.y) );
 

    2.6. 함수의 요구사항
 
        winuser.h내에 위 함수가 매크로 형식으로 선언되어있다. 하지만, 윈도우즈 프로그램을 하기 위해서
        기본적으로 포함시키는 헤더파일들에서 아래와 같이 헤더파일을 참고하도록 되어 있기 때문에
        별도로 헤더파일을 포함시킬 필요가 없다. 따라서 오류가 날때만 아래와 같이 winuser.h를 포함시키면 된다.
 
        #include "winuser.h"
 
        MAKELPARAM 매크로 함수는 winuser.h 헤더파일에 아래와 같이 정의되어있다.
 
        #define MAKELPARAM(l, h)   ((LPARAM) MAKELONG(l, h))
 
 
 
3. MAKEWPARAM
 

    3.1 함수의 원형
 
        WPARAM MAKEWPARAM( WORD wLow, WORD wHigh );
 

    3.2 나머지 사항은 MAKELPARAM과 내용이 모두 동일합니다.
 
 
 
4. MAKELRESULT
 

    4.1 함수의 원형
 
        LRESULT MAKELRESULT( WORD wLow, WORD wHigh );
 

    4.2 나머지 사항은 MAKELPARAM과 내용이 모두 동일합니다.


출처 : 팁스소프트

제주삼다수, 2L,... 오뚜기 진라면 매운... 상하목장 유기농 흰... 남양 프렌치카페 카... 고려인삼유통 홍삼 ... 종근당건강 오메가3... 요이치 카링 유무선...