일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 티스토리
- Javascript
- 배열
- 함수
- Programming
- Win32
- tipssoft
- doit코틀린프로그래밍
- 이지스퍼블리싱
- Direct2D
- c#
- Tips프로그래밍강좌
- CS
- Windows
- 문법
- Kotlin
- c++
- c
- VS ERROR
- Desktop
- 김성엽
- 알고리즘
- 포인터
- 지식나눔강좌
- 리뷰
- Visual Studio
- 프로그래밍
- 연산자
- Tips강좌
- 백준
- Yesterday
- Today
- Total
목록Win32 (19)
F.R.I.D.A.Y.
이미 시중에 CS로 만들어진 ADBlock 프로그램이 존재하지만 기억나지 않을 정도로 익숙해져버린 카카오톡 PC AD. 존재하는것은 상관 없지만, 창의 일정 부분을 저렇게 차지하다보니 공간 낭비가 아닐 수 없다. 이미 시중에 C#으로 만들어진 ADBlock 프로그램이 존재하지만, 원리나 한번 알아보자고 만든 코드. #include #include #include using namespace std; int main() { HWND kakao; kakao = FindWindowW(L"EVA_Window_Dblclk", L"카카오톡"); char titleKao[100]{}; GetWindowTextA(kakao, titleKao, 99); cout
회전한 사각형을 외접하는 사각형 구하기 회전 사각형 이미지처럼 회전각이 존재하는 사각형은 그 외부에 해당 사각형을 포함하는 사각형을 그릴 수 있습니다. 해당 사각형을 구하는 방법을 알아봅니다. 여기서부터 회전각을 가진 사각형을 포함하는 사각형[# 빨간색으로 되어 있는 사각형]을 외접 사각형이라 명명합니다. 삼각함수 외접 사각형을 구하는 방법은 피타고라스 방정식을 이용하는 것입니다. 빗변 길이의 제곱은 가로 길이의 제곱과 세로 길이의 제곱의 합으로 이루어진다는 방정식을 이용하면 외접 사각형을 구할 수 있습니다. 80도 만큼 회전한 사각형이 있습니다. 그럼 빨간색으로 강조된 삼각형이 형성됩니다. 해당 부분의 가로축과 세로축은 COS와 SIN 삼각함수를 이용하면 구할 수 있습니다. 여기에서 COS에 적용할 각..
키보드 입력으로 사각형을 움직여봅니다. # Win32 프로그래밍을 이해하고 있어야합니다. # 알지 못하는 경우 여기에서부터 시작할 것을 권장합니다. # 본 문서는 Direct2D 기반으로 구현합니다. Win32만 알아도 이해하는데 큰 무리는 없습니다. 객체 이동 키보드 이동으로 객체 이동을 한 번 구현해보겠습니다. 일반적으로 키보드 조작으로 객체 이동을 구현한다고 하면 아래와 같이 구현을 할 것입니다. 키 코드 명령 VK_LEFT 객체.x - offset VK_UP 객체.y - offset VK_RIGHT 객체.x + offset VK_DOWN 객체.y + offset LRESULT MainWindow::OnKeyDown(WPARAM key) { switch (key) { case VK_LEFT: cur..
게임이란 현대 기술의 정점을 모두 포함하고 있는 기술의 정수다 문득 이런 구절이 떠오르는 포스트가 아닐까 생각합니다. 누가 말했는지는 몰라도 정말 한번에 와 닿는 말이 아닐 수 없습니다. RPG에서만 보더라도 다양한 물리 법칙이 적용된 엔진[# 유니티와 언리얼이 대표적이죠]이 사용되고, FPS 게임에서는 심지어 탄도학도 이용[# 단순히 배틀그라운드 탄도학만 검색해도 나오는 글이 수 십 개...]합니다. 게임에서 중요한 것 중 하나가 막혀 있는 곳을 가지 못하는 것이라 생각합니다. 생각해보세요. 현실에서 물건을 짚으려 손을 뻗었는데 짚이기는 커녕 그 물건을 통과해버린다면. 아마도 기절하지 않을까요? 그래서 게임에서는 물리 엔진을 사용합니다. 사실 게임에만 사용한다기보단, 여러 산업 전반에서 사용하고 있죠...
텍스트 출력하기 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 ..
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의 그래픽을 담당했던 엔진임과 ..
이전 포스트에서 작성한 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..