MessageBox не отображается в Windows XP - PullRequest
0 голосов
/ 31 июля 2010

У меня есть две машины: на моей машине разработчика есть 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?

Я использую набор символов "Not Set". Я не уверен, что это что-то делает, но я попытался изменить его на многобайтовый без игры в кости.

Ответы [ 3 ]

2 голосов
/ 02 августа 2010

Я видел звуковой сигнал вместо окна, когда существует неправильно настроенный ресурс манифеста / external appname.exe.manifest, поэтому, если вы используете его, попробуйте отключить его.

1 голос
/ 07 марта 2011

У меня также была эта проблема, и после некоторого поиска я нашел это решение в Интернете: вызовите InitCommonControls (), прежде чем отобразить MessageBox. Это решило проблему для меня.

Как заметил Алексей К., это вызвано манифестом. Если вы загружаете 6-ю версию ComCtl32.dll, указав ее в манифесте, вам нужно вызвать InitCommonControls () в Windows XP, прежде чем вы сможете использовать элементы управления, иначе они не будут загружены, и поэтому вы не можете видеть MessageBox (хотя вы можете слышать это).

0 голосов
/ 01 августа 2010

Это примерно так же просто, как может и должно работать в любой системе Windows.Вы можете проверить возвращаемое значение MessageBox, если оно равно 0, вызвать GetLastError ()

...