Как вы создаете тему сообщения? - PullRequest
1 голос
/ 23 декабря 2011

Я пытался делать что-то вроде ...

const char *MessageBoxText = "";

DWORD WINAPI CreateMessageBox(LPVOID lpParam){

    MessageBox(NULL, MessageBoxText, "", MB_OK|MB_APPLMODAL);
    return TRUE;

}

MessageBoxText = "Blah, Blah, Blah...";
CreateThread(NULL, 0, &CreateMessageBox, NULL, 0, NULL);

Однако, похоже, это не работает правильно для задачи, которую я пытаюсь выполнить.Каков наилучший способ создания цепочки для сообщения, без сбоев?

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

Рассмотрите возможность передачи текста сообщения в качестве параметра потока вместо глобальной переменной, чтобы сделать код потокобезопасным.

DWORD WINAPI CreateMessageBox(LPVOID lpParam) {
    MessageBoxA(NULL, (char*)lpParam, "", MB_OK);
    return 0;
}
CreateThread(NULL, 0, &CreateMessageBox, "Blah, Blah, Blah...", 0, NULL);

Кроме того, вам не нужно указывать MB_APPLMODAL как флаг по умолчанию (он равен 0).

Если вы ориентируетесь на современную ОС Windows, лучше задать UNICODE, поскольку MessageBoxA преобразует вас в UTF-16 и вызывает MessageBoxW

0 голосов
/ 23 декабря 2011

Каков наилучший способ создания цепочки для окна сообщения без ее сбоя?

В общем, нет.

Под Windows все окна (маленькие 'w', означающие отдельные элементы графического интерфейса) в приложении "запускаются" в одном потоке. Обычно это «основной» поток, но, в частности, это поток, в котором работает насос сообщений . См. Мой связанный пост для более подробной информации о насосе сообщений.

Если то, что вы действительно пытаетесь достичь, - это диалоговое окно или какое-либо другое окно, которое может работать одновременно с другими запущенными окнами, чтобы оно могло оставаться включенным, пока другие окна все еще реагируют на ввод пользователя, тогда вам нужно немодальное окно или диалоговое окно. Это окно, которое не блокирует другие окна от обработки обновлений или принятия пользовательского ввода. См. Здесь для описания того, как реализовать это с помощью MFC, но обратите внимание, что вам не нужно использовать MFC для реализации немодального диалогового окна.

...