Как создать диалоговое окно в visual studio

Обновлено: 04.07.2024

Содержание

  • Условие задачи
  • Выполнение
    • 1. Запустить MS Visual Studio 2010
    • 2. Создать проект на C++ по шаблону Dialog Based Application
    • 3. Изменение внешнего вида главной формы
    • 4. Этапы построения диалогового окна
    • 5. Формирование класса и ресурсов диалогового окна
    • 6. Окно MS Visual Studio и панель Solution Explorer
    • 7. Вызов диалогового окна класса CForm2 как ресурса
    • 8. Программирование события клика на кнопке «Form2» главного окна приложения

    Поиск на других ресурсах:

    Условие задачи

    1. Разработать диалоговое окно, которое содержит две кнопки OK и Cancel (рис. 1).

    Visual C++. Шаблон MFC Application. Форма, которую нужно создать

    Рис. 1. Форма, которую нужно создать

    Выполнение

    1. Запустить MS Visual Studio 2010
    2. Создать проект на C++ по шаблону Dialog Based Application

    Подробный пример создания проекта по шаблону Dialog Based Application описывается здесь .

    В окне создания нового проекта задать имя приложения как MFCApp . В будущем будем привязываться к этому имени.

    Папка приложения в нашем случае (не важно):

    Во время создания нового проекта в мастере выбираем Dialog Based Application . Все другие настройки оставляем по умолчанию.

    В результате будут сгенерированы два класса с именами CMFCAppApp и CMFCAppDlg .

    Окно MS Visual Studio после выполненных действий будет иметь вид как показано на рисунке 2.

    C++. Шаблон MFC Application. Форма приложения после создания Dialog Based Application

    Рис. 2. Форма приложения после создания Dialog Based Application

    3. Изменение внешнего вида главной формы

    Осуществим удаление кнопки OK . А кнопку Cancel переименуем в Exit .

    Для удаления кнопки OK нужно сначала ее выделить, а потом нажать клавишу Delete .

    Таким самым образом удаляем элемент в котором написано:

    C++. Шаблон MFC Application. Переименование имени кнопки с "Cancel" на "Exit"

    Пока что, в окне панели Properties имеем два элемента:

    Можно загрузить приложение на выполнение и протестовать его работу.

    Выносим на форму другую кнопку, не привязанную к обработчикам событий. В окне панели Properties появляется еще один элемент IDC_BUTTON1 .

    Форма приложения будет иметь вид, как показано на рисунке 4.

    Visual C++. Шаблон MFC Application. Вынесение кнопки не привязанной к обработчику событий

    Рис. 4. Вынесение кнопки не привязанной к обработчику событий

    Свойство Caption кнопки IDC_BUTTON1 изменяем на Form2 . После нажатия на этой кнопке будет вызываться диалоговое окно.

    4. Этапы построения диалогового окна

    В Visual C++ любое диалоговое окно строится в три этапа:

    • формирование ресурсов диалогового окна;
    • создание класса диалогового окна;
    • использование класса диалогового окна.
    5. Формирование класса и ресурсов диалогового окна

    В MS Visual Studio ресурсы диалогового окна автоматически создаются после создания класса окна. Таким образом, создав класс окна, мы автоматически создаем ресурс окна.

    Visual C++. Шаблон MFC Application. Вызов "Class Wizard. " для создания класса и ресурса диалогового окна

    В результате откроется окно, которое изображено на рисунке 6.

    Visual C++. Шаблон MFC Application. Окно "MFC Class Wizard"

    Окно имеет такие поля:

    • CMFCAppApp – класс приложения в целом;
    • CMFCAppDlg – класс диалогового окна приложения;
    • CAboutDlg – класс диалогового окна About , что было сформировано при создании проекта мастером AppWizard .

    Visual C++. Шаблон MFC Application. Команда добавления нового класса

    Рис. 7. Команда добавления нового класса

    Название ресурса устанавливается как IDD_FORM2 .

    Visual C++. MFC Applicaiton. Создание нового класса CForm2 и ресурса IDD_FORM2, которые базируются на классе CDialog

    Рис. 8. Создание нового класса CForm2 и ресурса IDD_FORM2 , которые базируются на классе CDialog

    6. Окно MS Visual Studio и панель Solution Explorer

    После выполненных действий, окно панели Solution Explorer имеет вид, как показано на рисунке 9.

    Visual C++. Шаблон MFC Application. Окно Solution Explorer

    Рис. 9. Окно Solution Explorer

    7. Вызов диалогового окна класса CForm2 как ресурса

    Visual C++. Шаблон MFC Application. Вызов списка имен ресурсов приложения

    Рис. 10. Вызов списка имен ресурсов приложения

    Получаем список имен имеющихся ресурсов:

    • IDD_ABOUTBOX – ресурс диалогового окна About ;
    • IDD_FORM2 – ресурс новосозданного окна;
    • IDD_MFC_APP_DIALOG – ресурс главного окна приложения.

    Для вызова нужного ресурса, необходимо на нем сделать двойной клик мышкой. Делаем двойной клик на ресурсе IDD_FORM2 . В результате, откроется новосозданное диалоговое окно (рис. 11). Как видно из рисунка 11, оно похоже на начальное окно приложения типа Dialog Based Application .

    Visual C++. Шаблон MFC Applicaiton. Окно класса CForm2, который унаследован от класса CDialog

    Рис. 11. Окно класса CForm2 , который унаследован от класса CDialog

    Visual C++. Шаблон MFC Application. Главное окно приложения

    Рис. 12. Главное окно приложения

    Visual C++. Шаблон MFC Application. Список событий из вкладыша Control Events элемента управления IDC_BUTTON1

    Рис. 13. Список событий из вкладыша Control Events элемента управления IDC_BUTTON1

    Visual C++. Шаблон MFC Application. Выбор события BN_CLICKED и вызов обработчика события OnBnClickedButton1

    Рис. 14. Выбор события BN_CLICKED и вызов обработчика события OnBnClickedButton1

    Между скобками нужно вставить свой собственный код обработки события.

    Программный код функции обработки события клика на кнопке IDC_BUTTON1 следующий:

    Теперь можно запустить приложение на выполнение и протестировать его работу.

    Зачем нужно visual C++, создание диалоговых окон

    Как правило все коммерческие программы содержать сильный GUI, который довольно тяжело создавать, можно например посмотреть такие программы как microsoft word или exel да и много других. Там программируются множество дочерних окон, создается множество элементов управления там сотни окон, я хз. как такие приложения создавать, они так сложновато устроены. Мы рассмотрим и будем создавать приложения которые будут состоять всего навсего из одного окошка с набором элементов. Сам я недавно с ними познакомился. Будем создавать диалоговые окна.

    Даже не знаю с чего начать сам слабо в этой теме разбираюсь и так наверно начну с создания проекта. Создаем новый проект

    visual C++, создание диалоговых окон

    жмем готово и у нас создался новый пустой проект.

    Создание файла main.cpp

    Дальше создадим файл main.cpp со следующим кодом:

    int WINAPI WinMain ( HINSTANCE hInstance , HINSTANCE int ret = DialogBox ( hInstance , MAKEINTRESOURCE ( IDD_DIALOG1 ) , BOOL CALLBACK DlgProc ( HWND hwnd , UINT msg , WPARAM wParam , return FALSE ; //нужно что бы вызвать функцию для прорисовки окда //return TRUE;//не будет вызыватся функция протисовки окна

    Короче вызывается просто функция DialogBox() которой передается в качестве параметра собственная процедура DlgProc() в которой мы обрабатываем 3 вида событий: WM_INITDIALOG, WM_COMMAND, WM_CLOSE. Ну в первый WM_INITDIALOG мы попадаем сразу при создании программы когда производится инициализация окна, в третий WM_CLOSE попадаем когда закрываем окно (нажимем крестик), ну и во втором параметре WM_COMMAND мы уже обрабатываем собственные события. Как видно наша процедура возвращает либо FALSE либо TRUE, если мы возвращаем FALSE, то у нас вызывается процедура которая вырисовывает окно, если мы вернем TRUE, то это означает что функция стандартная для прорисовки окна не вызовется. Это так небольшой ликбез по теории

    visual C++, создание диалоговых окон, создание самого окна в редакторе

    visual C++, создание диалоговых окон

    Идем дальше, а дальше нам нужно создать само окно в визуальном редакторе, так называемый файл ресурсов, все создается автоматически, нам не нужно ничего в ручную создавать просто нажимаем в обозревателе решений правую клавишу на проекте и выбираем добавить ресурс

    visual C++, создание диалоговых окон

    Выбираем Dialog и нажимаем создать

    5

    visual C++, создание диалоговых окон.

    По нажатию на кнопку Ок у нас вызывается окошко

    А по нажатии на кнопку отмена вызывается другое информационное окошко

    Что происходит

    Это все происходит потому что наша функция DialogBox() при завершении функцией EndDialog(hwnd,1); возвращает второй ее параметр поэтому в WinMain() у нас ret принимает либо 1 либо 0 смотря как была завершена функция DialogBox(), это нужно для того что б в приложениях в которых много окон, что б можно было определять какая кнопка была нажата, Ок или Отмена, это мы будем просто понимать, если Ок, то нужно применить изменения, а если Отмена то ничего не делать. Так как у нас одно оконное приложение, то нам это не нужно разбирать visual C++, создание диалоговых окон.

    Это короче основа visual C++, создание диалоговых окон, от как из всего выше видно что наше приложение на диалоговых окнах очень просто создается, мы дальше разберем код как можно ввести текст через editbox и вывести на экран, а так же разберем список. Неахота сильно описывать, я просто покажу скрин проги и ниже код ее, ну а дальше опишу немножко как она работает, и так приступим, начнем со Edit Control и Button

    Edit Control и Button

    И так это просто поле для ввода текста и кнопка. И так создаем в визуальном редакторе для нашего прооекта visual C++, создание диалоговых окон следующий каркас:

    visual C++, создание диалоговых окон.

    Ну и код для работы с каркасом:

    int WINAPI WinMain ( HINSTANCE hInstance , HINSTANCE int ret = DialogBox ( hInstance , MAKEINTRESOURCE ( IDD_DIALOG1 ) , BOOL CALLBACK DlgProc ( HWND hwnd , UINT msg , WPARAM wParam , return FALSE ; //нужно что бы вызвать функцию для прорисовки окда //return TRUE;//не будет вызыватся функция протисовки окна

    Лень описывать что нить, просто пошарте в коде, попробуйте что нить поменять, мы тут используем функцию для получения содержимого поля функции

    Ну а для того что б данные вывести в поле мы используем функцию

    Тут ничего не могу сказать, сам не сильно знаю, нужно читать дополнительную литературу или МСДН, но лучше конечно Питзольда.

    Дальше рассмотрим программу для работы с List Box

    List Box.

    Это элемент список, вы должны снова создать каркас программы.

    visual C++, создание диалоговых окон.

    Ну и код к этому диалоговому окну:

    int WINAPI WinMain ( HINSTANCE hInstance , HINSTANCE int ret = DialogBox ( hInstance , MAKEINTRESOURCE ( IDD_DIALOG1 ) , BOOL CALLBACK DlgProc ( HWND hwnd , UINT msg , WPARAM wParam , SendDlgItemMessage ( hwnd , IDC_LIST1 , LB_ADDSTRING , 0 , ( LPARAM ) "ONE" ) ; SendDlgItemMessage ( hwnd , IDC_LIST1 , LB_ADDSTRING , 0 , ( LPARAM ) "TWO" ) ; SendDlgItemMessage ( hwnd , IDC_LIST1 , LB_ADDSTRING , 0 , ( LPARAM ) "THREE" ) ; SendDlgItemMessage ( hwnd , IDC_LIST1 , LB_ADDSTRING , 0 , ( LPARAM ) buf ) ; int num = SendDlgItemMessage ( hwnd , IDC_LIST1 , LB_GETCURSEL , 0 , 0 ) ; SendDlgItemMessage ( hwnd , IDC_LIST1 , LB_DELETESTRING , ( WPARAM ) num , 0 ) ; int num = SendDlgItemMessage ( hwnd , IDC_LIST1 , LB_GETCURSEL , 0 , 0 ) ; SendDlgItemMessage ( hwnd , IDC_LIST1 , LB_GETTEXT , ( LPARAM ) num , ( WPARAM ) name ) ; return FALSE ; //нужно что бы вызвать функцию для прорисовки окда //return TRUE;//не будет вызыватся функция протисовки окна

    Описание проги

    В этой так сказать проге можно дабавлять в список элементы, можно удалять элементы из списка, при наведении курсора мышки на элемент и нажатии левой кнопки мыши выделеный элемент попадает в тикстовое поле ниже над списком.

    Рассмотрим используемые функции, тут немного функций использовано. При выделении элемента из списка у нас отправляется в наше приложение команда и мы ее можем выловить в case IDC_LIST1: , там создается оператор switch (HIWORD(wParam)) и мы ловим параметр case LBN_SELCHANGE: он будет передан при выделении списка. Мы в общем создали обработчик этого события, для того что бы определить какой элемент был выделен, получить его порядковый номер мы используем функцию

    int num = SendDlgItemMessage ( hwnd , IDC_LIST1 , LB_GETCURSEL , 0 , 0 ) ;

    для того что б получить именно само значение строки используем

    SendDlgItemMessage ( hwnd , IDC_LIST1 , LB_GETTEXT , ( LPARAM ) num , ( WPARAM ) name ) ;

    для удаления элемента используем функцию

    SendDlgItemMessage ( hwnd , IDC_LIST1 , LB_DELETESTRING , ( WPARAM ) num , 0 ) ;

    для добавление элемента в список юзаем функцию

    SendDlgItemMessage ( hwnd , IDC_LIST1 , LB_ADDSTRING , 0 , ( LPARAM ) buf ) ;

    Что еще сказать? Наша процедура для обработки событий состоит из трех частей. В первой части инициализируется наше приложение. Там мы инициализировали наш список тремя значениями. Пожалуй это и все. Я сам с этими функциями и возможностями недавно познакомился. Для меня это все новенькое, но уже с данными знаниями мы можем создавать какие нить приложения.

    Мне несложно записать в текстовый файл данные, а затем их оттуда извлечь, это так сказать приложение база данных телефонных номеров. Нам уже эти знания по ВИНАПИ дают возможность создавать такие приложения плюс мы будем конечно пополнять свой запас знаний по созданию ГУИ. После этой простой БД мы создадим так же простой текстовый редактор, который будет сохранять файл, открывать файл, создавать файл и все это легко делается на ВИНАПИ. Ладно приступим, хватит писать пора дело делать 🙂 . ГУИ наконец то, аж не верится, что я дошол до его изучения.

    Visual C++, создание диалоговых окон это легко для новичков с моим мега про гайдом, сможет это сделать любой школьник 🙂

    В этой главе мы рассмотрим диалоговые окна. Приложения для Windows часто общаются с пользователем через диалоговые окна. Класс CDialog предоставляет интерфейс для управления диалоговыми окнами. Диалоговый редактор Visual C ++ позволяет легко проектировать диалоговые окна и создавать их ресурсы шаблона диалога.

    Построить объект диалога.

    Создайте диалоговое окно.

    Построить объект диалога.

    Создайте диалоговое окно.

    Давайте рассмотрим простой пример, создав новый проект Win32.

    Диалоговое окно «Новый проект»

    MFCDialogDemo Project

    Настройка MFCDialogDemo

    Параметры MFCDialogDemo

    MFCDialogDemo Property

    MFCDialogDemo Добавить запись

    Шаг 16. Чтобы создать приложение, нам нужно добавить класс и извлечь его из CWinApp MFC.

    Создание диалогового окна

    Шаг 1. Чтобы создать диалоговое окно, щелкните правой кнопкой мыши папку Resource Files в обозревателе решений и выберите Add → Resource.

    Добавить ресурс

    MFCDialogDemo FIle

    Редактор исходного кода

    DialogBox Выбрать свойства

    Расположение диалога

    Диалоговое окно должно быть «физически» расположено в приложении. Поскольку диалоговое окно обычно создается в качестве родительского элемента для других элементов управления, его расположение зависит от его отношения к родительскому окну или к рабочему столу.

    Если вы посмотрите и окно свойств, вы увидите два поля, X Pos и ​​Y Pos.

    Расположение диалога

    По умолчанию эти поля установлены на ноль. Вы также можете изменить, как показано выше.

    Если вы укажете эти два измерения как 0, левая и верхняя границы диалогового окна будут установлены так, что объект появится в центре по центру экрана.

    Диалоговое окно Размеры

    Размеры диалогового окна относятся к его ширине и высоте. Вы можете изменить ширину и высоту с помощью мыши в окне дизайнера.

    Диалоговое окно Размер

    Вы можете увидеть изменения ширины и высоты в строке состояния.

    Методы диалоговых окон

    Давайте создадим еще один класс CExampleDlg и выведем его из CDialog. Мы реализуем его конструктор по умолчанию, как показано в следующем коде.

    Нам нужно создать этот диалог в методе CExample :: InitInstance (), как показано в следующем коде.

    Модальные диалоговые окна

    Немодальное диалоговое окно

    Для немодального диалогового окна вы должны предоставить свой собственный общедоступный конструктор в вашем диалоговом классе.

    Чтобы создать немодальное диалоговое окно, вызовите ваш общедоступный конструктор, а затем вызовите функцию Create member объекта диалога, чтобы загрузить ресурс диалога.

    Вы можете вызвать Create во время или после вызова конструктора. Если ресурс диалога имеет свойство WS_VISIBLE, диалоговое окно появляется немедленно.

    Если нет, вы должны вызвать его функцию-член ShowWindow.

    Для немодального диалогового окна вы должны предоставить свой собственный общедоступный конструктор в вашем диалоговом классе.

    Чтобы создать немодальное диалоговое окно, вызовите ваш общедоступный конструктор, а затем вызовите функцию Create member объекта диалога, чтобы загрузить ресурс диалога.

    Вы можете вызвать Create во время или после вызова конструктора. Если ресурс диалога имеет свойство WS_VISIBLE, диалоговое окно появляется немедленно.

    Если нет, вы должны вызвать его функцию-член ShowWindow.

    Модальный диалог

    Чтобы создать модальное диалоговое окно, вызовите любой из двух открытых конструкторов, объявленных в CDialog.

    Затем вызовите функцию- член DoModal объекта диалога, чтобы отобразить диалоговое окно и управлять взаимодействием с ним, пока пользователь не выберет OK или Отмена.

    Это управление DoModal делает модальное диалоговое окно. Для модальных диалоговых окон DoModal загружает ресурс диалога.

    Чтобы создать модальное диалоговое окно, вызовите любой из двух открытых конструкторов, объявленных в CDialog.

    Затем вызовите функцию- член DoModal объекта диалога, чтобы отобразить диалоговое окно и управлять взаимодействием с ним, пока пользователь не выберет OK или Отмена.

    Это управление DoModal делает модальное диалоговое окно. Для модальных диалоговых окон DoModal загружает ресурс диалога.

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

    Приложения на основе диалогов

    Диалоговый шаблон проекта

    MFCModalDemo Application2

    MFCModalDemo Type

    Параметры приложения MFCModalDemo

    MFCModalDemo Расширенные возможности

    MFCModalDemo сгенерированные классы

    Шаг 10. Теперь вы видите, что мастер MFC создает это диалоговое окно и файлы проекта по умолчанию.

    Приложение DialogBox


    Автор:

    Знакомство с Visual Basic 2008

    1. Если Visual Basic 2008 Express не установлен на компьютере, загрузите его с веб-узла Microsoft ® и установите на компьютере. Его можно загрузить бесплатно.
    2. Откройте Visual Basic 2008 Express и создайте проект с типом "Библиотека классов".
    3. Присвойте проекту имя ClassLibrary1 (имя по умолчанию) и щелкните ОК. Запишите это имя на листе бумаге в точности, как оно было введено. Это имя потребуется на более позднем этапе.

    Открывается новое окно, а в правом верхнем углу экрана — Solution Explorer.

    В конструкторе форм Windows отображается графический вид создаваемого диалогового окна. Этот интерфейс можно использовать для добавления к диалоговому окну элементов управления.

    На панели элементов в левой части экрана перечислены элементы управления, которые можно добавить в диалоговое окно. Для этого проекта следует добавить текстовое поле, где будет отображаться значение параметра Inventor и где можно редактировать этот параметр.


    Теперь код выглядит следующим образом -


    Теперь проект почти готов к построению. При выполнении операции построения Visual Basic создает файл DLL. Для Visual Basic можно указать папку для сохранения этого файла, изменив путь выходного файла для операции построения.

    Program Files\Autodesk\Inventor \Bin\iLogicAdd\

    Прим.: Чтобы создать этот код, можно также использовать команду Создать правило для диалогового окна на вкладке "Мастера" в диалоговом окне "Редактировать правило".

    Это правило отправляет текущее значение параметра Inventor d0 в диалоговое окно, а затем отображает это диалоговое окно. Пользователь может использовать это диалоговое окно для редактирования этого значения. После щелчка кнопки "ОК" это значение из диалогового окна назначается параметру.

    Создание диалогового окна для отображения и изменения значений параметров

    1. Откройте Visual Studio.
    2. Создайте проект типа "Библиотека классов".
    3. В Solution Explorer щелкните правой кнопкой мыши имя проекта и выберите "Добавить" "Создать элемент" "Диалоговое окно".

    В конструкторе форм Windows отображается графический вид создаваемого диалогового окна. Этот интерфейс можно использовать для добавления к диалоговому окну элементов управления.

    В редакторе кода отображается новая подпрограмма с именем Dialog1_Load .

    Теперь код выглядит следующим образом -

    При построении проекта создается DLL. Существует несколько вариантов:

    • Скопируйте DLL в каталог iLogicAdd, расположенный в каталоге bin прораммы Autodesk Inventor (обычно в каталоге C:\Program Files\Autodesk\Inventor \Bin\iLogicAdd ).
    • Измените настройки проекта, чтобы автоматически сохранять DLL в этом каталоге. Используйте команду "Конфигурация iLogic", чтобы изменить каталог, в котором iLogic выполняет поиск DLL. См. дополнительные сведения по использованию DLL-файлов в правилах в разделе "Расширение возможностей iLogic".

    В следующем примере правила используется диалоговое окно:

    Это правило отправляет текущее значение параметра Inventor d0 в диалоговое окно, а затем отображает это диалоговое окно. Пользователь может использовать это диалоговое окно для редактирования этого значения. После щелчка кнопки "ОК" это значение из диалогового окна назначается параметру.

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

    Читайте также: