2012-09-01 17 views
2

如何傳遞變量Unicode字符串與L(或無)

MessageBoxW(hwnd, L"Καλημέρα", L"Τέστ", MB_OK|MB_APPLMODAL); 

這工作,但現在我怎麼能傳遞一個值,這是在我的變量「消息」和「標題」?我不能再使用L了,因爲它是一個變量,

MessageBoxW(hwnd, Lmessage, Lcaption, MB_OK|MB_APPLMODAL); //doesn't work 

有沒有L(消息)什麼的?消息和標題是WCHAR。

+2

你確定'message'和'caption'的類型是'WCHAR'嗎?這意味着他們每個人都擁有一個角色。他們可能是'WCHAR *'嗎? –

回答

3

如果你的變量是WCHAR*型的,他們是自然的長字符串格式。

您可以按照原樣將它們傳遞給MessageBoxW

MessageBoxW(hwnd, message, caption, MB_OK|MB_APPLMODAL); 
1
std::wstring s1 = L"Καλημέρα"; 
std::wstring s2 = L"Τέστ"; 
MessageBoxW(hwnd, s1, s2, MB_OK|MB_APPLMODAL); 

爲了得到C字符串相當於:

usual_c_string=s1.c_str(); 

There are various conversions between string types.

+1

我不認爲有一個使用'std :: wstring'的MessageBoxW版本。你需要使用'.c_str()'。 –

2

工作例如:

#define WIN32_LEAN_AND_MEAN 
#include <windows.h> 
#include <string> 

int main() 
{ 
    std::wstring message = L"Καλημέρα"; 
    std::wstring header = L"Τέστ"; 
    MessageBoxW(NULL, message.c_str(), header.c_str(), MB_OK); 
    return 0; 
} 
0

更好:

MessageBoxW(hwnd, boost::widen(message).c_str(), boost::widen(caption).c_str(), MB_OK|MB_APPLMODAL); 

見utf8everywhere.org對於這背後的解釋。 另外:我會避免MSVC上的非ASCII字符串文字。如果源文件以不同的編碼保存,則此代碼的結果可能會更改。

相關問題