Первый метод GetDlgItem() возвращает указатель на дочернее окно.
Возвращаемый указатель представляет собой указатель на тип CWnd.
Данному методу передается только один параметр -Идентификатор (ID)
дочернего окна.
Функция GetDlgItem() обычно применяется для того,
чтобы получить указатель на элемент управления в диалоговом окне, но
может использоваться и для того, чтобы получить указатель на любое
дочернее окно.
Метод EnableWindow() включает или отключает возможность взаимодействовать
с тем окном, для которого вызван данный метод. В качестве единственного
параметра передается булево значение. Если значение TRUE - окно
(или элемент управления) будет разблокировано, и пользователь получает
возможность взаимодействовать с окном.
Третий метод ShowWindow() позволяет отобразить или скрыть окно. Если параметр TRUE -окно отображается.
Вверх
На самом деле это зависит от того, как должно вести себя приложение.
В следующей строке кода обнаруживается вызов функции MakeUpper()
для переменной типа CString, которая связана с полем со списком.
Эта функция преобразовывает все символы строки в прописные(заглавные
-символы верхнего регистра).
Если функцию вызвать для той переменной
типа CString, которая связана с полем со списком, то следующий вызов
UpdateData() с параметром FALSE приведет к тому, что символы в области
значений поля со списком преобразуются в прописные. Хотя такое вероятно
можно считать досадной случайностью, все же подобное поведение приложения
скорее всего нежелательно. Именно поэтому мы использовали в указанной
функции дополнительную переменную типа CString.
(Чтобы случайно не повредить переменную ассоциированную с полем со списком.)
Вверх
Сегодня мы научились :
Вверх
Назад |
Вверх |
Запуск другого приложения
Ранее мы добавили название трех приложений Windows в комбинированный
список Combo Box (в поле Data из Properties). Когда наше приложение
выполняется, названия этих приложений Windows видны в раскрывающемся списке.
Можно выбрать любое из них, и в области значений поля со списком появится
название выбранного приложения.
Теперь уже видны в раскрывающемся списке все три названия которые мы ввели.
Просто первоначально при вводе этого управляющего элемента в окно я не
расширил его до нужных размеров. Потому поместилось только первое название
программы.
К этой, работающей как и надо, части нужно только добавить код, связав его
с кнопкной Run Program. Фактически данный код должен извлечь значение
из области значений поля со списком и запустить соответствующую программу.
Создайте функцию для кнопки Run Program.на событие OnClick и добавьте к
ней код из следующего листинга :
Листинг 3.7 CONTROLSDLG.CPP - запуск другого Windows приложения
void CControlsDlg::OnBnClickedRunprg()
{
UpdateData(TRUE);
//объявить локальную переменную,в которой будет
//храниться название программы
CString strPgmName;
//эту переменную - m_strProgToRun - надо было объявить заранее и привязать ее
//к элементу (поле со списком) Combo Box проверь это
// CString m_strProgToRun и инициализировать ее названием
//программы пользователь будет интерактивно ;
//копировать название программы, которое считано функцией
//UpdateData(TRUE) в переменную m_strProgToRun, в локальную переменную
//strPgmName
strPgmName = m_strProgToRun;
//перевести название программы на верхний регистр
strPgmName.MakeUpper();
//запуск выбранной пользователем программы :
if(strPgmName == "PAINT")
Как и следовало ожидать в этой функции сначала вызывается
UpdateData(TRUE), чтобы сохранить в переменных значения,
хранящиеся в элементах управления диалогового окна.
(Чтобы поместить название программы, введенной пользователем
в элемент ComboBox, в переменную m_strProgToRun)
Следующий шаг может показаться вроде бессмысленным:
мы объявляем новую переменную типа CString и копируем
в нее значение, хранящееся в поле со списком.Действительно
ли это необходимо - ведь значение уже и так хранится
в переменной типа CString m_strProgToRun?
За вызовом функции преобразования всех символов строки в прописные
размещается ряд условных операторов, сравнивающих строку с названием
различных программ. Когда находится соответствие, вызывается функция
WinExec(), выполняющая запуск приложения.
Если теперь скомпилировать и запустить наше приложение, то в раскрывающемся
списке можно выбрать одно из Windows-приложений и запустить его, щелкнув
на кнопке Run program.
Функция WinExec() - устаревшая функция Windows.Вместо нее нужно использовать
функцию CreateProcess(). Однако функции CreateProcess() необходимо
передать ряд параметров, смысл которых трудно понять тем программистам,
кто только начинает программировать. Функция WinExec() все еще доступна
и реализована в виде макрокоманды, вызывающей функцию CreateProcess().
Благодаря этому для запуска приложения системы Windows из нашего
приложения можно использовать более простую функцию WinExec().
Для запуска приложения системы Windows из нашего приложения можно
использовать также еще одну API-функцию - ShellExecute().
Эта функция первоначально предназначалась для открытия и печати файлов,
но может использоваться и для запуска другой программы.
Откомпилируйте и запустите приложение.
АВ:Здесь опять мы использовали интерактивную связь с пользователем.
Пользователь выбирает из комбинированного списка нужное название
программы, а мы программно при нажатии кнопки Run Program
запускаем эту программу на исполнение. При этом естественно происходит
считывание данных из комбинированного списка и присвоение этих
данных строковой переменной. Эта строковая переменная в дальнейшем
используется для запуска программы.
Резюме
Вверх
Вопросы и ответы
Упражнения
Заметки
Содержание