일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 리뷰
- CS
- Visual Studio
- 이지스퍼블리싱
- VS ERROR
- Windows
- 포인터
- 함수
- 김성엽
- c++
- Desktop
- 문법
- Programming
- Javascript
- 연산자
- Direct2D
- 배열
- Win32
- 백준
- Tips프로그래밍강좌
- doit코틀린프로그래밍
- 알고리즘
- c
- tipssoft
- Kotlin
- 프로그래밍
- 지식나눔강좌
- c#
- 티스토리
- Tips강좌
- Yesterday
- Today
- Total
F.R.I.D.A.Y.
Win32 MainWindow Class 생성하기 본문
이전 포스트에서 작성한 BaseWindow를 기반으로 한 MainWindow를 구성하겠습니다.
MainWindow
먼저 파일을 분리하겠습니다. mainWin.h 파일을 생성합니다.
그리고 BaseWindow를 상속하기 위해 baseWin.h를 추가합니다.
그리고 BaseWindow를 상속하는 MainWindow를 생성합니다.
class MainWindow :public BaseWindow<MainWindow> {
};
public 함수 구성하기
BaseWindow 클래스에는 두 개의 순수 가상 함수가 존재합니다. 따라서 MainWindow를 사용해도 BaseWindow를 상속했기 때문에 객체를 생성할 수 없습니다. 이제 객체를 생성할 수 있도록 MainWindow에서 두 개의 가상함수를 오버라이드 하겠습니다.
그리고 클래스 멤버 함수의 선언[# 함수 원형을 작성한 부분]과 정의부[# 함수의 본문을 작성한 부분]를 구분짓겠습니다.
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;
}
완성된 코드
잘 따라했다면 아래 링크의 코드처럼 구성되었을 것입니다.
링크가 삭제되거나 이동한 경우, 아래에서 찾아보기 바랍니다.
HandleMessage 메서드에 필요한 작업을 추가하면 됩니다.
# index
'DEV > C C++' 카테고리의 다른 글
Win32 - 데스크탑 화면에 윈도우 배치하기 (1) | 2021.04.08 |
---|---|
GetWindowRect vs GetClientRect (0) | 2021.04.07 |
Win32 BaseWindow Class 생성하기 (0) | 2021.04.05 |
Win32 프로그램 생성하기 7: 사진 암호 part2. 마우스 입력 (0) | 2021.04.03 |
Win32 프로그램 생성하기 6: 사진 암호 part1. 격자 생성 (0) | 2021.04.02 |