2013-11-02 114 views
1

我用C++學習Win API(我是新手)。我遇到了字符/字符串數據類型的問題。從char轉換爲LPCWSTR

我也在谷歌閱讀其他文檔,但仍不明白。

今天我遇到這樣的問題:

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型字符和消息框顯示它。

我的問題是MyChar是一個字符(8位),我想轉換爲LPCWSTR。但是,沒有成功。

任何人都可以幫助我。提前致謝!

回答

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

隨着WM_CHARwParam是UTF-16代碼單元 - 所以,已經是一個值,你可以在wchar_t存儲:

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

MessageBox(hWnd, mystr, mystr, MB_OK); 

您可能需要使用WM_UNICHAR代替,其中wParam是UTF-32代碼點。

0
char a[] = "hello"; 

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

LPCWSTR p = wsz;