2013-11-02 2 views
1

나는 Win API를 C++ (나는 초보자 다)로 배웠다. 문자/문자열 데이터 형식에 문제가 있습니다.char에서 LPCWSTR로 변환

Google의 다른 문서도 읽지 만 여전히 이해할 수는 없습니다.

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    int wmId, wmEvent; 
    PAINTSTRUCT ps; 
    HDC hdc; 
    RECT rect; 
    char MyChar = 0; 

    switch (message) 
    { 
    case WM_CHAR: 
     MyChar = LOWORD(wParam); 
     MessageBox(hWnd, (LPCWSTR)MyChar, (LPCWSTR)MyChar, MB_OK); 
     break; 
    case WM_DESTROY: 
     PostQuitMessage(0); 
     break; 
    default: 
     return DefWindowProc(hWnd, message, wParam, lParam); 
    } 
    return 0; 
} 

목적 : 제 1 형 성격과 messageBox가 그것을 표시

오늘은이 문제를 만난다.

MyChar은 char (8 비트)입니다. LPCWSTR로 변환하고 싶습니다. 그러나 ... 성공하지 못했습니다.

누구나 나를 도울 수 있습니다. 미리 감사드립니다! WM_CHAR

답변

0

LPCWSTR가 다양한 문자 (wchar_t) 및 MessageBox()들의 어레이의 어드레스가 될 것으로 예상되어 그 배열이 널 문자로 끝나는 것으로 예상하고있다.

그러면이

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    int wmId, wmEvent; 
    PAINTSTRUCT ps; 
    HDC hdc; 
    RECT rect; 
    wchar_t myString[2]; 
    myString[1] = '\0'; // Ensure the second element is the null char 

    switch (message) 
    { 
    case WM_CHAR: 
     myString[0] = LOWORD(wParam); // Modify the first element only 
     MessageBox(hWnd, myString, myString, MB_OK); 
     break; 
    case WM_DESTROY: 
     PostQuitMessage(0); 
     break; 
    default: 
     return DefWindowProc(hWnd, message, wParam, lParam); 
    } 
    return 0; 
} 
같은 제 한 두 요소의 배열을 사용하여 두 번째로 널 문자를 사용하여 변경할 수

0

, wParam는 UTF-16 코드 단위입니다 - 그래서, 이미 값이 wchar_t에 저장할 수 :

wchar_t mystr[2]; 
mystr[0] = (wchar_t)wParam; 
mystr[1] = 0; 

MessageBox(hWnd, mystr, mystr, MB_OK); 

당신은 대신 WM_UNICHAR을 사용할 수 있습니다하는 UTF는-32 곳 wParam입니다 코드 포인트.

0
char a[] = "hello"; 

WCHAR wsz[64]; 
swprintf(wsz, L"%S", a); 

LPCWSTR p = wsz; 
관련 문제