일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- tipssoft
- 지식나눔강좌
- Javascript
- VS ERROR
- 백준
- Tips프로그래밍강좌
- 김성엽
- doit코틀린프로그래밍
- Windows
- 이지스퍼블리싱
- Desktop
- Programming
- 리뷰
- c
- c#
- CS
- 포인터
- Direct2D
- Win32
- 배열
- 문법
- 함수
- c++
- 티스토리
- 프로그래밍
- Visual Studio
- Tips강좌
- Kotlin
- 연산자
- 알고리즘
- Yesterday
- Today
- Total
목록DEV (265)
F.R.I.D.A.Y.
Direct2D에서 텍스트를 그리기 위해서는 DirectWrite라는 클래스를 이용합니다. 들어가기에 앞서 들어가기에 앞서 이 시리즈를 완벽히 따라한다면 아래와 같은 출력을 기대할 수 있습니다. 안내 이 시리즈는 다음 시리즈에서 파생되었습니다. Win32 BaseWindow Class 생성하기 지난 시간에 우리는 WinMain 함수와 WindowProc 함수를 생성하고 Windows Hello의 사진 암호와 비슷하게 작동하는 프로그램을 만들어 봤습니다. 프로그램은 비단 하나의 윈도우만을 가지고 있지는 않 pang2h.tistory.com 다음 정보를 사전에 알고 있어야 이해 가능합니다. Direct2D 기본 구조(Factory, RenderTarget) GDI/GDI+의 후속으로 여겨지는 Direct2D..
Windows의 기본 바탕화면에 윈도우를 배치하는 방법입니다. 윈도우 핸들 뽑기 윈도우 핸들은 Visual Studio 2019의 내장 프로그램인 Spy++를 이용하면 쉽게 뽑을 수 있습니다. 프로그램 매니저라 불리는 프로세스가 있습니다. 쌍따옴표로 묶인 문자열은 윈도우 텍스트, 그 옆의 문자열은 윈도우 클래스 이름입니다. 우리는 프로그램을 "FolderView" SysListView32의 하위 윈도우로 구성할 것입니다. 최상위 윈도우. 즉 확장을 하지 않은 WorkerW나 Progman의 경우는 핸들값 없이 찾을 수 있지만, 하위 윈도우를 찾으려 할때는 부모 윈도우의 핸들 값이 필요합니다. 따라서 우리는 FindWindow와 FindWindowEx를 모두 사용할 것입니다. FindWindow 가장 최상..
Win32를 시작하면서 그래픽 엔진으로 Direct2D를 이용하고 있다. 그러던 와중에 예제로 만든 프로그램에선 잘 실행되던MessageBox 함수가 직접 배운 걸 기반으로 작성한 프로그램에서는 화면에 노출되질 않아서 문제가 생겼었다. 그래픽 엔진 Windows의 기본 그래픽 엔진으로는 두 종류가 있다고 본다. 예전부터 내려온 GDI/GDI+와 Windows7가 출시하면 공개된 DirectX 시리즈 GDI/GDI+ Windows ME였나 암튼 굉장히 오래된 그래픽 API다. 이 엔진의 가장 큰 특징이라 하면, CPU 렌더링을 한다. 즉, 아무리 좋은 그래픽카드를 가지고 있어봐야 GDI/GDI+를 사용하고 있으면 말짱 도루묵이라는 소리다. 그럼에도 불구하고 여태 Windows의 그래픽을 담당했던 엔진임과 ..
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 ..
단일 색상 브러시를 구현할 때 필요한 인터페이스이다. ID2D1SolidColorBrush ID2D1HwndRenderTarget에서 생성할 수 있는 브러시에 대한 정보를 담는 객체의 인터페이스다. 사각형 등의 도형을 그릴 때 선의 색을 이 인터페이스로 구현된 객체로 정하기도 한다. CreateSolidColorBrush ID2D1HwndRenderTarget에 존재하는 메서드로, 브러시 객체를 생성할 수 있다. 함수 원형 HRESULT CreateSolidColorBrush( const D2D1_COLOR_F & color, ID2D1SolidColorBrush **solidColorBrush ); D2D1_COLOR_F D2D1::ColorF 메서드로 생성하는 값으로, struct D3DCOLORVA..
Direct2D에서 사각형을 그릴 수 있는 함수 DrawRectangle GDI/GDI+에서는 Rectangle 함수였던 것이 Direct2D에서는 DrawRectangle 함수로 변경되었다. 함수 원형 void DrawRectangle( const D2D1_RECT_F & rect, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle ); 세 번째 인자인 strokeWidth와 strokeStyle은 모두 기본값이 존재[# strokeWidth = 1.0f\nstrokeStyle=0]하기 때문에 첫 번째와 두 번째 인자만 작성해도 사용에는 문제가 없다. D2D1_RECT_F 사각형을 그릴 크기와 위치를 모두 포함한다. D2D1_REC..
HwndRenderTarget의 크기를 조절하는 함수 Resize HwndRenderTarget의 크기는 능동적으로 변경되지 않는다. 렌더링 타겟인 윈도우의 크기가 변경되면 HwndRenderTarget의 크기가 자동으로 윈도우 크기에 맞춰 조정되지 않는다는 것이다. 이렇게 렌더링 타겟의 크기는 그대로, 윈도우의 크기는 바뀌게 되면 아래와 같은 문제가 발생하곤 한다. 이 문제의 원인은 위에서 설명한 것처럼 윈도우의 클라이언트 영역 크기와 렌더링 타겟에서 인식하고 있는 영역의 크기가 서로 다르기 때문에 발생하는 문제이다. 함수 원형 HRESULT Resize( const D2D1_SIZE_U *pixelSize ); 렌더링 타겟의 크기를 설정하는 인자 하나를 받는다. D2D1_SIZE_U 렌더링 타겟의 크..
HwndRenderTarget의 그리기 영역을 초기화하는 메서드 Clear() WNDCLASS에서 hbrBackground처럼 Direct2D의 배경만 남기고 그동안 그렸던 모든 리소스를 윈도우에서 지워버리는 함수라고 생각하면 편할 듯 하다. 함수 원형 void Clear( const D2D1_COLOR_F *clearColor ); void Clear( const D2D1_COLOR_F &clearColor ); 두 개의 오버로드 함수가 있다. D2D1_COLOR_F D2D1::ColorF 메서드로 생성하는 값으로, struct D3DCOLORVALUE에서 왔다. struct D3DCOLORVALUE { FLOAT r; FLOAT g; FLOAT b; FLOAT a; }; 각 레드(r), 그린(g), ..