문제

키릴 또는 일본 문자를 사용하여 창 캡션을 설정하는 데 어려움이 있습니다. 우리는 물음표 나 무작위 쓰레기를 볼 수 있지만 우리가 원하는 텍스트는 아닙니다. 우리는 다른 인코딩, setwindowText (), setWindowTextw (), setWindowTexta () 등을 사용해 보았습니다. 문자열 리터럴을 setwindowText ()에 전달하여 작동하지도 않습니다.

우리의 Windows 설치에는 인터넷 익스플로러와 Firefox가 예를 들어 키릴과 일본 캡션을 올바르게 표시합니다. 그래서 우리는 올바른 인코딩/메소드 조합을 찾지 못할 것이라고 확신합니다. 제안이 있습니까?

도움이 되었습니까?

해결책

SetWindowText()? 응용 프로그램을 유니 코드로 컴파일 했습니까? 그렇지 않은 경우 SetWindowText ()는 동일합니다 SetWindowTextA(), 이는 현재 시스템 로케일 (일명 "비공개 응용 프로그램을위한 언어")으로 제한됩니다.

또한, 당신은 어떻게했습니다 만들다 창? 다음과 같은 명백하게 유니 코드 인식 API 사용 CreateWindowExW()? 그렇지 않은 경우 프로그램이 유니 코드로 컴파일되어 있는지 확인하십시오.

프로그램이 유니 코드로 컴파일되지 않은 경우 CP/지역 옵션에서 "비공개 응용 프로그램을위한 언어"를 수정할 수 있습니다. 재부팅이 필요합니다. 또는 더 쉽게 : 사용 MS Approcale 키릴 시스템 로케일을 시뮬레이션합니다

다른 팁

(추측 할 때) 응용 프로그램의 최상위 프레임 창이 ANSI 창라는 것입니다. 후드 아래에서 창을 만들 때 (CreateWindow () 또는 CreateWindowEx ()와 함께) 창 클래스를 제공해야합니다. 이 창 클래스는 기본적으로 ANSI 메시지 또는 유니 코드 메시지를 허용하는지 여부를 포함하여 창의 속성을 결정합니다. 결과적으로 이것은 registerClassexa () 또는 registerClassexw ()를 호출하여 귀하 (또는 귀하의 프레임 워크)가 창 클래스를 등록하는지 여부에 따라 설정됩니다.

거의 확실히 행복한 것은 최상위 창 클래스가 registerClassexa ()에 등록되고 있다는 것입니다. 이는 창의 기본 창 절차가 메시지를 처리하기 전에 메시지의 모든 유니 코드 문자열을 ANSI로 변환하므로 모든 곳에서 물음표와 홀수 문자가 있습니다.

이 모든 것에 대한 가장 쉬운 솔루션은 응용 프로그램을 전반적으로 유니 코드로 만드는 것입니다 (일반적으로 _unicode를 정의하여 수행). 다른 방법은 RegisterClassex ()가 호출되는 위치를 파악하고 registerClassexw ()를 만드는 것입니다. 이로 인해 다른 메시지와 관련하여 ANSI/유니 코드 문제가 발생할 수 있지만 (이론적으로는) 작동해야합니다. 물론, 문제라면 Windows 9X를 깨뜨릴 것입니다.

이 모든 것이 끔찍하게 복잡하게 들리면 틀리지 않습니다 ...

_unicode 정의로 응용 프로그램을 컴파일해야합니다. 그렇지 않으면 모든 Windows는 여전히 MBC이며 UTF-16이 아니므로 CodePage가 일치하지 않으면 키릴 또는 일본 문자를 표시 할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top