9/3 API - Window

정수현·2024년 9월 3일

API Programming

목록 보기
3/10

윈도우 생성 단계

① 나만의 윈도우 클래스 생성

② 윈도우 클래스 등록

③ 윈도우 생성

윈도우 객체 생성 -> 구조체 변수 선언 초기화

내가 만든 WC
+3번 과정 정보 추가

④ 윈도우 화면에 출력

ShowWindow(hwnd, SW_SHOW);


1) 나만의 윈도우 클래스 생성

① 윈도우 클래스 생성

WNDCLASS wc;

별도의 윈도우 클래스 생성
구조체 : WNDCLASS or WNDCCLASSEX

② 클래스 멤버 초기화

wc.style = 0; // CS_HREDRAW | CS_VREDRAW
wc.lpfnWndproc = DefWindowProc;

⑴ style

  • CS_HREDRAW | CS_VREDRAW
    : 윈도우의 수직(or 수평) 크기가 변경될 경우, 윈도우를 다시 그린다는 뜻.

⑵ lpfnWndProc

  • 윈도우의 메시지 처리 함수(윈도우 프로시저)를 지정
  • 메시지가 발생할 때마다 호출되는 함수
  • 모든 메시지를 처리

wc.hInstance = hInst;
wc.hIcon = LoadIcon(0, IDI_HAND);
wc.hCursor = LoadCursor(0, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);

⑶ hInstance

  • 윈도우 프로시저를 담은 모듈의 핸들
  • Winmain의 첫번째 인자 값을 대입한다.

⑷ hIcon

  • wc.hIcon
  • LoadIcon() 함수 사용

⑸ hCursor

  • wc.hCursor : 윈도우에서 사용할 커서 지정.
  • LoadCursor() 함수 사용
    0 : 커서
    IDC_ARROW : 문자 인수 / 숫자를 문자열화 시켜서 변환하기도 한다.

⑹ hbrBackground

  • wc.hbrBackground

③ 메뉴 유무

wc.lpszMenuName = 0;
wc.lpszClassName = TEXT("myclassID");

⑺ lpszMenuName

⑻ lpszClassName

  • 윈도우 클래스의 이름을 지정한다.

2) 윈도우 클래스를 레지스트리에 저장 (등록)

ResisterClass(&wc);

[ 윈도우 클래스 저장소 ]
버튼 / 에디트 (미리 제공)
+내가 만든 WC

3) 윈도우 객체 생성

① 윈도우 객체 생성

HWND hwnd = CreateWindowEX( );

② 스타일 설정

HWND hwnd = CreateWindowEx(0, TEXT("MyclasssID"), TEXT("첫번째 윈도우"),
			WS_OVERLAPPEDWINDOW &~ WS_THICKFRAME,
            CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
            0, 0, hInst, 0);

◾스타일 설정

  • WS_OVERLAPPEDWINDOW : 기본 제공 스타일
  • WS_OVERLAPPEDWINDOW &~ WS_THICKFRAME : 기본 제공 스타일에서 크기 조정(THICKFRAME) 제외

◾ 위치 및 크기 조정

  • 100, -100, 500, 500 위치 및 크기 조정
  • CW_USEDEFAULT 위치 및 사이즈를 시스템에 맡김

4) 윈도우 출력

ShowWindow(hwnd, SW_SHOW);

0개의 댓글