2

我有

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

那行得通,但是现在我如何传递变量“消息”和“标题”中的值?我不能再使用 L 因为它是一个变量,

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

有L(消息)还是什么?消息和标题是 WCHAR。

4

4 回答 4

3

如果您的变量是 type WCHAR*,它们自然是长字符串格式。

您可以按MessageBoxW原样传递它们。

MessageBoxW(hwnd, message, caption, MB_OK|MB_APPLMODAL);
于 2012-09-01T16:23:36.483 回答
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;
}
于 2012-09-01T16:38:42.977 回答
1
std::wstring s1 = L"Καλημέρα";
std::wstring s2 = L"Τέστ";
MessageBoxW(hwnd, s1, s2, MB_OK|MB_APPLMODAL);

要获得等效的 C 字符串:

usual_c_string=s1.c_str();

字符串类型之间有各种转换。

于 2012-09-01T16:14:10.907 回答
0

更好的:

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

有关这背后的解释,请参见 utf8everywhere.org。另外:我会避免在 MSVC 上使用非 ascii 字符串文字。如果源文件以不同的编码保存,此代码的结果可能会发生变化。

于 2012-09-01T16:55:59.753 回答