API 선 그리기

Gloz·2022년 11월 9일
0

API에 대한 내용

목록 보기
2/11

윈도우 프로시저

▶ 윈도우 프로시저를 보자.

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
	HDC hdc;
    PAINTSTRUCT ps;
    
    char str[] = "";
}
  • HDC -> 핸들 DC를 의미한다.

  • PAINTSTRUCT -> 말 그대로 페인트 구조체이다.


여기서 char[]하고 char* 에 대해 생각해봐야한다.

  1. char[]는 정적으로 수정이 되며
  2. char* 는 동적으로 수정이 불가능하다.
    기억해두자..!!

윈도우 프로시저에 대해 이어서 하자면,

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
	HDC hdc;
    PAINTSTRUCT ps;
    
    char str[] = "";
    
    switch(iMessage)
    {
    case WM_CREATE:
    	break;
        
    case WM_PAINT:
    	hdc = BeginPaint(hWnd,&ps);
        
        ~~~
        
        EndPaint(hWnd,&ps);
        break;
    }
}

switch함수 안에 WM_PAINT인 케이스가 있다.

이 곳에서 출력에 관한 모든 것을 담당하는 곳이다. ( 문자, 그림, 도형등등 화면에 보이는 모든 것들을..)

그동안 배웠던 cout, printf함수는 쓰지 않고 API에서만의 출력문장은

TextOut(hdc, x, y ,문자열, 문자열 길이);

이러한 출력문장으로 쓰일것이다.

따라서, 예시를 들자면

TextOut(hdc,300,300,"너무 힘들다", strlen("너무 힘들다"));

이런 예시를 들 수 있다는 것이다.


선그리기

MoveToEx() 함수를 이용하여 선의 시작점을 알리고
LineTo() 함수를 이용하여 선의 끝점을 지정해주면 된다.

예시를 들자면

MoveToEx(hdc,400,400,NULL);
LineTo(hdc,200,400);

그렇다면 x좌표 : 400, y좌표 : 400 인 시작점에서 x좌표 : 200, y좌표 : 400인 끝점으로 선이 그어진다.

(물론 case WM_PAINT: 이 안에 써야한다.)


마우스 클릭

WM_LBUTTONDOWN -> 왼쪽 마우스 버튼이 눌렀을 경우에 발생하는 이벤트

WM_RBUTTONDOWN -> 오른쪽 마우스 버튼이 눌렀을 경우에 발생하는 이벤트

마우스 버튼을 눌렀을 경우에 Paint와는 다르게

case WM_LBUTTONDOWN:
	hdc = GetDC(hWnd);
    
    ~~~
    
    ReleaseDC(hWnd,hdc);
    break;

이렇게 시작해야 한다.

profile
개발자가 되기 위해 조금씩 나아가겠습니다.

0개의 댓글