Win32_API - wsprintf사용(printf 같은 기능을 쓰기 위한 함수)

컴퓨터/Win32-API

728x90
반응형

서론

Windows 프로그래밍을 하던 도중 문득 TextOut함수로 정수를 출력하기에는 상당히 번거로운 일이 발생합니다. 

이 번거로운 일을 손쉽게 극복할 수 있도록 C언어 표준 함수인 wsprintf를 알아보도록 합시다.

 

wsprintf 함수

이 함수는 C언어 표준 함수로 쉽게 설명하자면 특정 공간에 서식화된 문자열을 담아주는 녀석입니다. 

C언어에서 흔히 사용했던 printf의 경우 콘솔 창에 문자열을 출력합니다.

wsprintf의 경우 특정 변수에 문자열을 출력합니다.

 

함수의 원형을 보면 다음과 같습니다.

wsprintfW(
    _Out_ LPWSTR,
    _In_ _Printf_format_string_ LPCWSTR,
    ...);

이전 포스트에서 설명했다 시피 W는 유니코드를 의미하므로 무시하고 설명하도록 하겠습니다.

 

  • 첫 번째 인자 - 출력할 공간
  • 두 번째 인자 - 출력할 포맷 서식
  • 나머지 인자 - 포맷 서식에 들어갈 인자

 

실습 코드

간단하게 특정 숫자를 출력하는 코드를 작성해 봅시다.

    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            hdc = BeginPaint(hWnd, &ps);
            WCHAR word[1024];
            int num = 100;
            // TODO: 여기에 hdc를 사용하는 그리기 코드를 추가합니다...
            wsprintfW(word, L"숫자 : %d", num);
            TextOutW(hdc, 100, 100, word, lstrlen(word));
            //TextOutA(hdc, 200, 200, "Hello World", 12);
            EndPaint(hWnd, &ps);
        }
        break;

wsprintf 함수를 이용해서 문자열의 형태로 만든 후 TextOut 함수를 이용해 출력했습니다. 

 

주의사항

이 함수를 사용하는데 몇 가지 주의사항이 있습니다.

  • 서식 문자열 내의 서식과 변수의 개수는 반드시 일치해야 한다. 
  • 서식과 대응되는 변수의 타입은 반드시 일치해야 한다.
  • 1024 출력 버퍼만을 지원하기 때문에 이상되는 문자열에는 사용할 수 없다.
  • 실수 서식은 지원하지 않는다.

 

728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :