728x90
https://www.youtube.com/watch?v=MJ31abxA7A0&list=PL4SIC1d_ab-ZLg4TvAO5R4nqlJTyJXsPK&index=7
위 강의를 보면서 정리중입니다.
window api의 에서 알고 있어야 되는 몇가지 변수와 함수를 정리해보자
//핵심 변수
HWND // 현재 윈도우 창의 번호를 저장해 둔다
HDC // 랜더링 할수 있는 Device ID
HPEN // 펜의 색을 지정하는 Device ID
HBRUSH // 브러쉬의 색을 지정하는 DeviceID
//핵심함수
SelectObject(HDC, ??) // HDC에 ??을 설정해 줍니다 return -> 원래 ??
DeleteObject(??) // ??을 삭제해 줍니다
GetStockObject(??) // 미리 생성되어 있는 ??을 가져와 줍니다
InvalidateRect(hWnd, NULL, TRUE); // WM_PAINT 메세지를 호출합니다 TRUE는 현재 랜더링을 삭제합니다
//핵심 전처리기
LOWORD(num) // num의 하위 4바이트를 가져옵니다
HIWORD(num) // num의 상위 4바이트를 가져옵니다
다른 부분은 수정하지말고 WM_PAINT부분으로 돌아가 사각형을 그려보자
// 그리기용 전역 변수
POINT g_point = { 100, 100 }, g_size = { 200, 200 };
case WM_PAINT: // 무효화 영역이 발생하면 작동한다. 화면 보여졌다 안보여졌다
{
PAINTSTRUCT ps;
// 윈도우 핸들
// 윈도우 좌표 :
// 픽셀 단위로 좌표를 나타낸다.
// 좌측 상단이 0,0 이다.
// hdc란? : 그리기 Device Context
// 현재 윈도우의 Device Context를 얻어온다.
HDC hdc = BeginPaint(hWnd, &ps);
// TODO: 여기에 hdc를 사용하는 그리기 코드를 추가합니다...
// 직사각형의 펜 색을 설정한다
HPEN hpen = CreatePen(PS_SOLID, 5, RGB(255, 0, 0));
HPEN hDefaultPen = (HPEN)SelectObject(hdc, hpen); // 기본 펜 정도 저장
// 직사각형의 안의 색을 설정한다
HBRUSH hBrush = (HBRUSH)GetStockObject(BLACK_BRUSH);
HBRUSH hDefaultBrush = (HBRUSH)SelectObject(hdc, hBrush);
Rectangle(hdc,
g_point.x - g_size.x / 2 + g_size.x,
g_point.y - g_size.y / 2,
g_point.x + g_size.x / 2 + g_size.x,
g_point.y + g_size.y / 2);
SelectObject(hdc, hDefaultPen); // 기본 펜으로 변경
SelectObject(hdc, hDefaultBrush);
Rectangle(hdc,
g_point.x - g_size.x / 2,
g_point.y - g_size.y / 2,
g_point.x + g_size.x / 2,
g_point.y + g_size.y / 2);
DeleteObject(hpen);
DeleteObject(hBrush);
EndPaint(hWnd, &ps);
}
break;
실제 클릭으로 사각형을 그려봅니다 -> WM_LBUTTONDOWN에서 실행할 수 있습니다
case WM_LBUTTONDOWN:
{
InvalidateRect(hWnd, NULL, TRUE);
int xPos = LOWORD(lParam); // 하위 4 바이트
int yPos = HIWORD(lParam); // 상위 4 바이트
g_point.x = xPos;
g_point.y = yPos;
}
break;
이 두개를 완성했다면 클릭한 부분에 사각형 2개가 생성됩니다.
728x90
'windowAPI' 카테고리의 다른 글
WindowApi 6강 - range기반 for문의 주의점 (0) | 2024.11.23 |
---|---|
WindowAPi 5강 - SceneManager (0) | 2024.11.19 |
WinAPI 4강 - KeyManager (0) | 2024.11.19 |
windowAPI - 3일차 double buffering (0) | 2024.11.18 |
WindowAPI 2일차 - 비동기 입력 및 싱글톤 (0) | 2024.11.18 |