winapi:unicode
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 다음 판 | 이전 판 | ||
| winapi:unicode [2012/11/11 18:40] – 바깥 편집 127.0.0.1 | winapi:unicode [2024/04/23 22:43] (현재) – 바깥 편집 127.0.0.1 | ||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| + | ====== 유니코드 한글 문자표 ====== | ||
| + | * 한글자모 : U1100 ~ U11FF \\ 4352 ~ 4607 | ||
| + | * 한글완성 : UAC00 ~ UD7A3 \\ 44032 ~ 55203 | ||
| + | |||
| + | ====== API로 지원되는 문자 영역 정보 확인 ====== | ||
| + | |||
| + | GetTextCharsetInfo(), | ||
| + | |||
| + | < | ||
| + | // 이런 값을 받아 왔다면, (한글 맑은 굴림의 문자셋 정보) | ||
| + | & | ||
| + | fsUsb 0x0039edbc unsigned long [4] | ||
| + | [0x0] 0x900002af unsigned long | ||
| + | [0x1] 0x01d77cfb unsigned long | ||
| + | [0x2] 0x00000012 unsigned long | ||
| + | [0x3] 0x00000000 unsigned long | ||
| + | fsCsb 0x0039edcc unsigned long [2] | ||
| + | [0x0] 0x00080001 unsigned long | ||
| + | [0x1] 0x00000000 unsigned long | ||
| + | </ | ||
| + | |||
| + | fsUsb 각 비트를 체크하면 된다. | ||
| + | |||
| + | * 126 ~ 128bit 유니코드 서브셋 비트정보. | ||
| + | * 왼쪽2비트는 무시. | ||
| + | * 가장 왼쪽 1비트는 항상 1. 가장 기본이 되는 알파벳이라서. | ||
| + | * 두번째 왼쪽비트는 예약, 그리고 항상 0. 그런데 꼭 0은 아닌듯. | ||
| + | * 유니코드의 | ||
| + | |||
| + | 각 비트를 체크해서 해당 문자열이 지원되는지 알아보는 예제 코드 | ||
| + | |||
| + | <code cpp> | ||
| + | void CfontCharViewDlg:: | ||
| + | { | ||
| + | for (int i=0;i < this-> | ||
| + | { | ||
| + | this-> | ||
| + | } | ||
| + | |||
| + | // | ||
| + | // | ||
| + | CClientDC _dc( AfxGetMainWnd() ); | ||
| + | |||
| + | int _charsetinfo; | ||
| + | FONTSIGNATURE _fontsig; | ||
| + | _dc.SelectObject( mFont.font() ); | ||
| + | _charsetinfo = GetTextCharsetInfo( _dc.m_hDC, & | ||
| + | |||
| + | // codepage : http:// | ||
| + | WCHAR* _charsetSubset[] = | ||
| + | { | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L"IPA Extensions", | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L"Box Drawing", | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L"CJK Miscellaneous", | ||
| + | L" | ||
| + | L"CJK Compatibility", | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L"CJK Unified Ideographs", | ||
| + | L" | ||
| + | L"CJK Compatibility Ideographs", | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L"CJK Compatibility Forms", | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | L" | ||
| + | }; | ||
| + | // | ||
| + | |||
| + | int _index = 0; | ||
| + | // 일단 70개만 확인할거라. | ||
| + | for( _index = 0; _index <= 69; ) | ||
| + | { | ||
| + | // DWORD 4개에 대해서 체크할 것이므로 4번 돌자. | ||
| + | for( int j = 0; j < 4; ++j ) | ||
| + | { | ||
| + | // 4바이트의 비트수 (32비트)만큼 반복 | ||
| + | DWORD _sample = _fontsig.fsUsb[j]; | ||
| + | for( int i = 0; i < 32; ++i ) | ||
| + | { | ||
| + | // 가장 왼쪽의 비트가 1인지 확인해서 | ||
| + | DWORD _result = (_sample & 0x80000000); | ||
| + | if( _result & 0x80000000 ) | ||
| + | { | ||
| + | // 1이면, 여기에 해당하는 문자셋을 지원하므로 어딘가에 저장. | ||
| + | this-> | ||
| + | } | ||
| + | _sample = _sample << 1; | ||
| + | |||
| + | ++_index; | ||
| + | if( _index > 69 ) break; | ||
| + | } | ||
| + | if( _index > 69 ) break; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||