'2007/12/07'에 해당되는 글 2건

  1. 2007.12.07 CreateFont, CreateFontIndirect
  2. 2007.12.07 SBCS, MBCS, UNICODE
CreateFont 와 CreateFontIndirect 는 둘다 폰트를 생성하는 함수입니다.

BOOL CreateFont(
    int nHeight, // 폰트의 높이
    int nWidth,   //폰트의 가로크기
    int nEscapement,    // escapement 벡터각도
    int nOrientation,      // 기준선(보통 수평선) 에서의 각도
    int fnWeight,           // 폰트 가중치
    DWORD fdwItalic,    // 이탤릭 속성 플러그
    DWORD fdwUnderline,   // 밑줄 속성 플러그
    DWORD fdwStrikeOut,   // 중앙선 속성 플러그
    DWORD fdwCharSet,    // 문자열 세트 명칭
    DWORD fdwOutputPrecision,   // 출력 정밀도
    DWORD fdwClipprecision,      // 클리핑 정밀도
    DWORD fdwQuality,               // 출력 문자의 질
    DWORD fdwPitchAndFamily,   // 글꼴 피치의 종류
    LPCSTR lpszFace          // 폰트체의 이름
);

CreateFontIndirect 함수는 LOGFONT 구조체를 설정하여 폰트를 만듭니다.
LOGFONT 구조체는 CreateFont 안의 인자의 값을 그대로 구조체화 한것입니다.

typedef struct tagLOGFONT { //lf
    LONG lfHeight;
    LONG lfWidth;
    LONG lfEscapement;
    LONG lfOrientation;
    LONG lfWeight;
    BYTE lfItalic;
    BYTE lfUnderline;
    BYTE lfStrikeOut;
    BYTE lfCharSet;
    BYTE lfOutPrecision;
    BYTE lfClipPrecision;
    BYTE lfQuality;
    BYTE lfPitchAndFamily;
    TCHAR lfFaceName[LF_FACESIZE];
} LOGFONT;

CreateFont 를 이용할때와 CreateFontIndirect 를 이용할 때는 차이가 있습니다.
CreateFontIndirect 를 이용할때엔 가로 크기와 세로크기를 각각 10으로
설정하였다 하더라도 그 문자의 스타일에 따라 보기 좋은 값으로 약간 변합니다.
즉, CreateFontIndirect 함수를 이용하면 글자체가 좀 보기 좋게 나타납니다.
실지로 폰트를 사용할 때는 CreateFontIndirect 를 많이 사용합니다.
폰트 대화상자에서 특정 폰트를 설정하였을때 LOGFONT가 값을 받으며,
이 값을 CreateFontIndirect 에서 바로 이용할 수 있는 장점도 있습니다.
Posted by 빨강토끼
,
http://blog.naver.com/rozio/100013783967

SBCS(Single-byte character set)
SBCS = ASCII ( 1byte), 하나의 문자를 저장하는데 한 바이트만 사용합니다.

MBCS(Multibyte character set)
한국어, 중국어, 일본어 등을 표현하기 위하여 여러바이트를 사용합니다.
그러나 실제로 여러 바이트를 사용하는 일은 없고 DBCS(double-byte character set)라고 해서
2바이트 만을 사용합니다.

UNICODE
국제 표준으로 전세계문자를 2 바이트에서 사용하자는 목적에서 만들어졌습니다.

unicode 상에서는 어떤 문자열을 대입할때 항상 문자열 앞에 L을 붙이게 됩니다.

예)
CString strTemp = L"이것은 연습입니다.";

하지만 이문자열이 unicode 가 아니라 SBCS 나 MBCS에서 사용되어질 수 있는
코드라면 호환이 가능하기 위해서 _T 를 사용합니다.(TEXT 와 같습니다.)

예)
CString strTemp = _T("이것은 연습입니다."); or
CString strTemp = TEXT("이것은 연습입니다.");

이렇게 하면 컴파일 타임에 _UNICODE로 정의가 안되어 있다면

CString strTemp = "이것은 연습니다.";
와 동일하며, unicode환경에서 컴파일 한것이라면
CString strTemp =L"이것은 연습입니다.";
와 동일합니다.

그리고 TCHAR는 SBCS/MBCS 컴파일 환경에서는 char 로 인식하지만
unicode 환경에서는 wchar_t 로 대체됩니다.

위와같은 환경은
Projects -> Settings -> C/C++tab -> preprocessor Definitions 에
보통 _MBCS가 정의되어있습니다.

TCHAR.h 파일에 마지막 정도에 _T(x)에 대한 정의가 있습니다.

Posted by 빨강토끼
,