我有
MessageBoxW(hwnd, L"Καλημέρα", L"Τέστ", MB_OK|MB_APPLMODAL);
那行得通,但是现在我如何传递变量“消息”和“标题”中的值?我不能再使用 L 因为它是一个变量,
MessageBoxW(hwnd, Lmessage, Lcaption, MB_OK|MB_APPLMODAL); //doesn't work
有L(消息)还是什么?消息和标题是 WCHAR。
如果您的变量是 type WCHAR*
,它们自然是长字符串格式。
您可以按MessageBoxW
原样传递它们。
MessageBoxW(hwnd, message, caption, MB_OK|MB_APPLMODAL);
工作示例:
#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;
}
std::wstring s1 = L"Καλημέρα";
std::wstring s2 = L"Τέστ";
MessageBoxW(hwnd, s1, s2, MB_OK|MB_APPLMODAL);
要获得等效的 C 字符串:
usual_c_string=s1.c_str();
更好的:
MessageBoxW(hwnd, boost::widen(message).c_str(), boost::widen(caption).c_str(), MB_OK|MB_APPLMODAL);
有关这背后的解释,请参见 utf8everywhere.org。另外:我会避免在 MSVC 上使用非 ascii 字符串文字。如果源文件以不同的编码保存,此代码的结果可能会发生变化。