본문 바로가기

MFC5

리소스 문자열을 CString으로 불러오는 법 (win32,mfc) 보통 MFC, Win32 애플리케이션을 개발할 때 리소스파일에 문자열을 정의하여 불러 쓴다. 이렇게 하는 이유는 코드와 리소스가 분리되어 유지보수의 편리함이 생기고, 다국어지원등에 유리할 수 있기 때문이다. 이번 포스트에서는 MFC에서 리소스에 정의된 문자열을 CString으로 불러오는 법을 알아 보겠다. 1. LoadString 일반적으로 CString에서 리소스파일의 문자열을 불러오려면 LoadString 멤버함수를 이용한다. **`CStringT`** Class | Microsoft Docs **`CStringT`** Class API reference for the Microsoft ATL **`CStringT`** class docs.microsoft.com 예제 코드는 다음과 같다 CStrin.. 2022. 3. 2.
[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.
UINT32[4] IPv6를 스트링으로 변환하기 / MFC, C++ 이전에 쓴 IPv4 UINT32 자료형을 String으로 변환하는 것에 이어 이번에는 UINT32[4] 자료형으로 된 IPv6 String으로 변환해 보는 코드를 작성해 보았다. 물론 ipv6의 축약 포맷은 구현되지 않았다. IPv6는 128비트로 조합된 주소 형식이다. // UINT32 ipv6[4]; CString IPv6ToString(UINT32 ipv6[]) { CString strIPv6; strIPv6.Format(_T("%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x"), (ipv6[3] >> 16) & 0xFFFF, (ipv6[3] >> 0) & 0xFFFF, (ipv6[2] >> 16) & 0xFFFF, (ipv6[2] >> 0) & 0xFFFF, (ipv6[1].. 2020. 2. 19.
UINT32 정수형 IP주소 스트링 변환하기 / MFC / C++ 네트워크 관련 프로그래밍을 하다보면 IP주소를 정수로 표현하고 이를 String으로 바꾸거나 다시 String에서 정수형 IP주소로 바꾸는 경우가 잦다. Socket 라이브러리를 통해 바꿀 수 도 있지만 비트연산을 조합하여 변환도 가능하다. UINT32 IP 주소 -> CString IPv4의 IP주소는 본래 8비트짜리가 4개 합처진 형태이다. 때문에 8비트씩 시프트연산을 통해 각 옥텟 값을 가져올 수 있다. 아래는 MFC에서 UINT32 IP주소를 CString으로 변환하는 예시 코드이다. CString ipToString(UINT32 ipaddr) { CString ipStr; ipString.format(_T("%d.%d.%d.%d"), (ipaddr>>24) & 0xFF, (ipaddr>>16) .. 2020. 2. 13.
MFC AfxBeginThread 사용시 주의: m_bAutoDelete AfxBeginThread AfxBeginThread는 MFC프로그래밍에서 다중 쓰레드를 생성할 수 있게 해준다. 특히 AfxBeginThread는 객체 하나를 리턴하게 되는데 CWinThread의 인스턴스 리턴하게 된다. 이때 용도에 따라 UI Thread, Worker Thread 로 사용할 수 있다. CWinThread::m_bAutoDelete AfxBeginThread로 생성한 CWinThread 인스턴스는 쓰레드 종료시 주의할 점이 있는데 바로 종료시 자동으로 삭제된다는 점이다. CWinThread의 맴버 변수에는 m_bAutoDelete가 존재하는데 기본적으로 TRUE로 설정 되어있다. 쓰레드 종료시 자동으로 객체를 삭제할지를 설정하는 변수이다. 쓰레드를 종료하고나서 쓰레드의 종료코드를 구한.. 2020. 1. 30.