C# - 윈도우 프로그래밍(Window Programming)

Claire·2024년 10월 15일

윈도우 프로그래밍 기초

핸들이란

  • 어떤 대상에 붙여진 레이블과 같은 것으로 대상 식별에 사용

핸들의 특징

  • 핸들 값은 예외없이 모두 접두어h로 시작
  • 핸들은 정수형이며 32비트 값
  • 핸들은 운영체제가 발급하므로 사용자는 할당된 핸들 사용만 하면 됨
  • 같은 종류의 핸들끼리는 절대 중복된 값을 갖지 않음
  • 핸들은 단순 구분자이므로 값에 대해 알 필요가 없음

타입의 재정의

  • 윈도우 프로그래밍의 인수 타입들은 새로 도입한 것이 아니라 기존의 인수들을 재정의한 것

재정의 타입 예시)

  • BYTE: unsigned char형과 동일
  • WORD: unsigned short형과 동일
  • DWORD: unsinged long형과 동일
  • LONG: long형과 동일
  • LPSTR: char*형과 동일
  • BOOL: 정수형이며 true 혹은 false값을 가짐

win32 API

  • Application Programming Interface
  • 마이크로소프트사에서 제공하는 윈도우 프로그래밍 라이브러리
  • MFC의 근간은 API에서 비롯

윈도우 프로그램의 구조와 구성 요소

1. 윈도우 프로그램의 기본 구조

WinMain() {
	윈도우 클래스 만들기
    윈도우 객체 생성
    윈도우 객체 화면에 띄우기
    메세지 루프 돌리기
}
WndProc() {
	전달된 메세지 처리하기
}

윈도우 객체 화면 띄우기

BOOL ShowWindow(
	HWND hWnd
    int nCmdShow
);

예시 코드

#include<Windows.h>
#include<tchar.h>

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) {
	return 0;
}

int APIENTRY WinMain(
	HINSTANCE hInstance,
	HINSTANCE hPreInstance,
	LPSTR	lpCmdLine,
	int nCmdShow
) {
	//MessageBox(NULL, L"Hellow World", L"메세지", MB_OK);
	HWND hWnd;
	MSG Message;

	WNDCLASS WndClass;

	WndClass.cbClsExtra = 0;
	WndClass.cbWndExtra = 0;
	WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
	WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	WndClass.hInstance = hInstance;
	WndClass.lpfnWndProc = (WNDPROC)WndProc;
	WndClass.lpszClassName = L"MyClass";
	WndClass.lpszMenuName = NULL;
	WndClass.style = CS_HREDRAW | CS_VREDRAW;

	RegisterClass(&WndClass);

	// 객체 생성
	hWnd = CreateWindow(L"MyClass", L"Win32", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, (HMENU)NULL, hInstance, NULL);

	// 윈도우 표시
	ShowWindow(hWnd, nCmdShow);

	return 0;
}

2. 메세지 루프 돌리기

  • 윈도우 항시 루프를 돌며 사용자의 메세지를 기다림

  • 메세지가 들어오면 받아서 처리하는데, 이러한 방식을 이벤트 처리 방식이라고 한다.

  • 발생된 이벤트를 메세지 루프에서 감지

  • 윈도우 프로시저 함수로 메세지를 보내는 역할

profile
SEO 최적화 마크업 개발자입니다.

0개의 댓글