2010-01-21 4 views
3
HWND wndHandle; //global variable 

// code snipped 

WNDCLASSEX wcex; 

// code snipped 

wcex.lpszClassName = (LPCWSTR) "MyTitleName"; 

// code snipped 

wndHandle = CreateWindow(
      (LPCWSTR)"MyTitleName",  //the window class to use 
      (LPCWSTR)"MyTitleName",  //the title bar text 
... 
... 

Win32 Window 응용 프로그램에 대한 자습서를 진행하고 있습니다. 위의 코드는 윈도우 화면의 제목 표시 줄 이름을 설정하는 데 사용됩니다. "const char [12] '에서'LPCWSTR '로 변환 할 수 없으므로 (LPCWSTR) 내 문자열"MyTitleName "을 typecast하고 모든 것이 잘 컴파일됩니다. 그러나 런타임 중에 창 화면의 제목은 중국어 문자로 밝혀졌습니다. 나는 문자열을 바꾸려고 노력했다. 그리고 중국어 문자는 항상 나의 끈에 따라 어떻게 든 변한다. 저는 XP Visual C++ 2008 Express Edition을 사용하고 있으며 비 유니 코드 프로그램의 설정으로 영어 (미국)를 사용하고 있습니다. 나는 그것을 얻지 않는다. 어떻게 문자열이 중국어가 될까요?영어 제목 표시 줄이있는 Win32 창 응용 프로그램을 만들지 만 제목 표시 줄이 중국어로되어 있습니다. 어째서?

답변

9

응용 프로그램이 유니 코드 응용 프로그램으로 컴파일되고 있습니다 (프로젝트 설정에서 정의 됨). 즉, Windows API 함수에 전달하는 문자열은 L"MyTitleName"과 같이 지정된 와이드 캐릭터 문자열이어야합니다. 실제로 문자열 유형을 변경하지 않으므로 LPCWSTR로 변환 할 수 없습니다. 문자열을 전달하지 않으므로 LPCWSTR에 캐스트 할 수 없습니다. 당신이 그것을 수정하지 않고 튜토리얼에서 원래의 코드를 사용하려면 유니 코드 모드를 해제 할 수 있습니다,

wcex.lpszClassName = L"MyTitleName"; 

// code snipped 

wndHandle = CreateWindow(
      L"MyTitleName",  //the window class to use 
      L"MyTitleName",  //the title bar text 
      ... 

을 :

이 코드는 작동합니다 프로젝트 속성에서 '일반'탭으로 이동 및 설정 Character Set ~ Use Multi-Byte Character Set. 언젠가 추가 언어를 지원해야 할 수도있는 프로그램에서는이 작업을 수행하지 마십시오.

7

이것은 (LPCWSTR) 캐스트 때문입니다. 컴파일러를 닫았을 때, 당신이 뭔가 잘못했다고 말하는 것입니다. 문자열은 여전히 ​​유니 코드 문자열이 아니며 캐스트에 의해 변환되지 않습니다. 수정 :

wcex.lpszClassName = L"MyTitleName"; 
wndHandle = CreateWindow(
       L"MyTitleName",  //the window class to use 
       L"MyTitleName",  //the title bar text 
관련 문제