티스토리 뷰


#include <stdio.h>
#include <Windows.h>

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

int CALLBACK WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{

	// 윈도우를 등록
	WNDCLASSA WndClass = { 0 };

	WndClass.lpszClassName = "suspect"; // CreateWindowA의 첫 번째 인자에서 정해준 이름과 같아야함.
	WndClass.hInstance = hinstance;
	WndClass.lpfnWndProc = WndProc; // 응용 프로그램 메시지 큐에서 꺼내서 처리하는 과정을 프로그래머가 직접 만들어줘야 하는데 바로 이러한 기능을 하는 함수이다.
	WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);

	
	RegisterClassA(&WndClass);


	// 윈도우를 생성
	CreateWindowA( //다른 프로세스를 부모윈도우로 하고 그 안에 자식으로 들어가려면 WS_CHILD를 넣어주어야 함.
		"suspect", // button과 edit 같이 정해준 형식 말고 프로그래머가 임의로 원하는 윈도우 모양을 만들려면 임의 값을 지정하고 RegisterClass 함수를 사용한다.
		"BirthDayDay",
		//WS_POPUP | WS_VISIBLE,
		WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_BORDER, 
		// WS_OVERLAPPEDWINDOW => 최대, 최소화, 시스템 메뉴를 가질 수 있는 형태. 
		0, // x좌표
		0, // y좌표
		100, // 넓이
		100, // 높이
		NULL, // 부모 윈도우 핸들
		NULL, // 메뉴
		hinstance, // 인스턴스
		NULL
		);

	MSG msg;

	while (GetMessageA(&msg,0,NULL,NULL)) // 메시지를 반복적으로 꺼낸다. 이 함수를 써야 메시지큐에서 메시지를 꺼낼 수가 있다.
	{
		DispatchMessageA(&msg); // 메시지가 올 때마다 꺼내서 아래 메시지 처리 함수가 호출될 수 있도록 Dispatch 해준다.
	}
	
	return 0;

}

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) // 메시지가 올 때마다 함수처리할 수 있는 함수
{
	// 메시지가 발생할 때마다 이 함수가 호출
	switch (uMsg) 
	{
	case WM_LBUTTONDOWN: 
		return 0;

	case WM_DESTROY: // 닫기 버튼을 눌렀을 때
		PostQuitMessage(0);
		return 0;

	}

	return DefWindowProcA(hwnd, uMsg, wParam, lParam); //기본적인 메시지(최대, 최소화 등)를 윈도우가 모두 해주는 함수

}

윈도우 창이라는 개념에 대해서 알아야 하고 윈도우 창이 메시지 기반으로 동작한다는 것 알아야 된다.

마우스, 키보드, 버튼 입력 등은 운영체제 내부에 시스템 메시지 큐에 쌓이게 된다. 이런 메시지들이 쌓여서 각각의 프로그램에 있는 윈도우 창들이 윈도우 메시지 큐를 갖고 있고 운영체제는 이 메시지들을 응용프로그램 메시지큐에 전송해주는 역할을 한다.

딱 전송만 해주고 거기까지가 운영체제가 해주는 역할이고 프로그래머는 각각의 갖고있는 메시지 큐로부터 메시지를 꺼내는 작업을 프로그래밍 해야하고 그 꺼낸 메시지를 어떻게 처리해야 할지 프로그래밍 해야한다.

'프로그래밍 > Windows OS, API ' 카테고리의 다른 글

간단한 윈도우 창 만들기2  (0) 2016.10.19
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함