Написать программу, которая при нажатии клавиши ESC выводит окно-диалог о необходимости завершения программы. В окне диалога выводятся два подокна с надписями "Да", "Нет", выбор которых осуществляется нажатием клавиши Tab. При выборе окна "Да" и нажатии клавиши Enter программа завершается, а при выборе окна "Нет" - продолжает работу.
Помогите пожалуйста, я начинающий и не имею понятия как это сделать. В интернете нашел какой-то код но совсем не знаю как его править, поэтому прошу помощи у вас, и не знаю вообще он мне подходит.
#include <Windows.h>
#include "resource.h"
//собственная процедура для обработки
BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE
hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
int ret = DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1),
NULL, (DLGPROC)DlgProc);
if (ret == 0)
{
//Если была нажата кнопка Отмена или крестик
MessageBox(NULL, (LPCTSTR)"Отмена", "Inform",
MB_OK | MB_ICONINFORMATION);
}
else if (ret == 1)
{
//Если была нажата кнопка Ок
MessageBox(NULL, (LPCTSTR)"Ок", "Inform",
MB_OK | MB_ICONINFORMATION);
}
return ret;
}
BOOL CALLBACK DlgProc(HWND hwnd, UINT msg, WPARAM wParam,
LPARAM lParam)
{
switch (msg)
{
case WM_INITDIALOG:
{
return FALSE;
}
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDOK:
EndDialog(hwnd, 1);
return TRUE;
case IDCANCEL:
EndDialog(hwnd, 0);
return TRUE;
}
}
case WM_CLOSE:
{
EndDialog(hwnd, 0);
return FALSE;
}
}
return FALSE;//нужно что бы вызвать функцию для прорисовки окда
//return TRUE;//не будет вызыватся функция протисовки окна
}
Пробовал скомпилировать, однако обнаруживаются следующие ошибки:
Не удаётся открыть файл включение: resource.h: No such file or directory
не удаётся открыть источник файл "resource.h"
идентификатор "IDD_DIALOG1" не определён
аргумент типа "const char*" несовместим с параметром типа "LPCWSTR"
Это для winapi ты открыл, тебе это не надо. Но если все таки хочешь углубиться то дам не большую справочную информацию. При создании приложения на winapi создается заголовочный файл (автоматически подключенный) с одноименным названием проекта, и в нем уже подключается сам #include "resource.h". Далее для того что бы создать окно его надо зарегистрировать в [название_проекта].rc в диалогах и только после этого у тебя создастся переменная "IDD_DIALOG1". Ну а не соответствие типов и ежу понятно.
Более подробно о данном подходе: http://www.kselax.ru/2013/12/visual-c-sozdanie-dialogovyx-okon/
Создаешь Win32Project, в окне Resource View выбираешь Accelerator, добавить новую строку Key = VK_ESCAPE, слева его ID выскочит, найди в функции WndProc после case WM_COMMAND: и switch, туда добавить
case ID_ACCEL:
if (MessageBox(NULL, TEXT(""), TEXT(""), MB_YESNO) == IDYES)
DestroyWindow(hWnd);
break;
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Решил добавить gtest к решениюСоздал проект для тестов, подключил в него gtest
Добрый вечер, помогите найти ошибкуРазобранный на Delphi пример http://decoding
Есть картинка в bmp формате открываю её с помощью диалога выбора файла, нужно её конвертировать в jpg формат средствами qt, как это сделать? далее...