Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Help! создать CTreeCtrl динамически. Фигня с рамкой! 
:(
    Опции темы
Rapalex
Дата 1.9.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Я делаю создаю одно дерево на диалоге в ресурсах, а второе вот так:
Код

    m_oTree.CreateEx(
        WS_EX_NOPARENTNOTIFY | WS_EX_CLIENTEDGE,
        WS_CHILD | WS_VISIBLE,
        CRect(200, 200, 300, 300), this, IDC_TREE2
    );


После чего у окна дерева совсем нет рамке, что не очень красиво.

Спай++ проверил - у окон одинаковые свойства.


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Earnest
Дата 1.9.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Попробуй добавь стиль WS_BORDER во второй параметр


--------------------
...
PM   Вверх
Rapalex
Дата 1.9.2006, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Поробывал, рисуется какаято чёрная рамка, а хочется (в ХР) чтоб ьылна красивая синенькая, короче от теммы зависила, если создавать ресурсами то всё ОК, почему?


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Damarus
Дата 1.9.2006, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: 6
Всего: 29



Цитата(Rapalex @  1.9.2006,  14:14 Найти цитируемый пост)
Поробывал, рисуется какаято чёрная рамка, а хочется (в ХР) чтоб ьылна красивая синенькая, короче от теммы зависила, если создавать ресурсами то всё ОК, почему?

По всей видимости, синенькая рамка рисуется руками.

PM MAIL ICQ Jabber   Вверх
Rapalex
Дата 1.9.2006, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Damarus, нет она сам рисуется, когда в ХР работаеш, и у эдитов и у списков почти у всего.

А руками я её рисовать не буду, я же цвета с учетом теммы и стиля не знаю!!!


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Damarus
Дата 1.9.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: 6
Всего: 29



Rapalex, я почему так сказал. Я сейчас создал проект - диалог, на нём Tree Control связанный с m_TreeCtrlDlg, и m_TreeCtrlWnd, который создаётся через CreateEx. В CreateEx все стили такие же, как и у m_TreeCtrlDlg (стили m_TreeCtrlDlg проверил с помощью InqSoft Window Scanner), но m_TreeCtrlWnd рисуется без рамки вообще.
PM MAIL ICQ Jabber   Вверх
Earnest
Дата 1.9.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Rapalex, 
а у тебя в проекте есть сразу оба контрола, и из ресурсов, и динамический? 
Если нет, то, возможно во втором случае отсутствует ресурс-манифест?
Дело в том, что в XP-шных стилях рамка (голубенькая) рисуется спец. функцией из спец. библиотеки, которая загружается с помощью манифеста... Как загрузить и нарисовать руками, знаю... а вот с чем может быть связано отсутствие рамки если манифест таки есть - не представляю...


--------------------
...
PM   Вверх
Rapalex
Дата 2.9.2006, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Да в нужном пректе не получилось, я создал тестовый и на одном диалоге создал один контрол ресурсами, а второй ручками и они по разному смотрятся.


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
The Thing
Дата 2.9.2006, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: 1
Всего: 3



Ищи по форуму.. Объекты стиль аля XP
Дело в том, что когда ты создаешь обычным образом через креата.. создается старая версия объекта.

посмотри может здесь чего найдешь...
http://forum.sources.ru/index.php?showtopi...mp;view=showall

Вот... помоему оно!http://forum.sources.ru/index.php?act=ST&f=4&t=26738

Это сообщение отредактировал(а) The Thing - 2.9.2006, 11:13


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
Dart
Дата 3.9.2006, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 26.6.2006
Где: Саратов, РФ

Репутация: 2
Всего: 2



Вообще-то при создании контрола из ресурсов он создается с помощью Create, а только потом на него разные WS_EX навешиваются.
Посмотри в ресурсах, что конкретно определено в стилях, ну и попробуй повторить.
А манифест здесь ни при чем. Если он есть, то есть для всех окон.
--------------------
ЦитатаЛюблю смотреть, как другие работают
 Дж. К. ДжеромСайт: www.ecosigma.ruПочта: [email protected] 
PM MAIL WWW ICQ   Вверх
Rapalex
Дата 4.9.2006, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



The Thing, спасибо, но это я знал и ето устарело, и манифест у меня есть.

Поспробывл создать CEdit:
Код

edit11.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP, CRect(10, 200, 100, 220), this, 1111);
edit11.ModifyStyleEx(0, WS_EX_CLIENTEDGE, SWP_DRAWFRAME);


