Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CToolBar Переместить вниз под другой CToolBar 
:(
    Опции темы
Nuzur
Дата 24.10.2006, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

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




Доброго времени суток.

Я создаю динамически CToolBar по определенному событию. Хочу что б он находился сверху все остальные бары smile перемещались вниз, после наступления события все б становилось на круги своя.

Вопрос как совершить такое симпатишно что б было smile ?


--------------------
Never again...
PM MAIL   Вверх
Earnest
Дата 24.10.2006, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Насчет симпатишно не обещаю... В MFC с док-барами все весьма мутно (в смысле программно расположить где надо). Попробуй посмотреть CFrameWnd::DockControlBar - туда можно передать позицию, где хочешь разместить панель...


--------------------
...
PM   Вверх
Bukmop
Дата 24.10.2006, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



С CReBar и CReBarCtrl можно похимичить.
PM MAIL   Вверх
Nuzur
Дата 25.10.2006, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

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



Earnest, а вот если нет указателя на CFrameWnd? И DockControlBar не видно smile


--------------------
Never again...
PM MAIL   Вверх
POV
Дата 25.10.2006, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Может так...
Получаешь основное окно...

CWnd* pMain = AfxGetMainWnd();

Потом указатель на окно по известному идентификатору...

CWnd * pWnd = pMain->GetDescendantWindow(nID);

Переводишь его на CToolBar если надо... или просто через pWnd->MoveWindow
переводишь его на нужную позицию... и аналогично все другие с перерасчетом их относительных координат...

Или я не прав... smile
PM MAIL   Вверх
Earnest
Дата 25.10.2006, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ну да, указатель на главное окно можно получить через AfxGetMainWnd().

Цитата(Nuzur @  25.10.2006,  10:10 Найти цитируемый пост)
И DockControlBar не видно 

Что значит "не видно"? Эта функция объявлена как public



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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

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



POV, 

Код

    CToolBar * pMainToolBar = ( (CToolBar *) (AfxGetMainWnd()->GetDescendantWindow(IDR_MAINFRAME)) );
или
        CWnd * pMainToolBar = AfxGetMainWnd()->GetDescendantWindow(IDR_MAINFRAME);

Результат операции  pMainToolBar = 0x00000000.

Код

       CWnd * pMainToolBar = AfxGetMainWnd();

Конечно же вернул MainFrame чего и следовало ожидать.
Earnest, 
Код

    CFrameWnd * pMainToolBar = ((CFrameWnd *)(AfxGetMainWnd()));

Хорошо а как теперь получить указатель на остальные тулбары? Если знаю их ИД конечно  smile 


--------------------
Never again...
PM MAIL   Вверх
Earnest
Дата 26.10.2006, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



CFrameWnd::GetControlBar


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


Новичок



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

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



Nuzur,
Дык... GetDescendantWindow предназначена для получения потомков, вы вызываете с идентификатором IDR_MAINFRAME, вот наверное нуль и дает... а для других идентификаторов даст что надо...

Earnest,
А с DockControlBar толбар липнуть будет, это не есть хорошо... или ...? smile
PM MAIL   Вверх
Nuzur
Дата 26.10.2006, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

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



POV, Для каких других? Мне нужно убрать, пардон сдвинуть главный тулбар, так с каким параметром мне его вызывать?

Добавлено @ 15:04 
Earnest, 

Код

    CFrameWnd * pFrame   = ((CFrameWnd *)(AfxGetMainWnd()));
    CToolBar  * pToolBar = ((CToolBar *) (pFrame->GetControlBar(IDR_MAINFRAME)));


 pToolBar = 0x00000000 какие будут еще идеи пока куры не передохли smile


--------------------
Never again...
PM MAIL   Вверх
POV
Дата 26.10.2006, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как было сказано...
Цитата

Я создаю динамически CToolBar по определенному событию

главный тоже конечно динамически создается, но... я обобщил... имея в виду любое окно с заданным идентификатором... если "главный тулбар" назвать другим идентификатором, то думаю будет другой результат... так как IDR_MAINFRAME ассоциируется с самим майнфреймом... то вот нулевой результат... smile
PM MAIL   Вверх
Earnest
Дата 26.10.2006, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Nuzur, а с чего ты взял, что идентификатор тулбара == IDR_MAINFRAME? Это всего лишь идентификатор реесурса, из которого тулбар грузится. Загрузили и забыли. Идентификатор - это то число, по которому можно найти дочернее окно. Он передается последним параметром в функцию Create\CreateEx.

Добавлено @ 16:45 
Кстати, тебе не надо трогать главный тулбар. По-моему, достаточно, если ты в его позицию (или чуть левее) всунешь новый. И главный сам вроде должен отодвинуться. Но найти его, конечно, все равно надо.


--------------------
...
PM   Вверх
POV
Дата 26.10.2006, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ага...
Если визард делал тулбар, то он ставит ID по умолчанию на AFX_IDW_TOOLBAR вот его и ставь в GetDescendantWindow, но никто не запрещает ставить свой... только ручками придется вписывать его в Сreate...
а так все должно работать... сам проверял...

Забыл сказать, что визард ставит такой ID на все тулбары, а патаму нужен перебор по другим признакам... что совсем не хорошо и следовательно мы приходим к уникальному ID-менованию всех тулбаров с применением ранее предложенной методы... успехов...

Это сообщение отредактировал(а) POV - 26.10.2006, 19:49
PM MAIL   Вверх
Nuzur
Дата 27.10.2006, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

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



Earnest, И действительно вы как всегда вы правы smile

POV, Именно так.

Внимание вопрос!
Как теперь мне получить прямоугольник ТулБара для того что б его передать в InvalidateRect?


--------------------
Never again...
PM MAIL   Вверх
Earnest
Дата 27.10.2006, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ну ты даешь! А GetWindowRect никак не подойдет?
И на кой тебе InvalidateRect делать? Не поможет... Вызови у фрейма RecalcLayout после того, как изменишь тулбар.

Добавлено @ 18:55 
По-хорошему, после любых манипуляций с тулбаром нужно вызывать GetParentFrame()->RecalLayout(): ведь тулбар не обязательно пристыкован к главному окну, может и плавать.


--------------------
...
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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