информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Дополнения к нижесказанному 21.07.03 14:43  Число просмотров: 1879
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Такую обработку несложно построить в BC++, т.к. все
> контролы являются членами класса формы приложения. Т.е из
> указанных выше функций (методов формы) видны все контролы.
> Гораздо сложнее это реализовать в VC++. Это связано с тем,
В VC++ (в частности в MFC Class Wizard-е - вызывается клавишей Ctrl-W) можно добавлять переменные в сгенеренный класс. В частности в класс диалога можно добавить переменные TreeView-а и TabCtrl-а.

> что классы, в которых созданы члены-контролы ничего не
> знают друг о друге, и не видят соответствующих контролов в
> общем случае. Например, если Вы создали приложение с
Это правильно что не видят. Потому, что программист должен сам знать чего хочет, а среда разработки - только инструмент. Кроме того в общем случае на один и тот же контрол можно добавить много переменных разных типов, а можно и вообще не засорять пространство имен, если оно не нужно.

> CTreeView – СFormView, где на форму положили CTabCtrl и для
> каждой закладки создали по диалогу CPage1,…., CPage20, то
> для каждого класса!!! придётся писать соответсвующие
> обработчики bool FillControls(unsigned int msg), bool
> DisplayControls. При этом необходимо ещё найти приемлемый
> механизм обмена сообщениями между классами.

> У кого есть идеи? Предлагаю для затравки тупой метод
> решения задачи - использование глобальных указателей на
> каждый из диалогов. Умные – предложите Вы.
Совершенно необязательно даже в этом случае делать их глобальными. О них необходимо знать только диалогу - поэтому и поместить их надо мемберами в диалог. CTreeView через Class Wizard, а страницы - по мере создания (насколько я понял страницы добавляются только динамически, то бишь появляются только в рантайме, поэтому добавить переменные и для них через Class Wizard нельзя, так как он привязан к Design Time-у).

Но есть и более эффективный вариант (и более правильный с точки зрения ООП). С TreeView-ом разобрались, а для страниц правильнее сделать общий базовый класс, с описанием всех функций, необходимых для работы (скорее всего виртуальных, но это зависит от конкретной задачи). Далее при добавлении страницы в поле lParam записывать указатель на CPage (базовый класс). После таких манипуляций станет возможно в Class Wizard-е добавить только переменную для CTabCtrl-а. А перечислять все страницы при помощи CTabCtrl::GetItem(). Делаем обратное преобразование из lParam-а к (CPage *) и работаем с этим указателем через его виртуальные интерфейсы.

Кроме того, как уже было указано, использование case-ов не по CPP-овски. Вызов функции тоже можно считать сообщением, поэтому вместо FillControls(STARTUP) лучше делать прямой вызов ClearControls()-ов. Ну в крайнем случае сделать приватную helper-функцию, которая будет заниматься непосредственно перечислением, а в нее слать pointer-to-member на необходимую функцию (я конечно не уверен, что это можно делать с виртуальными функциями, но насколько я себе представляю это не так уж сложно реализовать, а значит скорее всего реализовано в CPP)
<programming> Поиск 






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach