Идентификатор элемента управления | Имя переменной | Тип переменной |
IDC_NAME | m_strName | CString |
IDC_BIO | m_strBio | CString |
IDC_SKILL | m_strSkill | CString |
IDC_DEPT | m_strDept | CString |
IDC_CAT | m_bCat | BOOL |
IDC_RADIO2 | задавать не нужно и невозможно | |
IDC_LIFE | m_bLife | BOOL |
IDC_DIS | m_bDis | BOOL |
IDC_MED | m_bMed | BOOL |
IDC_EDUC | m_strEduc | CString |
IDC_LANG | m_nLang | int |
IDC_HARM | m_nHarm | int (Min=0, Max=100) |
IDC_HYPO | m_nHypo | int (Min=0, Max=100) |
Большинство взаимосвязей между типами элементов управления и типами переменных совершенно прозрачны. Однако уже не столь очевидно, как кнопки-переключатели (радио-кнопки) соотносятся с переменными. Если радио-кнопок в группе всего 2, как в нашем случае, то можно только для первой радио-кнопки ввести связанную переменную булевского типа и проверять ее значение: значение true означает выбор пользователем первой кнопки, а false – второй. Если кнопок несколько, то, проще всего, только с первой из них связать целочисленную переменную. Тогда при выборе первой кнопки значение этой переменной будет равно 0, второй – 1 и т.д. При этом для первой кнопки надо задать Group= True и Tabstop= True, а для всех остальных кнопок группы задать Group= False и Tabstop= True. Альтернативным способом получения состояния кнопок (причем любых кнопок, а не только радио-кнопок) является вызов их функций CButton:: GetCheck(), но для этого надо иметь указатель на объект кнопка. Его можно получить с помощью функции CDialog:: GetDlgItem(), но только в функциях класса диалога.
Для связанной переменной комбинированного списка «Язык» можно было бы выбрать тип CString или int. В первом случае переменная содержала бы название выбранного языка, а во втором (выбранном нами) она будет содержать номер выбранного языка в списке, причем значение для первого языка в списке – нулевое.
На этом этапе приложение должно компилироваться и выполняться, причем в диалоговом окне Вы можете вводить фамилию, биографию, выбирать вид оплаты, устанавливать и снимать флаги страховки, выбирать или вводить данные в комбинированный список «Профессиональные навыки», выбирать или вводить уровень образования, выбирать язык. В списке «Отдел» нет никаких данных и Вы их туда ввести не можете. Вы также можете двигать ползунки полос «Вредность» и «Лицемерие», но их положение пока не будет фиксироваться. Кроме того, любые выбираемые или вводимые Вами данные пока нигде не сохраняются. Надо что-то решать, не правда ли?
Кстати, посмотрите на текст конструктора класса
CDiaWinDlg::CDiaWinDlg(CWnd* pParent /*=NULL*/)
в файле CDiaWinDlg.cpp. Заметили, как там инициализируются связанные переменные? Также любопытно посмотреть на функцию CDiaWinDlg::DoDataExchange() в том же файле.
Шаг 7. Добавление переменных для доступа к классам управляющих элементов.
Каждому управляющему элементу, размещенному в диалоговом окне, соответствует свой MFC-класс и, когда при инициализации этот элемент создается, создается объект этого класса. Вместе с тем в программном коде, сгенерированном мастером ИС, этого объекта нет (в отличие от программы, разработанной в Delphi или Builder). Уже упоминаемая ранее функция CDialog:: GetDlgItem() позволяет получить ссылку на класс управляющего элемента, но этот указатель временный, как подчеркивается в MSDN, и с его использованием часто возникают проблемы. В связи с изложенным проще всего, и в конечном счете удобнее, добавить в программу переменные, являющиеся именами экземпляров классов (объектов), связанных с управляющими элементами окна.
Для достижения этой благородной цели введем такие связанные переменные по аналогии с предыдущим шагом, но для каждой переменной надо выбирать Category= Control. и флажок Control Variable должен быть установлен. Перечень имен этих переменных приведен в табл. 3. Для добавления переменных-объектов надо, как и на предыдущем шаге, выполнить команду Project è Add Variable, в списке Control ID выбрать идентификатор управляющего элемента и в поле Variable Name задать имя переменной. Не забывайте нажимать кнопку Finish после ввода каждой переменной.
Таблица 3
Дата: 2019-07-30, просмотров: 196.