C++

[강의] 1월 17일 수업정리

k-codestudy 2025. 1. 17. 17:09

API X,Y 출력과 비트 연산자에 대한 수업을 들었다.

 

1.  API  마우스 X,Y좌표 출력

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static int nPosX{};
    static int nPosY{};

    switch (message)
    {
    case WM_MOUSEMOVE:
        nPosX = GET_X_LPARAM(lParam);
        nPosY = GET_Y_LPARAM(lParam);
        InvalidateRect(hWnd, nullptr, true);
        break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);
            
            wchar_t str[64]{};
            swprintf_s(str, 64, L"%d, %d", nPosX, nPosY); 
            TextOut(hdc, 100, 100, str, 15);

            EndPaint(hWnd, &ps);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

 

static int nPosX{}; / static int nPosY{};

  • WndProc은 수정할 수 없는 고정 함수이다.
  • WndProc함수 내에 지역 변수를 사용하면 값이 카운팅이 되지 않는다.
  • 이는 case문에 들어가 카운팅이 진행되더라도 case문을 벗어나느 순간 지역 변수가 다시 초기화되기 떄문이다.
  • 따라서 API예제를 보게 되면 2가지 예시만 볼수있을 것이다.
  • 전역 변수 / 정적변수(static) ( 클래스가 아니기 때문에 어쩔수 없다 )
  • 다양한 메시지를 처리하려면 수많은 정적 변수가 필요하여 코드 관리가 힘들어지는 단점이 있다.

InvalidateRect(hWnd, nullptr, true);

  • 화면을 갱신(즉시 그리기) 하는 함수가 아닌 WM_PAINT 메시지를 메시지 큐에 등록하는 함수이다.
  • 그렇기 때문에 메시지 큐에 넣은 뒤 처리하거나 처리한 뒤 넣거나 결과는 동일하다.
  • 또한 메시지 큐에 메시지를 넣는 여러 함수가 있으니 이를 숙지해야 한다.

 

swprintf_s(str, 64, L"%d, %d", nPosX, nPosY);

  • 문자열을 버퍼에 출력하는 역활
    - 첫 번째 매개변수: 출력 대상 버퍼
    - 두 번째 매개변수: 버퍼 크기
    - 세 번째 매개변수: 출력할 포맷
    - 네 번째 이후: 출력할 변수들

TextOut(hdc, 100, 100, str, 15); 

  • 텍스트를 화면에 출력하는 역활
    - hdc: 그리기 대상의 핸들
    - (100, 100): 텍스트를 출력할 위치
    - str: 출력할 문자열
    - 15: 출력할 문자 개수 (버퍼의 길이)

2. 비트 연산자 

연산자 종류 및 설명

  • & (AND): 둘 다 참일 때 참 (비트 모두 1이어야 참).
  • | (OR): 하나만 참이어도 참 (비트 중 하나가 1이면 참).
  • ^ (XOR): 두 비트가 다를 때만 참 (1과 0).
  • << (왼쪽 시프트): 비트를 왼쪽으로 n칸 이동.
  • >> (오른쪽 시프트): 비트를 오른쪽으로 n칸 이동.
  • ~ (NOT): 비트를 반전 (1 ↔ 0).

주의점

  • 정수 또는 정수로 변환 가능한 타입에서만 사용 가능.
  • 실수나 포인터에는 사용할 수 없음.

'C++' 카테고리의 다른 글

[강의] 1월 21일 수업정리  (0) 2025.01.21
[강의] 1월 20일 수업정리  (1) 2025.01.20
[강의] 1월 16일 수업정리  (0) 2025.01.16
[강의] 1월 15일 수업정리  (0) 2025.01.16
[강의] 1월 13일 수업정리  (0) 2025.01.13