분류 전체보기
-
[WinAPI] 키보드 입력 (WM_KEYDOWN, WM_KEYUP, GetAsyncKeyState)C++/미분류 2024. 2. 23. 14:56
Windows프로그램 개발 시, 키보드 입력을 처리하는 방법은 상황에 따라 여러 함수를 이용하는 것으로 나뉘게 됩니다. 이와 관련한 방법들이 MSDN에 소개되어 있습니다. Keyboard Input - Win32 apps | Microsoft Learn 이번 글에서는 여러 방법 중 Windows 메시지의 KEYDOWN, KEYUP 메시지를 처리하는 방법과, GetAsyncKeyState함수를 이용하는 방법을 살펴보도록 하겠습니다. 이번 글은 이전 글([WinAPI] 로그 출력하기 (Console, TRACE))의 예제를 활용하고 있습니다. 1. WM_KEYDOWN, WM_KEYUP 더보기 각각 키 입력이 발생했을 때, 해제되었을 때 전달되는 메시지 입니다. 윈도우 프로시저에서 다음과 같은 방법으로 처리가..
-
[DirectX] QPC로 FPS(프레임 레이트) 구현하기C++/미분류 2024. 2. 20. 16:06
QPC란 Query Performance Counter로, Windows에서 사용되는 시간 측정을 위한 기능입니다. 이번 글에서는 QPC를 이용해서 함수의 호출 주기를 구하는 방법을 살펴보고, 프레임마다 호출되는 함수에 이 방법을 적용하여 FPS를 구해보도록 하겠습니다. 이번 글은 이전 글의 코드([WinAPI] 로그 출력하기 (Console, TRACE))의 예제를 기반으로 작성되었습니다. 1. 살펴보기 WinAPI를 이용한 이전 프로젝트는 화면을 그리기 위해 OnRender함수를 매 프레임마다 호출합니다. 따라서, 매 프레임마다 호출되는 OnRender함수의 호출 주기를 알 수 있다면, 프레임 레이트를 구할 수 있습니다. 2. QPC 사용하기 더보기 QPC에서 주로 사용되는 함수는 다음과 같습니다. ..
-
[WinAPI] 로그 출력하기 (Console, TRACE)C++/미분류 2024. 2. 16. 16:25
로그는 프로그램의 상태를 확인할 때 사용하는 가장 직관적인 방법 중 하나입니다. WinAPI는 자체적인 로그를 출력하는 기능을 제공하지 않기 때문에, 로그를 출력할 방법이 필요합니다. 이번 글에서는 로그를 출력하는 여러 방법 중, Console창을 추가로 띄우는 방법과 MFC에서 사용하는 방법을 살펴보도록 하겠습니다. 이번 글은 Visual Studio 2022환경에서 작성되었습니다. 0. 시작하기 전에 더보기 이번 글은 프로그램 실행 환경을 디버그와 릴리즈 두 가지를 번갈아 가며 확인할 예정입니다. 따라서, 디버그와 릴리즈 환경에서의 진입점 및 라이브러리 의존성을 동일하게 할 필요가 있습니다. 프로젝트 우클릭 후 Properties로 진입합니다. 진입한 Property Page의 Configuratio..
-
[Direct2D] 도형 그려보기C++/미분류 2024. 2. 8. 17:53
지난 글 (Windows application 만들기)에서 WinAPI를 이용해 빈 윈도우를 만드는 방법을 알아봤습니다. 이번 글에서는 위 글의 내용에 이어, 빈 윈도우에 Direct2D(이하 D2D)로 도형을 그려보도록 하겠습니다. 이번 글은 MSDN을 참고하여 작성되었습니다. 간단한 Direct2D 애플리케이션 만들기 : Microsoft Learn 0. 라이브러리 추가 더보기 Direct2D 라이브러리를 추가하는 작업이 선행되어야 합니다. 프로젝트 우클릭, Properties로 진입합니다. Properties의 Linker->Input 항목의 Additional Dependencies에 다음과 같이 라이브러리를 추가합니다. 추가되는 항목은 다음과 같습니다. d2d1.lib dwrite.lib Win..
-
[ProudNet] 살펴보기 : 연결 수립 (Simple example)기타 2024. 1. 31. 10:01
이번 글은 프라우드넷에서 제공하는 가이드의 Simple 프로젝트를 사용합니다. ProudNet Documentation : Simple 예제 만들기 이번 글에서는 프라우드넷의 Simple 프로젝트를 구현하는 과정에서 발생한 이슈 몇 가지와, 프라우드넷에서 서버 - 클라이언트 간 통신을 하는 기본적인 방법을 살펴보도록 하겠습니다. 이번 글에서 사용된 Visual Studio는 2022(V143)입니다. 1. PIDL 생성 오류 더보기 Common프로젝트의 PIDL.exe를 이용하여 proxy, stub, common 파일을 생성하는 데 문제가 발생할 수 있습니다. 이는 프라우드넷의 설치 경로의 문제일 수 있습니다. 프라우드넷이 Program files 폴더에 있을 경우 권한이 부족할 수 있으니 다른 경로로..
-
[WinAPI] 메시지 루프에 대한 간단한 고찰C++/C++ 자문자답 2024. 1. 25. 20:01
DirectX에 대한 공부 이전에, WinAPI에 대한 학습이 부족했습니다. 이에 몇 가지 공부했습니다. Q1. WinAPI의 메시지 루프 A1. Windows 응용 프로그램은 사용자의 입력, OS의 이벤트를 메시지 큐에 저장합니다. 저장된 메시지 루프는 GetMessage, TranslateMessage, DispatchMessage등의 함수에 의해 확인, 수정, 전달될 수 있습니다. Q2. 메시지 루프는 비동기인가? A2. 메시지 루프에 여러 스레드를 접근시켜 성능을 향상시킬 수 있는지에 대한 의문이었습니다. 메시지 루프가 비동기인지는 아직 확실하지 않지만, 이에 대한 글을 볼 수 있었습니다. Why does the win32 message loop stop working when threaded? ..
-
[Win32] Windows application 만들기C++/미분류 2024. 1. 25. 19:35
Win32 API(이하 WinAPI)는 C++에서 GUI개발을 위해 사용되는 대표적인 라이브러리 중 하나입니다. 이번 글에서는 WinAPI를 이용해 간단한 Window하나를 만들어보도록 하겠습니다. 이번 글에서는 Visual Studio 2022 (v143)를 사용합니다. 1. 프로젝트 생성 및 초기설정 더보기 위와 같이 새 프로젝트를 생성합니다. 이후, Visual Studio창에서 Alt + Enter 혹은 위와 같이 Project 우클릭으로 Property Page로 들어갑니다. Property Page 의 Linker-System에서 SubSystem을 Windows로 변경합니다. 이는 exe파일의 진입점을 명시하는 작업입니다. (Console과 Windows는 main함수에 차이가 있습니다.) ..
-
[ProudNet] libssl-1_1-x64.dll, libcrypto-1_1-x64.dll 오류기타 2023. 11. 29. 15:01
프라우드넷 예제 도중 오류가 발생했습니다. 대상 예제는 프라우드넷에서 제공되고 있습니다. ProudNet Documentation : Simple 예제 만들기 예제를 따라 Server 프로젝트를 작성할 경우, 빌드만 되고 위와 같이 실행이 되지 않을 수 있습니다. 이 경우, 위와 같은 오류 메시지가 출력됩니다. 이는 프라우드넷의 버전이 업데이트 되면서 생긴 이슈로, 업데이트 로그에도 명시되어 있습니다. 수정된 기능 - 하위 호환성을 유지하지 않는 수정사항 이제부터 윈도우에서 서버모듈(dll&lib 모두)을 사용하시려면, OpenSSL의 libssl.dll과 libcrypto.dll을 서버모듈과 같은 경로에 두셔야 됩니다. (다운로드 링크 1 : https://kb.firedaemon.com/support..