Есть ли способ закрыть окно, возвращающее конкретный код? Я знаю, что PostQuitMessage() позволяет публиковать код выхода приложения, но каждый раз, когда я вызываю PostQuitMessage(), в моем потоке зависает окно. Мне нужно иметь возможность выйти из моего графического интерфейса с определенным кодом, который будет передан вызывающему процессу.C++ - CloseWindow with specificc code
У меня есть класс установщика, который открывает окно и ждет, когда WndProc (тот же поток, что и пользователи, зависит от того, будет ли поток продолжен выполняться или нет), чтобы отправить возвращаемое значение WM_EXIT и в зависимости от того, что пользователь выбирает (0 для успешной установки) (1 для пользователя, отменившего или неудачную установку) определит, что приложение будет делать оттуда.
Вот какой-то код, дающий вам представление о том, что некоторый синтаксис может быть неправильным, потому что я набрал все, кроме WndProc, в редакторе StackOverFlow.
(Кстати, вы можете спросить, почему вы можете принудительно скачать вместо того, чтобы позволить пользователям решить, ну а что, если была обнаружена огромная уязвимость, которую можно было бы использовать злонамеренно, чтобы вы ее исправляли, прежде чем позволить им найти ее Я получил идею от Microsoft, потому что иногда они требуют, чтобы обновить)
int CreateUpdateWindow(){
//MessageLoop function
//Calls WndProc
//return exit code
return static_cast<int>(msg.wparam);
}
DLL Источник (Обработанный):
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_COMMAND:{
switch (LOWORD(wParam)) {
case UpdateButton: {
//User installs update
PostQuitMessage(0);
break;
}
case CancelButton: {
//User declines update
PostQuitMessage(1);
break;
}
}
break;
}
case WM_DESTROY: {
PostQuitMessage(1);
break;
}
default: {
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
}
return 0;
}
Main Window
int main(){
//Did the user cancel the install?
//If he did exit the main process
if (CreateUpdateWindow() == 1){
ExitProcess(0);
}
return 0;
}
вам нужно связать некоторые данные окна (скажем экземпляр класса), и в этих данных вы можете сохранить причину, почему окна сл osed. и использовать эти данные после закрытия окна – RbMm
Или, если вас не волнует элегантность, вы можете просто использовать глобальную переменную. –
... но действительно непонятно, что вы здесь задаете. Похоже, вы хотите выйти из приложения с определенным кодом выхода, который родительский процесс может прочитать, но ваш комментарий к ответу Реми предполагает иное. Вы просто пытаетесь вернуть результат из оконной процедуры в main(), то есть замените код, который говорит 'return ... msg.wparam', что-то, что действительно работает? –