IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила форума Всем прочитать перед созданием темы!
 
Ответить в данную темуНачать новую тему
MS Visual C++ 6.0, Работа в этой среде.
Oleg Rodnin
сообщение 25.09.2003 - 09:58
Сообщение #1


Новичок
Иконка группы

Группа: Пользователи
Пользователь №: 738
Сообщений: 9
Регистрация: 10.04.2003
Из: St-Petersburg, Russia
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 0 раз(а)



Задавайте свои вопросы, касающиеся работы в MS VC 6, делитесь советами.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
Oleg Rodnin
сообщение 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.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
Operatio
сообщение 28.09.2003 - 22:27
Сообщение #3


Новичок
Иконка группы

Группа: Пользователи
Пользователь №: 2949
Сообщений: 11
Регистрация: 3.07.2003
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 0 раз(а)



Oleg Rodnin
Здорово, продолжай, пожалуйста!
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
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 не зря так названаsmile.gif).

Например есть функция
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...
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
egor2fsys
сообщение 8.10.2003 - 07:31
Сообщение #5


Новичок
Иконка группы

Группа: Пользователи
Пользователь №: 218
Сообщений: 8
Регистрация: 11.03.2003
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 0 раз(а)



Классно !!!

Можно делать русский фак
Перейти в начало страницы
Вставить ник
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 28.03.2024 - 19:29
Ошибка работы драйвера БД

Ошибка при работе с базой данных

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