Диалоговое окно С++

463
26 ноября 2016, 18:56

Написать программу, которая при нажатии клавиши 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"

Answer 1

Это для winapi ты открыл, тебе это не надо. Но если все таки хочешь углубиться то дам не большую справочную информацию. При создании приложения на winapi создается заголовочный файл (автоматически подключенный) с одноименным названием проекта, и в нем уже подключается сам #include "resource.h". Далее для того что бы создать окно его надо зарегистрировать в [название_проекта].rc в диалогах и только после этого у тебя создастся переменная "IDD_DIALOG1". Ну а не соответствие типов и ежу понятно.

Более подробно о данном подходе: http://www.kselax.ru/2013/12/visual-c-sozdanie-dialogovyx-okon/

Answer 2

Создаешь 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;
READ ALSO
Подключение библиотек C++

Подключение библиотек C++

Решил добавить gtest к решениюСоздал проект для тестов, подключил в него gtest

267
С++ Вывести дерево каталогов с компьютера в TreeView

С++ Вывести дерево каталогов с компьютера в TreeView

Добрый вечер, помогите найти ошибкуРазобранный на Delphi пример http://decoding

296
QImage конвертация картинки

QImage конвертация картинки

Есть картинка в bmp формате открываю её с помощью диалога выбора файла, нужно её конвертировать в jpg формат средствами qt, как это сделать? далее...

390
Ошибка в деструкторе сокета boost

Ошибка в деструкторе сокета boost

Используется следующая модель абстракции:

305