Tabs and Splitter

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Eugie, Romeo, Hawk

Ответить
Alezis
Сообщения: 98
Зарегистрирован: 16 авг 2004, 00:10
Откуда: Минск
Контактная информация:

Tabs and Splitter

Сообщение Alezis » 13 фев 2005, 03:21

Люди подскажите как создать закладки(tabs) под Win32(хотя бы сам принцип) , но не стандартные а как в Excele, и как ещё описать разделитель окна , т.е. splitter под апи функции. Мот кто знает какие статьи иль исходники. :D

Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Сообщение Romeo » 14 фев 2005, 14:09

Как в Excel'е, это какие?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

Сообщение Eugie » 14 фев 2005, 17:33

В WinAPI есть 2 типа закладок: tab controls и property sheets. Первые требуют все делать вручную (т.е. скрывать-показыать контролы при переключении между закладками). Вторые в этом смысле гораздо удобнее, т.к. фактически каждая закладка в этом случае - отдельное диалоговое окно, которое отображается внутри sheet при переключении. Поэтому рекомендую использовать property sheets (подробности см. в MSDN), причем если пишешь на VC++, то проще воспользоваться MFC классами CPropertSheet/CPropertyPage. Что касается разделителей, то стандартного API контрола нет, в различных application frameworks он реализован по-разному. Например, в MFC есть класс CSplitterWnd, в Delphi VCL - TSplitter. Читай документацию.

Alezis
Сообщения: 98
Зарегистрирован: 16 авг 2004, 00:10
Откуда: Минск
Контактная информация:

Сообщение Alezis » 14 фев 2005, 20:57

Спасибо конечно,но...не MFC мне нужно.
мот не правильно вопрос сформулировал.
Мне нуны закладки которые нуна писать самому начиная от корней и до самых кончиков. Вот я и прошу помочь мне какими нить статьями а мот и примерами. Со сплиттером тоже самое (НЕ MFC). Как его реализовать только методами API.

Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Сообщение Romeo » 14 фев 2005, 21:25

Splitter - это библиотечная надстройка. API такого нет. А вот для закладок и визардов есть API (См. PropertySheet Win32 SDK).
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

Alezis
Сообщения: 98
Зарегистрирован: 16 авг 2004, 00:10
Откуда: Минск
Контактная информация:

Сообщение Alezis » 15 фев 2005, 00:30

Я не знаю надстройка это или нет мне просто надо сделать разделитель окон ,сплиттер или как он там по научному называется. Мне просто нуно моё окно разбить им на две части. Вот и всё.
Про закладки спасибо посмотрю.

Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Сообщение Romeo » 15 фев 2005, 11:13

Говоря о библиотечной надстройке я имел ввиду, что такого стандартного Windows-контрола - нет, и придётся всё делать самому, собственными ручками. Для того, что посмотреть как это делается советую изучить исходники класса CSplitterWnd в MFC либо темплейта CSplitterWindowT в WTL.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

Alezis
Сообщения: 98
Зарегистрирован: 16 авг 2004, 00:10
Откуда: Минск
Контактная информация:

Сообщение Alezis » 15 фев 2005, 17:02

Ба-лин... Ладно придётся порыться в MFC и по нету полазить.
Ещё такая фишка начал я тут сам табы писать написал класс контрола
+ ещё клас отдельной закладки. Всё вроде правильно, хотя может чего то не допонимаю, кароче :
создал в вижуале проект под вин32 и всунул туда свой класс, ну чтоб посмотреть на мои закладки(чё вообще получилось). Создал объект моего контрола, добавил 3 закладки:

Код: Выделить всё

  cl_MyTabCtrl clTabCtrl;
  clTabCtrl.Add("first");
  clTabCtrl.Add("second");
  clTabCtrl.Add("third");
и тут странные вещи начались, когда смотрю по шагам в функциях моего контрола объявленные в этой функции локальные преременные не хотят работать :

Код: Выделить всё

0    int m;
1    int clTabCtrl::SomeFunc1()
2    {
3      int n = 0;
4        n = SomeFunc2();
5        m = SomeFunc2();
6            ...........
              ..........
51       return n;
52      }
53
В этом случае если например n должно быть равно 2 то почему то оно остаётся равным 0, хотя всё написано правильно, в тоже время m, которое объявлено глабально работает и становиться равным 2. Кроме того когда стрелочка отладчика стоит на 6 строке то потом после f10 она сразу перепрыгивает на 52 а потом (после очередного f10)снова возврошается на 5 как и должна была сделать после 1 раза, и только тогда m изменяется. Мот кто знает что это такое происходит потому что я не знаю, может просто знаний мало, кароче если у кого появиться какие ниить предположения пишите.
:?: :?: :?: Кста, кто не знает, прикольная фича http://koders.com/ пишешь что ты ищешь(хотя бы предполагаешь) и она тебе выдаёт кучу файлов других программеров в которых встречается то что ищешь :D читал база там вроде неплохая, иногда помогает а иногда и нет... :( :)

Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Сообщение Romeo » 15 фев 2005, 18:07

Я знаю что происходит. Проект не пересобрался. И ты дебажишь старый бинарный код на новом текстовом коде :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

Alezis
Сообщения: 98
Зарегистрирован: 16 авг 2004, 00:10
Откуда: Минск
Контактная информация:

Сообщение Alezis » 15 фев 2005, 21:42

Большое тебе Romeoчеловеческое спасибо. В принципе оказалось что я просто собирал в релизе а не на дебаге... :lol:

Ответить