윈도우즈에서는 문자열들도 리소스의 일종으로 취급되는데, 대량의 문자열을 사용하는 프로그램은 리소스에 문자열을 정의해 놓고 필요할 때마다 리소스의 문자열을 읽어와 사용한다.
그럴때 LoadString함수를 사용한다.
int LoadString(HINSTANCE hInstance,UINt uID,LPTSTR lpBuffer,int nBufferMax);
첫 번째 인수는 문자열 리소스를 가진 인스턴스 핸들인데,g_hInst = hInstance 라는 구문이 왜 존재하는지 알려준다.
두 번째 인수는 읽어올 문자열의 ID를 전달하는 역할을 한다.
세 번째 인수는 전달받은 문자열의 ID에서 문자열을 읽을 버퍼를 지정한다.
네 번째 인수는 버퍼의 길이인데, 버퍼의 길이가 필요한 이유는 생략하겠다.
LoadString(g_hInst,IDS_STRING1,str,256);
이 호출문을 해석해 보면 g_hInst 인스턴스, 곧 자기 자신이 정의하고 있는(가지고 있는)IDS_STRING1 문자열을 길이 256의 str 문자 배열로 읽어오라는 뜻이다.
단순히 문자를 출력하려는 것이 목적이라면 문자 배열 또는 문자형 포인터에 바로 문자열을 초기화하여 이 문자열을 출력하는 편이 나아보일 수 있다.
만약 출력해야 할 문자열이 100개 이상이 된다면? 다국어 버전을 만들어야 한다면?
출력해야 할 문자열이 100개 이상이 되는데 코드 안에 문자열이 존재한다면 유지보수가 굉장히 힘들어질 것이다.
다국어 버전을 만들어야 한다면 언어마다 문자열 테이블을 만들고, 사용자가 선택한 국적에 따라 읽어야 할 문자열 테이블이 자동으로 변경될 것이다.
굉장히 편리하지 않은가?
'API' 카테고리의 다른 글
Old의 의미 (0) | 2018.01.22 |
---|---|
브러쉬 만들기 (0) | 2018.01.22 |
나만의 펜을 만들어 보자! (0) | 2018.01.20 |
StockObject를사용한 GDI브러쉬 색 변경 (0) | 2018.01.14 |
GDI? (0) | 2018.01.14 |