개발/Windows38 [C++/WinRT] 윈도우C++프로젝트에서 json파싱하기 C++로 작성된 MFC, Win32프로젝트에서 json을 다룰 때 고민이 많다. 나 같은 경우 보통은 jsoncpp를 활용해서 json을 파싱한다. 하지만 precompiler를 설정하지 못해 빌드속도가 늦어지거나 jsoncpp를 사용하는 다른 라이브러리들과 심볼 충돌 등의 문제가 있을 수 있는 문제가 있다.요새 윈도우 프로젝트를 하면서 cpp winrt를 유심히 보고 있다 async와 같은 스레드 처리를 쉽게 할 수 있기도 하고 모던한 Windows앱을 만드는데 도움이 되기 때문이다. 이제 win32만으로는.. 꽤 편리하게 사용될 수 있는 winrt클래스 중 하나인 JsonObject를 이용해 서드파티 라이브러리 없이 cpp winrt로 json을 파싱할 수 있다.https://learn.microso.. 2024. 11. 23. [WTL] Visual studio 2022에서 WTL Wizard 설치하기 Windows7은 이제 지원종료되어 Windows 10 이하 버전은 지원하지 않아도 되는 시대가 되었다. 그에 따라 Visual Studio 2019를 굳이 써야할 이유도 없다. Visual Studio 2022로 가자.그런데 하나 걸리는게 WTL이다. WTL은 프로젝트 템플릿없이 nuget package로 쓸 수 있지만 기왕이면 프로젝트 템플릿이 자동으로 생성되면 시작하기 편해 좋을 것이다.기존처럼 Visual studio 2022가 설치 된 상황에서 WTL 템플릿 마법사(WTL10_10320_Release 기준)를 설치하면 정상적으로 동작하지 않는다.좀 찾아보니 아직 release에 merge는 안되었지만 vs2022대응 스크립트가 커밋되어 있었다.https://sourceforge.net/p/wtl.. 2024. 8. 26. [WinUI3/c++] 창 사이즈 변경하기 기존 Win32 애플리케이션 개발환경에서 WinUI3로 넘어갈 수 있을까 몇가지 기술들을 공부해보고 있다. 이번에는 가장 기본적인 창사이즈 조절이 가능하냐를 검증해본다. 기존 Win32개발 환경에서는 MoveWindow와 같은 함수로 창 사이즈 변경이 가능했다.Winui3에서 창 사이즈 변경은 어떻게 할 수 있을까?일단 기본 winui3 템플릿을 그대로 실행하면 창사이즈가 크게 실행된다.MSDN에서 찾아본 바로는 AppWindow객체의 Resize함수를 통해 크기 조절이 가능하다고한다.https://learn.microsoft.com/ko-kr/windows/windows-app-sdk/api/winrt/microsoft.ui.windowing.appwindow.resize?view=windows-app.. 2024. 8. 17. Openssl Windows용 빌드 하기(Openssl 3.0) + jom 병렬 빌드하기 openssl을 Windows에서 사용하기 위해 Windows빌드 하는 방법을 정리해본다. 과거 Openssl 1.x버전을 빌드하여 사용하였었는데 1.x는 EOL되어 이제 LTS버전인 3.0.x버전을 사용하여 빌드 해본다.0. 준비Visual studio 2019Strawberry perl (https://strawberryperl.com/)jom (https://wiki.qt.io/Jom)우선 msvc컴파일러를 사용하여 빌드하므로 visual stdio가 설치되어있어야 한다. 나는 2022버전을 설치하였다. 또 openssl 빌드과정 중 perl스크립트를 사용하므로 perl을 설치해야한다. Windows에서는 무료 라이선스 Strawberry Perl을 추천한다.https://strawberryperl.. 2024. 7. 20. [Winui3] Unpackaged 프로젝트로 설정하기 Winui3 프로젝트 템플릿은 기본적으로 Packaged 프로젝트이다. Packaged 프로젝트는 MSIX로 패키징되서 배포되는 앱을 말하며 주로 마이크로소프트 앱스토어를 통해 배포되는 앱이다. https://learn.microsoft.com/en-us/windows/apps/desktop/modernize/package-identity-overview An overview of Package Identity in Windows apps - Windows appsAn overview of Windows package identity and how it uniquely identifies a package.learn.microsoft.com하지만 나의 관심사는 기존 레거시 방식대로의 배포 방법이다. 따라.. 2024. 5. 26. [WinUI3] WinUI3 써먹을 수 있을까? 여러 보안솔루션을 개발하다보면 하위호환성을 위해 최신 기술을 포기해야한다. 고객사는 구버전 OS를 지원하기를 원하며, 그것은 우리 솔루션의 장점이 될 수 있기 때문이다. 그렇게 언제나 익숙한 닳고 닳은 MFC기반 프로젝트들을 고수해왔다. 그렇게 WPF, Winform등 써먹기 좋은 기술들은 아에 처다도 안본 채.아무리 그래도 2024년 신규 프로젝트에 MFC를 들고 가는건 또 다른 레거시 지옥을 낳는게 아닐까 싶다. (MFC는 1992년에 공개되어 아직까지 문제없이 잘 써먹고 있다.)Microsoft는 UWP, Winui2 등 삽질 끝에 Winui3이라는 최신 UI Framework를 내놓았다. 과거 UWP와 다르게 Desktop앱에도 적용 가능하고, MFC, Win32로 짜여진 프로그램에도 이식할 수 .. 2024. 5. 26. [Win32] 메시지 루프는 어떻게 창에 메시지를 전달할까? 하나의 윈도우 프로그램에는 여러 개의 창이 존재한다. 그리고 그 창에는 자기한테 들어온 메시지를 처리하기 위해 각자의 프로시저(Procedure)를 갖는다(엄밀히 창 클래스마다 프로시저를 갖는다). 그렇다면 어떻게 메시지 루프는 메시지에 알맞은 창을 찾을 수 있을까? 다음은 일반적인 윈도우 프로그램의 메인 메시지 루프(싱글스레드)이다. // Main message loop: while (GetMessage(&msg, nullptr, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } 메시지 큐에서 GetMessage로 메시지를 가져와 Transla.. 2022. 7. 31. [Win32] 윈도우의 닫기 버튼을 눌렀을 때 일어 나는 일 (WM_CLOSE) 이번 포스트에서는 Win32 GUI프로그래밍을 공부하면서 거의 처음으로 배우는 내용인 윈도우가 닫힐 때 일어나는 일에 대해서 알아보겠다. 쌩으로 Win32부터 MFC, WTL까지 하다보니 좀 오래전에 공부해서 인지 가물가물하여 다시한번 리마인드 차원에서 정리해본다. Windows에서 창의 닫기 버튼을 눌렀을때 어떤일이 발생할까? 사용자가 닫기창이 눌렸을 때, 개발자는 많은 것을 고려해야 할 수 있다. 단순히 창을 hide할 것인지, 정말로 프로그램을 종료할 것 인지? 종료한다면 메모리정리, 리소스 정리, 사용자가 작업한 내용, 프로그램의 상태등을 안전하게 정리할 것인지 고려 해야 할 수 있을 것 이다. 닫기동작은 나름 그래서 중요하다고 생각한다. 그럼 닫기 버튼을 눌렀을 때 어떤 일이 발생할까? http.. 2022. 7. 31. HIWORD, LOWORD 매크로, DWORD 쪼개기 Windows 프로그래밍을 하다보면 32bit 자료형인 DWORD를 쪼개야 할때가 생긴다. 예를 들면 WM_LBUTTONDOWN와 같은 마우스 메시지의 lParam변수에는 마우스 좌표가 들어 있는데, X축은 하위 16비트, Y축은 상위 16비트에 존재 한다. 이때 상위, 하위 16비트를 쪼개어야 X축 Y축을 알 수 있다. 그렇다면 대충 코드 비트연산을 다음과 같이 할 수 있을 것이다. DWORD dwXPos = ((((DWORD)lParam)) & 0xffff); DWORD dwYPos = ((((DWORD)lParam >> 16)) & 0xffff); 이렇게 할 수 있지만 상당히 거추장스러운 코드 처럼 보인다. 이렇게 가독성이 떨어지는 코드를 막기위해 Windows SDK에서는 매크로를 정의해 놓았다... 2022. 6. 16. 이전 1 2 3 4 5 다음