标准Windows错误对话框

时间:2014-02-11 19:43:44

标签: winapi

如何在Windows上显示标准错误对话框,与操作系统语言无关,如下所示?

  

该进程无法访问该文件,因为该文件正由另一个进程使用。

(由记事本等使用)PowerISO(具有多语言界面)将始终以OS语言显示此消息(在我的情况下为荷兰语)。

例如,在C ++中使用ofstream时:

bool write_file(const char* filename)
{
    ofstream f(filename, ios::out | ios::binary);
    if (!f.is_open()) return 0;
    // (...)
    return 1;
}

然后在一些Windows消息处理程序中:

if (!write_file("recipe.txt"))
{
    // MessageBox("The process cannot ..." ??
}

2 个答案:

答案 0 :(得分:4)

使用Win32 API FormatMessage()函数将Win32错误代码转换为本地化的文本字符串。例如:

if (!write_file("recipe.txt"))
{
    DWORD dwErrorCode = GetLastError();
    LPTSTR lpMsg = NULL;
    FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsg, 0, NULL);
    MessageBox(..., lpMsg, ...)
    LocalFree(lpMsg);
}

答案 1 :(得分:2)

您可能需要自己将字符串翻译成其他语言。我认为Windows不会为您提供本地化标准对话框字符串的内置数据库。如果您愿意自己翻译,可以使用string table根据区域设置加载适当语言的字符串。