MS Visual C++ 6.0, Работа в этой среде. |
Здравствуйте, гость ( Вход | Регистрация )
Here You Can Support Our Work and .:LavTeaM:. Services |
MS Visual C++ 6.0, Работа в этой среде. |
25.09.2003 - 09:58
Сообщение
#1
|
|
Новичок Группа: Пользователи Пользователь №: 738 Сообщений: 9 Регистрация: 10.04.2003 Из: St-Petersburg, Russia Загружено: байт Скачано: байт Коэффициент: --- Спасибо сказали: 0 раз(а) |
Задавайте свои вопросы, касающиеся работы в MS VC 6, делитесь советами.
|
|
|
27.09.2003 - 13:40
Сообщение
#2
|
|
Новичок Группа: Пользователи Пользователь №: 738 Сообщений: 9 Регистрация: 10.04.2003 Из: St-Petersburg, Russia Загружено: байт Скачано: байт Коэффициент: --- Спасибо сказали: 0 раз(а) |
С чего начать ?
Вопрос очень актуальный, так как в отличие от Visual Basic'a и продуктов Borland'a среда VC представляет меньший уровень абстракции. Это требует понимания принципов работы Windows (система, основанная на сообщениях). Программы на VC напрямую работают с функциями API, без посредников, что может привести к значительным отличиям в скорости и надежности. За это надо платить отсутствием встроенных, легкодоступных готовых компонентов (элементов управления, диаграмм, и тп). Тут не достаточно шлепнуть на форму элемент интерфейса (кнопку например) что бы сразу им управлять (перемещать, менять текст и тд). Основное препятствие к началу работы - неочевидность способа обращения "из текста программы" к элементу интерфейса. Рассмотрим простой вариант, с использованием MFC. Думаю, создание нового проекта на основе диалога трудностей ни у кого не вызывает. Поместим на форму кнопку. Ее свойства в процессе редактирования тоже можно изменить человеческим способом - контекстное меню, пункт properties. Сделаем так, что бы при нажатии на нее с ней же что-либо и происходило...например, пусть текст меняется с "Button1" на "START". Ключевой момент : создание переменной для кнопки, которую можно будет использовать в коде. Контекстное меню, пункт ClassWizard. Выбираем закладку "Member Variables" : В списке "Control IDs" (его лучше изменить на "правильное" сразу после создания кнопки на форме) находим идентификатор нашей кнопки, выделяем, нажимаем кнопку "Add Variable". Вводим название (тоже желательно "правильное"), ОК, ОК. Теперь существует объект класса (переменная типа) CButton. Создаем функцию - обработчик нажатия на кнопку двойным щелчком по ней, внутри пишем Код m_btnStart.SetWindowText("START"); THE END. Что еще можно сделать с объектом CButton, смотрим в MSDN. В следующей серии - как сделать то же самое без помощи MFC. |
|
|
28.09.2003 - 22:27
Сообщение
#3
|
|
Новичок Группа: Пользователи Пользователь №: 2949 Сообщений: 11 Регистрация: 3.07.2003 Загружено: байт Скачано: байт Коэффициент: --- Спасибо сказали: 0 раз(а) |
Oleg Rodnin
Здорово, продолжай, пожалуйста! |
|
|
5.10.2003 - 00:33
Сообщение
#4
|
|
Новичок Группа: Пользователи Пользователь №: 738 Сообщений: 9 Регистрация: 10.04.2003 Из: St-Petersburg, Russia Загружено: байт Скачано: байт Коэффициент: --- Спасибо сказали: 0 раз(а) |
Что же происходит внутри, под покровом MFC при нажатии на кнопку ?
Окошку - владельцу кнопки посылается Сообщение от том, что кнопка была нажата. Практически любое действие со стандартными элементами интерфейса программы - это отправка сообщений windows. Приложение MFC анализирует поступающие сообщения и реагирует на них вызовом определенных функций. Так в пример с кнопкой при поступлении сообщения WM_COMMAND с параметром BN_CLICKED вызывается ф-я OnButton1. Теперь представим, что нет переменной m_btnStart, которой можно скомандовать SetWindowText. У каждого элемента управления есть свой уникальный для родительского окна идентификатор (ID). Он используется при вызове "настоящих функций" WinAPI для получения Дескриптора окна (HWND), который в свою очередь используется для глобальной идентификации окон (все элементы управления - окна, windows не зря так названа). Например есть функция BOOL SetWindowText( HWND hWnd, // handle to window or control LPCTSTR lpString // title or text ); и много других для манипулирования окнами. Вопрос в том, где взять hwnd для конкретной кнопки. Ответ заключается в HWND GetDlgItem( HWND hDlg, // handle to dialog box int nIDDlgItem // control identifier ); при использовании в программе MFC hDlg берется из переменной m_hWnd, она запихнута почти во все классы, имеющие отношение к окнам/интерфейсу, это и есть дескриптор HWND. Идентификатор мы задавали при создании кнопки (IDC_BUTTON1), так что дело за малым : Код HWND hwndButtonStart = GetDlgItem(m_hWnd, IDC_BUTTON1); SetWindowText(hwndButtonStart, "START"); Таким образом можно поуправлять любыми кнопками на "форме", даже если для них нет переменных. Это бывает полезным для однократного быстрого действия, когда переменная просто не нужна и легче один раз получить дескриптор объекта и что нибудь с ним сделать, например блокировать/разблокировать кнопку ОК при проверке введенных пользователем данных. Кстати, кнопки Ok & Cancel по-умолчанию (и обычно) имеют стандартные идентификаторы IDOK & IDCANCEL... |
|
|
8.10.2003 - 07:31
Сообщение
#5
|
|
Новичок Группа: Пользователи Пользователь №: 218 Сообщений: 8 Регистрация: 11.03.2003 Загружено: байт Скачано: байт Коэффициент: --- Спасибо сказали: 0 раз(а) |
Классно !!!
Можно делать русский фак |
|
|
Текстовая версия | Сейчас: 28.03.2024 - 19:29 |