реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Visual C++. Основа основ., Требуется помощь новичку
InvisibleFed
сообщение Apr 16 2007, 12:18
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Начинал программировать под Delphi. Потом перебрался на Builder. Имею небольшой опыт программирования под X Window. Под Windows все в основном писал на Builder-e. Там где нужно было чего-то особенное, но не связанное с GUI, писал на Visual C++ и оформлял в виде dll. Но вот возникло требование (слава богу временное) - GUI на MFC. У меня шок... Открываю учебники и вижу помимо всяких там иерархий классов (это все понятно вроде) набор шаманских действий. Вопросы по существу:

1. Основная идеология с практической точки зрения (Пример для Builder-a: Создаете форму, кидаете на нее компоненты, назначаете свойства в инспекторе, описываете Events. Все названия свойств четко соответствуют именам членов класса)
2. Как получить доступ к конкретному объекту. Например кинул я на форму Button (класс CButton или наследник), вижу его ID типа IDC_Button1 (всего-навсего число). У класса CButton есть определенные поля, методы, свойства и пр. Как к ним достучаться? Или здесь как-то все по иному? Я например не моу пока даже поместить текст в Edit (CEdit) (Кроме как методом тыка - SetDlgItemText(...) - это ваще чё?)

Пока все. Прошу помоч.
Go to the top of the page
 
+Quote Post
PsM
сообщение Apr 17 2007, 12:00
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 29
Регистрация: 15-12-06
Пользователь №: 23 532



Цитата(InvisibleFed @ Apr 16 2007, 13:18) *
2. Как получить доступ к конкретному объекту. Например кинул я на форму Button (класс CButton или наследник), вижу его ID типа IDC_Button1 (всего-навсего число). У класса CButton есть определенные поля, методы, свойства и пр. Как к ним достучаться? Или здесь как-то все по иному? Я например не моу пока даже поместить текст в Edit (CEdit) (Кроме как методом тыка - SetDlgItemText(...) - это ваще чё?)


Если речь идет про Dialog-и .
в VC6 : заходишь в View/Class Wizard... / Member Variables, там для твоего IDC_Button1 (IDC_Edit1) жмешь AddVariable дальше думаю все понятно.

в VC 2005 намного проще: для нужного Button-а(Edit-а) жмеш правой кнопкой и AddVariable ...

Про остальные VC не знаю
Go to the top of the page
 
+Quote Post
InvisibleFed
сообщение Apr 17 2007, 12:53
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Цитата(PsM @ Apr 17 2007, 20:00) *
Если речь идет про Dialog-и .
в VC6 : заходишь в View/Class Wizard... / Member Variables, там для твоего IDC_Button1 (IDC_Edit1) жмешь AddVariable дальше думаю все понятно.

в VC 2005 намного проще: для нужного Button-а(Edit-а) жмеш правой кнопкой и AddVariable ...

Про остальные VC не знаю


Спасибо. Я до этого уже допер. Вот только не понятно 2 момента:

1. Доступных свойств и методов там очень мало. Не верю что это все - MS че-то шифруется.
2. Это че такая политика для каждого объекта лазить создавать переменную? Как нормальные люди пишут?
Go to the top of the page
 
+Quote Post
unichorn
сообщение Apr 17 2007, 16:46
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 96
Регистрация: 24-09-05
Пользователь №: 8 901



В борланде усё просто, если нужна надпись на заборе то пишем(в зависимости от объекта) Имя_объекта->caption(или text или ещё чего, в справке смотреть надо) = "qwerty". И всё. smile.gif
Go to the top of the page
 
+Quote Post
InvisibleFed
сообщение Apr 18 2007, 05:28
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Цитата
В борланде усё просто, если нужна надпись на заборе то пишем(в зависимости от объекта) Имя_объекта->caption(или text или ещё чего, в справке смотреть надо) = "qwerty". И всё. smile.gif


Это я и сам знаю. А вот вижак...
Go to the top of the page
 
+Quote Post
Freeze Anti
сообщение Apr 18 2007, 09:50
Сообщение #6


Частый гость
**

Группа: Новичок
Сообщений: 153
Регистрация: 29-03-07
Из: Саратов
Пользователь №: 26 613



Цитата(InvisibleFed @ Apr 18 2007, 06:28) *
Это я и сам знаю. А вот вижак...

Я сам с вижулом работал мало и использовал Visual Studio .NET версию не помню. Там в объектах вообще ни у одного не было свойства Caption, вместо него у ВСЕХ было свойство Text, если я правильно все помню. А так внешне не сильно отличается от Borlandа Особенно если взять Developer Studio, так там вообще все слизано с MS Visual Studio, так что ты нарой где-нибудь BDS, посмотри ее, может - поможет...


--------------------
!!! All you need is LOVE !!!
Go to the top of the page
 
+Quote Post
PsM
сообщение Apr 18 2007, 10:11
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 29
Регистрация: 15-12-06
Пользователь №: 23 532



Цитата(InvisibleFed @ Apr 17 2007, 13:53) *
2. Это че такая политика для каждого объекта лазить создавать переменную? Как нормальные люди пишут?


Диалог создаеться из ресурса, и для нормального функционирования стандартных системных контролов поддержка кодом в виде экземпляра класса (иметься ввиду C++ классы, а не оконные) не нужна.
Зачем к примеру для кнопки заводить переменную (расходовать дополнительные ресурсы) если нам нужно только получить от нее сообщение BN_CLICKED ?
Go to the top of the page
 
+Quote Post
InvisibleFed
сообщение Apr 18 2007, 11:32
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Цитата
Зачем к примеру для кнопки заводить переменную (расходовать дополнительные ресурсы) если нам нужно только получить от нее сообщение BN_CLICKED


А вот здесь поподробнее. События то ладно, я на кнопку кликну он мне сам функцию создаст. А вот как например в программе в Edit чего-нить запихать?
Go to the top of the page
 
+Quote Post
Freeze Anti
сообщение Apr 18 2007, 12:11
Сообщение #9


Частый гость
**

Группа: Новичок
Сообщений: 153
Регистрация: 29-03-07
Из: Саратов
Пользователь №: 26 613



Цитата(InvisibleFed @ Apr 18 2007, 12:32) *
А вот здесь поподробнее. События то ладно, я на кнопку кликну он мне сам функцию создаст. А вот как например в программе в Edit чего-нить запихать?


Я не знаю, какая версия, но в Edit строка текста заносилась по-моему так же, как и в Buildere

Edit1->Text = "qwerty";

Я может чего туплю, но можно попробовать вместо "->" использовать ".", но вряд ли. Я точно помню у Edita было свойство Text. Или Caption не помню. Главное оно у всех надписей одно и то же. Вообще, посмотри свойства объектов в инспекторе объектов. Он почти такой же, как и в Борланде, может, называется как-то по-другому, но он там есть.


--------------------
!!! All you need is LOVE !!!
Go to the top of the page
 
+Quote Post
Илья Игоревич
сообщение Apr 18 2007, 18:33
Сообщение #10


Участник
*

Группа: Новичок
Сообщений: 34
Регистрация: 8-08-06
Из: Жуковский
Пользователь №: 19 404



Мои пять копеек:
если гуй можно реализовать не только на MFC, то имеет смысл посмотреть в сторону Windows.Forms или QT. Последнее привлекает кроссплатформенностью и собственным прекомпилятором, добавляющим несколько удобных интерфейсов вроде сигналов, а первое - скоростью разработки, гибкостью и удобством. А MFC - это, имхо, ужос, летящий на крыльях ночи. Убивать надо за такую модель.
Еще, кстати, можно свой набор классов написать. Если компонентов будет не очень много, то это, скорее всего, окажется быстрее разбирательств с MFC.
Go to the top of the page
 
+Quote Post
Demeny
сообщение Apr 19 2007, 00:53
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237



Цитата(Илья Игоревич @ Apr 18 2007, 19:33) *
Мои пять копеек:
если гуй можно реализовать не только на MFC, то имеет смысл посмотреть в сторону Windows.Forms или QT. Последнее привлекает кроссплатформенностью и собственным прекомпилятором, добавляющим несколько удобных интерфейсов вроде сигналов, а первое - скоростью разработки, гибкостью и удобством. А MFC - это, имхо, ужос, летящий на крыльях ночи. Убивать надо за такую модель.
Еще, кстати, можно свой набор классов написать. Если компонентов будет не очень много, то это, скорее всего, окажется быстрее разбирательств с MFC.

К сожалению, уже стало общим местом поругивать Microsoft за "дыры" в "окнах", за громоздкость GUI, за MFC и Visual Studio в придачу. Как правило, такое брюзжание слышно от программистов, привыкших в своё время писать под DOS, но так и не разобравшихся до конца с эстетикой объектно-ориентированного программирования, нашедшей воплощение, в частности, в C++.

