일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Direct2D
- 포인터
- 리뷰
- Desktop
- Programming
- 프로그래밍
- c++
- 연산자
- 티스토리
- CS
- 이지스퍼블리싱
- Tips프로그래밍강좌
- Javascript
- c#
- Kotlin
- doit코틀린프로그래밍
- Win32
- tipssoft
- 지식나눔강좌
- 함수
- Tips강좌
- 알고리즘
- 백준
- Visual Studio
- c
- 배열
- Windows
- VS ERROR
- 김성엽
- 문법
- Yesterday
- Today
- Total
목록DEV/C C++ (119)
F.R.I.D.A.Y.
게임이란 현대 기술의 정점을 모두 포함하고 있는 기술의 정수다 문득 이런 구절이 떠오르는 포스트가 아닐까 생각합니다. 누가 말했는지는 몰라도 정말 한번에 와 닿는 말이 아닐 수 없습니다. RPG에서만 보더라도 다양한 물리 법칙이 적용된 엔진[# 유니티와 언리얼이 대표적이죠]이 사용되고, FPS 게임에서는 심지어 탄도학도 이용[# 단순히 배틀그라운드 탄도학만 검색해도 나오는 글이 수 십 개...]합니다. 게임에서 중요한 것 중 하나가 막혀 있는 곳을 가지 못하는 것이라 생각합니다. 생각해보세요. 현실에서 물건을 짚으려 손을 뻗었는데 짚이기는 커녕 그 물건을 통과해버린다면. 아마도 기절하지 않을까요? 그래서 게임에서는 물리 엔진을 사용합니다. 사실 게임에만 사용한다기보단, 여러 산업 전반에서 사용하고 있죠...
게임이란 현대 기술의 정점을 모두 포함하고 있는 기술의 정수다 문득 이런 구절이 떠오르는 포스트가 아닐까 생각합니다. 누가 말했는지는 몰라도 정말 한번에 와 닿는 말이 아닐 수 없습니다. RPG에서만 보더라도 다양한 물리 법칙이 적용된 엔진[# 유니티와 언리얼이 대표적이죠]이 사용되고, FPS 게임에서는 심지어 탄도학도 이용[# 단순히 배틀그라운드 탄도학만 검색해도 나오는 글이 수 십 개...]합니다. 게임에서 중요한 것 중 하나가 막혀 있는 곳을 가지 못하는 것이라 생각합니다. 생각해보세요. 현실에서 물건을 짚으려 손을 뻗었는데 짚이기는 커녕 그 물건을 통과해버린다면. 아마도 기절하지 않을까요? 그래서 게임에서는 물리 엔진을 사용합니다. 사실 게임에만 사용한다기보단, 여러 산업 전반에서 사용하고 있죠...
Windows의 기본 바탕화면에 윈도우를 배치하는 방법입니다. 윈도우 핸들 뽑기 윈도우 핸들은 Visual Studio 2019의 내장 프로그램인 Spy++를 이용하면 쉽게 뽑을 수 있습니다. 프로그램 매니저라 불리는 프로세스가 있습니다. 쌍따옴표로 묶인 문자열은 윈도우 텍스트, 그 옆의 문자열은 윈도우 클래스 이름입니다. 우리는 프로그램을 "FolderView" SysListView32의 하위 윈도우로 구성할 것입니다. 최상위 윈도우. 즉 확장을 하지 않은 WorkerW나 Progman의 경우는 핸들값 없이 찾을 수 있지만, 하위 윈도우를 찾으려 할때는 부모 윈도우의 핸들 값이 필요합니다. 따라서 우리는 FindWindow와 FindWindowEx를 모두 사용할 것입니다. FindWindow 가장 최상..
GetWindowRect와 GetClientRect 함수의 차이를 알아봅니다. 윈도우의 구성 윈도우는 다음과 같이 구성되어 있습니다. Windows에서 제공하는 테두리와 실제 개발자가 작성하고 관리하는 클라이언트 영역, 두 영역으로 나뉘어 있습니다. 비클라이언트 영역 비클라이언트 영역은 Windows에서 관리합니다. 비클라이언트 영역(non-client area)을 포함하는 윈도우 크기를 가져올 때는 GetWindowRect 함수를 사용합니다. 클라이언트 영역 클라이언트 영역은 개발자가 관리합니다. 클라이언트 영역의 윈도우 크기를 가져올 때는 GetClientRect 함수를 사용합니다. Direct2D에서의 사용 Direct2D는 렌더링 타겟의 크기를 기준으로 대상을 그립니다. 따라서 렌더링 타겟의 크기..
이전 포스트에서 작성한 BaseWindow를 기반으로 한 MainWindow를 구성하겠습니다. MainWindow 먼저 파일을 분리하겠습니다. mainWin.h 파일을 생성합니다. 그리고 BaseWindow를 상속하기 위해 baseWin.h를 추가합니다. 그리고 BaseWindow를 상속하는 MainWindow를 생성합니다. class MainWindow :public BaseWindow { }; public 함수 구성하기 BaseWindow 클래스에는 두 개의 순수 가상 함수가 존재합니다. 따라서 MainWindow를 사용해도 BaseWindow를 상속했기 때문에 객체를 생성할 수 없습니다. 이제 객체를 생성할 수 있도록 MainWindow에서 두 개의 가상함수를 오버라이드 하겠습니다. 그리고 클래스 ..
지난 시간에 우리는 WinMain 함수와 WindowProc 함수를 생성하고 Windows Hello의 사진 암호와 비슷하게 작동하는 프로그램을 만들어 봤습니다. 프로그램은 비단 하나의 윈도우만을 가지고 있지는 않습니다. 따라서 윈도우에서 여러 번 사용할 수 있는 코드를 만들어 볼겁니다. ※ C++의 기본 지식이 필요합니다. 들어가며 이 포스트는 MS DOCS의 Get Started with Win32 and C++에 기반을 두고 있습니다. Get Started with Win32 and C++ - Win32 apps The aim of this Get Started series is to teach you how to write a desktop program in C++ using Win32 and ..
마우스 입력을 받도록 프로그램을 구성해보겠습니다. 마우스 입력 우리는 마우스 왼쪽 버튼[# Windows에서는 물리버튼의 위치를 말하지 않습니다. 오른손잡이는 왼쪽 버튼이 되겠지만, 왼손잡이들에게는 오른쪽 버튼이 되기 때문이죠. 그래서 여기에서 설명하는 버튼도 Windows에서 설명하는 것처럼 왼쪽 버튼이 주버튼, 오른쪽이 보조버튼입니다.]의 입력만 받도록 하겠습니다. WM_LBUTTONDOWN 마우스 왼쪽 버튼이 눌렸을 때 발생하는 메시지는 WM_LBUTTONDOWN입니다. 이 메시지의 WPARAM과 LPARAM은 다음과 같은 값을 가지고 있습니다. wParam 마우스 왼쪽 버튼이 눌린 시점에 어떤 가싱 키가 추가로 눌려있는지를 확인할 수 있는 플래그 집합이 들어 있습니다. 이 플래그 집합에서는 CTR..
Windows에서는 사진 암호라 해서 제스쳐를 이용한 로그인 기능을 제공하고 있습니다. 실제 사진 암호처럼 구성하는 것은 어렵겠지만 여러 지점을 순서대로 눌러서 인증을 하는 프로그램을 한 번 생성해보겠습니다. ⁂ 이전 Win32 프로그램 생성하기 5의 최종 코드에서 시작합니다. 격자 생성하기 현재 생성한 윈도우는 아무 무늬가 존재하지 않습니다. 각 지점을 구분지을 수 있는 무언가가 필요합니다. 그래야 정확히 지점을 선택할 수 있으니까요. 우리가 사용할 것들입니다. HDC PAINTSTRUCT MoveToEx LineTo 이 항목을 이용해 WM_PAINT 메시지가 들어왔을 때 격자 무늬를 생성할 겁니다. 이벤트 핸들링 먼저 윈도우가 그려야할 필요가 있을 때 받는 WM_PAINT를 위한 메시지 핸들러가 필요..
윈도우 프로시저를 이제 작성해보겠습니다. 윈도우 프로시저 윈도우 프로시저는 Windows에서 수신한 정보를 토대로 그에 알맞은 행동을 정의해놓은 공간이라고 생각할 수 있습니다. 윈도우 프로시저는 아래의 모양을 가지고 있습니다. LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); 뭐 하나 알만한 것이 없습니다. 그렇지만 차근차근 알아가면 못할 것도 없죠. 함수의 자세한 설명은 이 포스트를 참고하세요. 작성하면 기본으로 반환해줄 값이 하나 있습니다. DefWindowProc 함수를 이용하는 것인데요. DefWindowProc 윈도우에서는 기본으로 처리하는 작업이 있습니다. 윈도우의 이동이 타이틀바에 존재하는 시스템 ..
이어서, 윈도우를 노출시키고 메시지를 받는 코드를 작성하겠습니다. 코드 확인 여기까지 완료하면 코드는 아래와 같습니다. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR, int nCmdShow) { WNDCLASS wc{}; wc.lpfnWndProc = nullptr; wc.lpszClassName = L"Hello world"; wc.hInstance = hInstance; RegisterClass(&wc); HWND hWnd = CreateWindow(L"Hello world", L"My First Win32 Program", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW..