F.R.I.D.A.Y.

Win32 MainWindow Class 생성하기 본문

DEV/C C++

Win32 MainWindow Class 생성하기

F.R.I.D.A.Y. 2021. 4. 5. 20:12
반응형

 이전 포스트에서 작성한 BaseWindow를 기반으로 한 MainWindow를 구성하겠습니다.


MainWindow

 먼저 파일을 분리하겠습니다. mainWin.h 파일을 생성합니다.

 그리고 BaseWindow를 상속하기 위해 baseWin.h를 추가합니다.

 

 그리고 BaseWindow를 상속하는 MainWindow를 생성합니다.

class MainWindow :public BaseWindow<MainWindow> {

};

 

public 함수 구성하기

 BaseWindow 클래스에는 두 개의 순수 가상 함수가 존재합니다. 따라서 MainWindow를 사용해도 BaseWindow를 상속했기 때문에 객체를 생성할 수 없습니다. 이제 객체를 생성할 수 있도록 MainWindow에서 두 개의 가상함수를 오버라이드 하겠습니다.

 

 그리고 클래스 멤버 함수의 선언[# 함수 원형을 작성한 부분]과 정의부[# 함수의 본문을 작성한 부분]를 구분짓겠습니다.

초록색 밑줄이 그어진 부분에 캐럿을 놓고 Alt + Enter, Enter를 입력하면 알아서 연결된 cpp 파일과 정의부를 만들어준다.

 

 

 ClassName 함수는 WNDCLASS 구조체를 등록할 때 사용하는 구분용 이름입니다. 따라서 알맞게 작성하면 됩니다.

LPCWSTR MainWindow::ClassName() const
{
	return L"Win32 UI";
}

 저는 간단히 Win32 UI를 반환하도록 했습니다.

 

 그 다음, HandleMessage 함수를 구성하겠습니다.

	if (uMsg == WM_CLOSE) {
		PostQuitMessage(0);
		return 0;
	}
	else if (uMsg == WM_DESTROY) {
		DestroyWindow(hWnd);
		return 0;
	}


	return DefWindowProc(hWnd, uMsg, wParam, lParam);

 가장 기본이 되는 작업만 구성했습니다. 이렇게 작성하면 MainWindow 클래스는 작업이 완료됩니다. 여기에 원하는 작업을 하면 됩니다.

 

 

WinMain

 이전에 소개한 Win32 프로그래밍의 WinMain의 본문은 클래스에 저장되어 있습니다. 따라서 MainWindow 클래스의 메서드를 이용하겠습니다.

#include "mainWin.h"

int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR lpCmdLine, int nCmdShow) {
	MainWindow win;

	if (!win.Create(L"Win32 UI", WS_OVERLAPPEDWINDOW)) return -1;

	ShowWindow(win.Window(), nCmdShow);
	UpdateWindow(win.Window());

	MSG msg;
	while (GetMessage(&msg, nullptr, 0, 0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return msg.wParam;
}

 

완성된 코드

 잘 따라했다면 아래 링크의 코드처럼 구성되었을 것입니다.

 

mijien0179/tistorySampleCode

티스토리 샘플코드. Contribute to mijien0179/tistorySampleCode development by creating an account on GitHub.

github.com

 

 링크가 삭제되거나 이동한 경우, 아래에서 찾아보기 바랍니다.

 

mijien0179/tistorySampleCode

티스토리 샘플코드. Contribute to mijien0179/tistorySampleCode development by creating an account on GitHub.

github.com


HandleMessage 메서드에 필요한 작업을 추가하면 됩니다.

 

# index

728x90
반응형
Comments