MessageBox不在Windows XP上显示

时间:2010-07-31 17:20:44

标签: winapi messagebox

我有两台机器:我的开发机器上有Windows Server 2008 R2,还有Visual Studio 2008.我正在那里编译我的应用程序。我的另一台机器是目标机器,它运行Windows XP。

问题是我有一个MessageBox调用可以在开发机器上运行,但不能在目标机器上运行。

我在WinMain中注释了所有内容,现在只有这个:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    MessageBox(NULL, "Your application is already running!", "Application Notification", MB_OK|MB_ICONINFORMATION);
    return 0;
}

在开发机器上,消息框弹出正常(没有声音),在XP机器上其他一切都很好,除了弹出框而不是我听到“ba-ding”弹出声音。

我需要更改MSVC ++内容中的哪个小设置才能使其在XP上运行?

我使用的字符集是“未设置”。我不确定这是否有效,但我尝试将其更改为多字节,没有骰子。

3 个答案:

答案 0 :(得分:2)

当有错误配置的清单资源/外部appname.exe.manifest时,我看到了哔哔声而不是窗口的东西,所以如果您使用的话,请尝试禁用它。

答案 1 :(得分:1)

我也有这个问题,经过一些搜索后我在网上找到了这个解决方案:在显示MessageBox之前调用InitCommonControls()。这解决了我的问题。

像Alex K.注意到,这是由清单造成的。如果你通过在清单中指定它来加载ComCtl32.dll的第6版,你需要在使用控件之前在Windows XP上调用InitCommonControls(),否则它们将不会被加载,这就是你看不到的原因MessageBox(虽然你可以听到)。

答案 2 :(得分:0)

这是基本的,它可以在任何Windows系统上运行。您可以检查MessageBox的返回值,如果为0,则调用GetLastError()