본문 바로가기

WINAPI4

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.
[Win32] WM_ERASEBKGND에서 리턴 값의 의미? 최근 UI를 개발하다가 WM_ERASEBKGND 콜백을 구현할 일이 생겼었다. MFC에서 주로 개발을 했었고, 깜박임 방지 등을 위해 습관적으로 FALSE를 리턴하고 있었다.(사실 잘못 쓰고 있었다) 이번에도 아무생각 없이 WM_ERASEBKGND콜백에서 0을 리턴을 해버렸는데 코드리뷰에서 문제가 제기 되었다. 1과 0의 차이는 무엇일까? 이번 기회에 좀 찾아 보았다. 참고로 나의 경우 WM_ERASEBKGND에서 배경을 그리고 WM_PAINT에서 글씨를 그리는 작업을 하고 있었다. WM_ERASEBKGND 는? 가장 정확한 레퍼런스는 MSDN이다. https://docs.microsoft.com/en-us/windows/win32/winmsg/wm-erasebkgnd 우선 WM_ERASEBKNG 콜백에.. 2022. 2. 24.
C++/WinRT의 필요성 - 노트북 배터리 정보 구하기 마이크로소프트에서 수년간 유지해온 Win32 API를 밑에 두고 대 모바일 시대에 다양한 디바이스에서 일괄적인 인터페이스를 제공하기 위해 만든 Windows Runtime 라이브러리를 C++인터페이스로 사용할 수 있게 되었다. 그것이 바로 C++/WinRT . https://docs.microsoft.com/ko-kr/windows/uwp/cpp-and-winrt-apis/intro-to-using-cpp-with-winrt C++/WinRT 소개 - UWP applications Windows 런타임 API용 표준 C++ 언어 프로젝션인 C++/WinRT에 대한 소개입니다. docs.microsoft.com Win32 애플리케이션만 만들어온 개발자로써 좀 이해가 가지 않는다. 빠른빌드 속도, C++ 1.. 2021. 11. 18.
Memory Mapped File (MMF) Global로 명명할 때 권한 / winapi Memory Mapped File, MMF Memory Mapped File, MMF는 Windows 시스템에서 파일을 다루는 방법 하나입니다. 물리적인 디스크 파일이나 장치, 공유메모리 객체와 같이 운영체제에서 파일로 다루는 모든 대상에 사용이 가능합니다. 이러한 MMF는 프로세스의 가상 메모리 주소 공간에 파일을 맵핑한뒤 가상메모리 주소에 직접 접근 하는 것 만으로도 파일의 읽기와 쓰기 기능을 수행 할 수 있습니다. 또한 Windows에서 두 프로세스간 메모리를 공유하는 방법으로는 유일한 방법이기도 합니다. 이를 잘 활용하면 두 프로세스간 IPC를 구현할 수 있습니다. 자세한 내용은 이미 많은 블로그와 책에 나와 있으므로 이정도까지 설명을 하고 오늘 이야기 하고자하는 이름있는 메모리맵에 Global\.. 2020. 4. 3.