일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- c#
- 김성엽
- 프로그래밍
- c++
- doit코틀린프로그래밍
- 배열
- Tips프로그래밍강좌
- 백준
- Desktop
- Direct2D
- 포인터
- 문법
- 리뷰
- Windows
- Tips강좌
- Programming
- 알고리즘
- Win32
- Javascript
- c
- 이지스퍼블리싱
- CS
- 연산자
- 함수
- Visual Studio
- 티스토리
- 지식나눔강좌
- tipssoft
- Kotlin
- VS ERROR
- Yesterday
- Today
- Total
목록전체 글 (383)
F.R.I.D.A.Y.
픽셀 집합을 나타내는 WIC의 기본 단위 IBitmapSource 앞으로 이미지를 불러와서 진행하는 것이 많을텐데, 그 과정에서 IBitmapSource에 무엇이 있는지 알아볼 필요가 있습니다. 이 구조를 많은 메서드에서 이용하기 때문이죠. 하위 인터페이스 Bitmap Sources Overview - Win32 apps This topic introduces bitmap sources, a core Windows Imaging Component (WIC) component that represents the bitmap pixels of an image. docs.microsoft.com 이 페이지에서 보면 다음과 같은 대상이 이 인터페이스를 상속받아 구현되어 있다고 말합니다. IWICBitmapFra..
WIC는 Windows Imaging Component라는 이름을 가진 코덱 프레임워크이다. # 해당 내용은 Direct2D의 기본 구조를 알고 있어야 진행이 원활합니다. # 해당 내용은 다음 포스트를 기반에 두고 있습니다. WIC WIC는 COM[# Component Object Model] 객체로서, 이를 이용하려면 사용하려는 프로그램[# 정확히는 프로세스]에서 COM 객체의 메서드와 같은 요소에 접근하는 것을 허용하도록 해야합니다. 애플리케이션의 시작에서 CoInitialize 함수를 호출합니다. 코드에서는 WinMain의 코드가 되겠네요. HRESULT hr = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); if (!win.Create(L"Win32 W..
Windows Imaging Component라고 해서 WIC라는 COM 요소가 있다. Windows Vista부터 나온 코덱 관리 프레임워크인데 이 녀석을 사용하면 여러가지 포맷을 하나의 메서드로 이용할 수가 있어서 개발할 때 편할 것 같다. WIC WIC는 COM[# Component Object Model]으로서 사용하려면 WIC를 사용하고 있는 스레드에서 COM 객체의 요소에 접근할 수 있도록 설정해주어야 한다. CoInitialize 그래서 있는게 이 CoInitialize 함수이다. msdn에는 이 함수보다 CoInitializeEx 함수를 이용한 것을 권장하고 있다. 간단히 설명하면 이 함수를 통해서 COM 객체 안의 명령을 COM을 이용하고자 하는 위치에서 접근할 수 있도록 해주는 기능을 ..
Direct2D에서 텍스트 출력을 시행하기 전, 필요한 리소스를 생성할 수 있는 인터페이스 IDWriteFactory IUnknown 인터페이스로부터 상속받았기 때문에, 종종 IUnknown 으로 캐스팅해 넘길 때가 있습니다. CreateTextFormat 텍스트 레이아웃을 위한 객체를 생성합니다. 여기에서 텍스트 레이아웃이란 텍스트를 그릴 영역의 크기를 의미합니다. 만일 이 레이아웃의 크기보다 그리게 되는 텍스트의 크기가 큰 경우에는 알맞게 조정됩니다. 단, 영역 외로 그리지 못하게 했다면 해당 영역에 그려지는 부분만 화면에 노출됩니다. 이런 식의 텍스트를 그린다고 했을 때, 빨간 색 영역만큼을 텍스트 레이아웃으로 정하게 한 뒤, 문자열을 그리게 하면, ex의 일부만 나오게 되는 것입니다. 이렇게 말이..
Direct2D의 DirectWrite를 되짚어봅니다. DirectWrite DirectWrite[# 이하 DWrite]는 Direct2D에서 텍스트를 그리기 위한 인터페이스입니다. 필요 항목 DWrite는 사용하기 위해 아래의 내용이 필요합니다. ID2D1Factory ID2D1HwndRenderTarget IDWriteFactory IDWriteTextFormat ID2D1SolidColorBrush 초기화 순서 DWrite는 아래의 순서로 초기화를 진행합니다. Direct2D의 기반이 되는 ID2D1Factory를 초기화하고, 그렇게 만들어진 팩토리 객체로 하위 두 개[# ID2D1HwndRenderTarget, IDWriteFactory]의 객체를 추가로 초기화합니다. 그리고 각각의 객체를 통해 ..
텍스트 출력하기 1에서 구성한 코드를 기반으로 이제 출력하는 코드를 작성합니다. OnPaint 구성 이제 DirectWrite를 사용하기 위해 OnPaint 메서드를 구성하겠습니다. OnPaint 메서드를 구성하고 난 뒤, HandleMessage 메서드에 WM_PAINT와 OnPaint 메서드를 바인딩합니다. //mainWin.h - MainWindow private: LRESULT OnCreate(); LRESULT OnPaint(); // mainWin.cpp LRESULT MainWindow::OnPaint() { return 0; } // mainWin.cpp - HandleMessage switch (uMsg) { case WM_CREATE: { return OnCreate(); } case ..
Direct2D에서 텍스트 출력하기 기본 환경 구성 DirectWrite를 사용할 수 있는 환경을 구성합니다. OnCreate 함수 바인딩 먼저 Direct2D를 사용할 수 있도록 구성하겠습니다. 메시지 핸들링을 기본 구조로 사용하므로 WM_CREATE 메시지에 대해 반응하는 함수 OnCreate 함수를 구성하고, 이어서 작성하겠습니다. 이렇게 만들어진 OnCreate 함수를 HandleMessage 함수에 바인딩 하겠습니다. LRESULT MainWindow::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) { if (uMsg == WM_CLOSE) { PostQuitMessage(0); return 0; } else if (uMsg == WM_DEST..
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의 그래픽을 담당했던 엔진임과 ..