И создался он с нормальной синей рамочкой.



--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Rapalex
Дата 4.9.2006, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Dart, в ресурсах стоят только WS_BORDER | WS_TABSTOP а когда я смотрю в редакторе ресурсов там и скрол свойство стоит. Еороче это не поможет.

Да что такое я коро сума сойду.

Чтото сложно контролы в ХР динамически создавать.

 smile  smile  smile 


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Rapalex
Дата 7.9.2006, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Dart, ты малость не то сказал:
Цитата(Dart @  3.9.2006,  14:00 Найти цитируемый пост)
Вообще-то при создании контрола из ресурсов он создается с помощью Create, а только потом на него разные WS_EX навешиваются.

При создании контролов динамиески функцией CreateEx вначяле вызывается функция Ceate етого же класса, а после делается ModifyStyleEx(0, WS_EX_*).

Прошло какоето времмя и вспомнил как я создавал извращённый тултип, и сделал тоже с деревом:
Код

//H
CWnd wnd;

//CPP
wnd.CreateEx(
    WS_EX_CLIENTEDGE,
    WC_TREEVIEW,
    NULL,
    WS_CHILD | WS_VISIBLE,
    CRect(7,7, 70, 70),
    this, 
    1111
);

И таким образом создавая создаётся нормальное дерево.

Прошу заметит, та красивая синяя рамка в ХР это стиь WS_EX_CLIENTEDGE у окна, и никукого WS_BORDER. Вот в этом то и есть проблемма.

Когда я создаю это же окно также как это делает кат=ркас MFC:
Код

    wnd.Create(
        WC_TREEVIEW,
        NULL,
        WS_CHILD | WS_VISIBLE,
        CRect(7,7, 70, 70),
        this, 
        1111
    );
    wnd.ModifyStyleEx(0, WS_EX_CLIENTEDGE);

Эта запись идентична моим предидущим попыткам.
Вот в таком случае получается что у моего окна вообще нет рамки.

Тогда в последней строкеделаю так:
Код

wnd.ModifyStyleEx(0, WS_EX_CLIENTEDGE, SWP_DRAWFRAME);

И у меня получается обычная "вмятая" в окно поверхность как будто это при класическом виде!!!

И из этой ситуации 2 выхода:
1 - "преобразровать" CWnd к CTreeCtrl (чтоб не парится с сообщениями)
2 - Либо найти способ "правильного" (подходящего) применения стиля WS_EX_CLIENTEDGE.

Во втором случае я подумываю о SetWindowLong или о других функциях (я понятия не имею что эта функция делает, если можно подскажите).

ЛЮДИ, ПОДСКАЖИТЕ, всё что можно и по первому способу и по второму, вы же видите, эта проблемма рано и поздно и до вас доберётся!!!



--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Earnest
Дата 8.9.2006, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(Rapalex @  7.9.2006,  11:16 Найти цитируемый пост)
2 - Либо найти способ "правильного" (подходящего) применения стиля WS_EX_CLIENTEDGE.

Переопредели PreCreateWindow и поставь там все нужные стили...

Цитата(Rapalex @  7.9.2006,  11:16 Найти цитируемый пост)
И у меня получается обычная "вмятая" в окно поверхность как будто это при класическом виде!!!

Попробуй флаг SWP_FRAMECHANGED вместо SWP_DRAWFRAME



--------------------
...
PM   Вверх
Rapalex
Дата 8.9.2006, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Цитата(Earnest @  8.9.2006,  06:44 Найти цитируемый пост)
Переопредели PreCreateWindow

Так момогает,  но ради одной строчки както не хочется целый класс создавать.

Цитата(Earnest @  8.9.2006,  06:44 Найти цитируемый пост)
Попробуй флаг SWP_FRAMECHANGED вместо SWP_DRAWFRAME

Пробывал не помогает. Может  какойто другой функцией стили менять?



--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0655 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.