Да, можно, конечно, попытаться создать свою иерархию классов. Сколько времени у вас уйдёт на то, чтобы создать, к примеру, диалог сохранения файла с иерархией папок на Вашем компьютере ? Не рухнет ли Ваш ГУИ, если пользователь, скажем, поменяет разрешение экрана или растянет окно ?

Пишу программное обеспечение под Windows, как пресловутый GUI, так и драйвера уровня ядра. И чем больше познаю операционную систему - тем большее удовольствие я получаю. Такой пакет, как MFC (а есть ещё и STL, ATL и т д) позволяет забыть о реализации рутинных задач, перетекающих из проекта в проект - а сосредоточиться на главном , на ТВОРЧЕСТВЕ, то есть... Все стандартные задачи, и графического интерфейса в том числе - уже решены и реализованы. И что немаловажно - хорошо задокументированы. Читайте MSDN - откроете много интересного cheers.gif

Был вопрос - основа основ в Visual C++ . Не смейтесь - основа основ здесь C++ - объекты, классы, конструкторы/деструкторы, виртуальные функции. Весь Windows построен на философии объектов. Каждый объект принадлежит своему классу, с каждым объектом можно работать только строго определённым набором функций (методов). И неуместно спрашивать, почему же не выводится текст в окно CEdit, пока Вы кожей не чувствуете наследование классов, иерархию объектов вашей программы, отличие виртуальной функции от обычной, отличие объекта и указателя на него (это к вопросу Edit1.Text или Edit1->Text) и т. д. и т. п.

И не надо ничего учить наизусть - ставим и читаем MSDN - там - как в Греции - есть всё.

Теперь автору.
Цитата(InvisibleFed @ Apr 16 2007, 13:18) *
1. Основная идеология с практической точки зрения

В ресурсах рисуете всё, что Вам нужно для GUI. Далее идёте в "Class wizard" - и там создаёте все классы, какие Вам нужны, функции обработки сообщений и действий пользователя и ... собственно всё. ГУИ начинает работать сразу после компиляции. Далее наполняете функции Вашим содержанием по требуемым задачам.
Цитата(InvisibleFed @ Apr 16 2007, 13:18) *
2. Как получить доступ к конкретному объекту. Например кинул я на форму Button (класс CButton или наследник), вижу его ID типа IDC_Button1 (всего-навсего число). У класса CButton есть определенные поля, методы, свойства и пр. Как к ним достучаться? Или здесь как-то все по иному? Я например не моу пока даже поместить текст в Edit (CEdit) (Кроме как методом тыка - SetDlgItemText(...) - это ваще чё?)

В основном, эти идентификаторы нужны для внутренних нужд системы (они пересылаются между окнами в параметрах сообщений). При идеологически правильном подходе в MFC они вам, скорее всего, не понадобятся, во всяком случае для простых стандартных интерфейсов. Ваш пример.
1) Если Вы создали кнопку IDC_Button1 в ресурсах - заходите в "Класс визард" и определите для этой кнопки функцию, которую вызовет система, если кнопка будет нажата (OnButton1Clicked) - и визард сам в нужном месте услужливо создаст функцию в классе (метод) и покажет, куда вставить свой код для обработки.
2) Если всё же захотелось "достучаться" до объекта по идентификатору, например, установить другой текст кнопки на летy...
Код
.........................
CButton* pMyButton1 = GetDlgItem(IDC_Button1);
pMyButton1->SetWindowText("My New Button");
.........................


--------------------
Сделано в Китае. Упаковано в России.
Go to the top of the page
 
+Quote Post
InvisibleFed
сообщение Apr 19 2007, 03:16
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Уважаемый Demeny. Я честно очень благодарен Вам за ответ. Вторая половина - то самое. Но. Я же написал, что я прогал долго под билдер. Я отлично знаю идеологию объектной-ориентированности не на словах, а на деле.

Цитата
Не смейтесь - основа основ здесь C++ - объекты, классы, конструкторы/деструкторы, виртуальные функции.


Так я и хотел это себе видеть. Так я это видел в билдере. Цитата

Цитата
Если всё же захотелось "достучаться" до объекта по идентификатору, например, установить другой текст кнопки на летy...
Код
CButton* pMyButton1 = GetDlgItem(IDC_Button1);
pMyButton1->SetWindowText("My New Button");


Это противоречие Вашим собственным словам и моя проблема на первом этапе пользования вижака. Чтобы достучаться до объекта, который уже создан, я должен зачем-то вызывать какую-то непонятную функцию по идентификатору! С ОО это не имеет ничего общего и с пониманием ОО тоже.

Во вторых, Вы обращали внимание, что среди членов того или иного класса в основном одни только функции (SetWindowText, AddString, и пр.)? Как таковых свойств или полей-переменных нет почти. Я лично не верю, что их нет на самом деле. Почему бы не сделать, например

Код
pMyButton1->Text = "My New Button";

?

Это конечно может придирки, но мое мнение, что закрытие этих членов, доступ к ним только через функции - долбанутая политика MS по части безопасного кода. От кого их скрывать? От разработчика? А то что их якобы как бы вовсе нет (все реализуется через функции) - я не верю - в таком случае, чтобы сделать банальную перерисовку надо на ежа сесть.

Цитата
И не надо ничего учить наизусть - ставим и читаем MSDN - там - как в Греции - есть всё.


Не все. Почитайте, например, в нем о том как назначить группу RadioButton-у (CRadioButton, если не запамятовал). Я смеялся и плакал.

Я вот тут попробовал на С# чего написать... Вот это то что надо! Все прозрачно и понятно. Мое мнение, что MS наконец-то реализовали то, что в борланде не формально было сделано еще тыщу лет назад. Это модная "компоненто-ориентированность" (наследие ОО). И теперь они это как нечто новое преподносят. ХЗ.

А за вторую часть сообщения спасибо. Если желаете, есть место для дискуссии - в ней того гляди родиться истина. smile.gif
Go to the top of the page
 
+Quote Post
Pathfinder
сообщение Apr 20 2007, 21:31
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 275
Регистрация: 29-06-05
Пользователь №: 6 400



InvisibleFed,
1. В стандарте C++ нет понятия свойств и событий - это приблуда билдера.
2. MFC по большей части это просто надстройка над API винды. Архитектурные косяки в ней есть, но не сильно мешают.
3. Все, что можно сделать под виндой, можно сделать в VC++, причем достаточно эффективно.
4. То, что вы увидели в редакторе ресурсов - это стандартные виндовские объекты, поддерживаемые на уровне системы, если нужны другие - разрабатывайте свои классы используя в качестве базовых MFC-шные или используйте ActiveX.
5. Если нужен совсем навороченный интерфейс в стиле VS2005 - есть WTL и открытые GUI библиотеки под нее.
6. Ну и наконец, можно перейти на .NET и WindowsForms


--------------------
ADC / DAC LC Filter Designer — Удобный инструмент проектирования LC-фильтров для ЦАП и АЦП
Go to the top of the page
 
+Quote Post
InvisibleFed
сообщение Apr 21 2007, 03:39
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Цитата
1. В стандарте C++ нет понятия свойств и событий - это приблуда билдера.


В стандарте может и нет, не знаю. Но всем понятно о чем реч ведь так? Речь шла о ПОЛЯХ-ЧЛЕНАХ КЛАССА (по научному еще более я не знаю как). И это не приблуда билдера / не только билдера - вижак ничем не отличается, просто реализовано криво, мое мнение.

Цитата
3. Все, что можно сделать под виндой, можно сделать в VC++, причем достаточно эффективно.


Да... эффективнее чем обычный АПИ, согласен. smile.gif

Цитата
Если нужен совсем навороченный интерфейс в стиле VS2005 - есть WTL и открытые GUI библиотеки под нее.


А чегo такое WTL?
Спасибо.
Go to the top of the page
 
+Quote Post
LMT
сообщение Apr 22 2007, 15:05
Сообщение #15


Участник
*

Группа: Свой
Сообщений: 54
Регистрация: 22-02-07
Пользователь №: 25 599



Цитата
А чегo такое WTL?


_http://www.codeproject.com/wtl/#Beginners

_http://www.rsdn.ru/
-- раздел WTL
ну, и
_http://sourceforge.net/projects/wtl
-- собственно, библиотека.

Вещь хорошая для написания небольших программок со стандартным интерфейсом. Минус -- нет упорядоченной и строгой документации. Плюс -- исходники под рукой.

Сообщение отредактировал LMT - Apr 22 2007, 15:28
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 01:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01499 секунд с 7
ELECTRONIX ©2004-2016