![]() |
|
|
![]()
|
|
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: 3 Всего: 5 |
Доброго времени суток. Я создаю динамически CToolBar по определенному событию. Хочу что б он находился сверху все остальные бары Вопрос как совершить такое симпатишно что б было -------------------- Never again... |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Насчет симпатишно не обещаю... В MFC с док-барами все весьма мутно (в смысле программно расположить где надо). Попробуй посмотреть CFrameWnd::DockControlBar - туда можно передать позицию, где хочешь разместить панель...
-------------------- ... |
|||
|
||||
| Bukmop |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 1.6.2006 Где: Москва Репутация: 2 Всего: 3 |
С CReBar и CReBarCtrl можно похимичить.
|
|||
|
||||
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: 3 Всего: 5 |
Earnest, а вот если нет указателя на CFrameWnd? И DockControlBar не видно
-------------------- Never again... |
|||
|
||||
| POV |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 22.4.2006 Репутация: нет Всего: нет |
Может так...
Получаешь основное окно... CWnd* pMain = AfxGetMainWnd(); Потом указатель на окно по известному идентификатору... CWnd * pWnd = pMain->GetDescendantWindow(nID); Переводишь его на CToolBar если надо... или просто через pWnd->MoveWindow переводишь его на нужную позицию... и аналогично все другие с перерасчетом их относительных координат... Или я не прав... |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Ну да, указатель на главное окно можно получить через AfxGetMainWnd().
Что значит "не видно"? Эта функция объявлена как public -------------------- ... |
|||
|
||||
| Nuzur |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: 3 Всего: 5 |
POV,
Результат операции pMainToolBar = 0x00000000.
Конечно же вернул MainFrame чего и следовало ожидать. Earnest,
Хорошо а как теперь получить указатель на остальные тулбары? Если знаю их ИД конечно -------------------- Never again... |
||||||
|
|||||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
CFrameWnd::GetControlBar
-------------------- ... |
|||
|
||||
| POV |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 22.4.2006 Репутация: нет Всего: нет |
Nuzur,
Дык... GetDescendantWindow предназначена для получения потомков, вы вызываете с идентификатором IDR_MAINFRAME, вот наверное нуль и дает... а для других идентификаторов даст что надо... Earnest, А с DockControlBar толбар липнуть будет, это не есть хорошо... или ...? |
|||
|
||||
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: 3 Всего: 5 |
POV, Для каких других? Мне нужно убрать, пардон сдвинуть главный тулбар, так с каким параметром мне его вызывать?
Добавлено @ 15:04 Earnest,
pToolBar = 0x00000000 какие будут еще идеи пока куры не передохли -------------------- Never again... |
|||
|
||||
| POV |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 22.4.2006 Репутация: нет Всего: нет |
Как было сказано...
главный тоже конечно динамически создается, но... я обобщил... имея в виду любое окно с заданным идентификатором... если "главный тулбар" назвать другим идентификатором, то думаю будет другой результат... так как IDR_MAINFRAME ассоциируется с самим майнфреймом... то вот нулевой результат... |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Nuzur, а с чего ты взял, что идентификатор тулбара == IDR_MAINFRAME? Это всего лишь идентификатор реесурса, из которого тулбар грузится. Загрузили и забыли. Идентификатор - это то число, по которому можно найти дочернее окно. Он передается последним параметром в функцию Create\CreateEx.
Добавлено @ 16:45 Кстати, тебе не надо трогать главный тулбар. По-моему, достаточно, если ты в его позицию (или чуть левее) всунешь новый. И главный сам вроде должен отодвинуться. Но найти его, конечно, все равно надо. -------------------- ... |
|||
|
||||
| POV |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 22.4.2006 Репутация: нет Всего: нет |
Ага...
Если визард делал тулбар, то он ставит ID по умолчанию на AFX_IDW_TOOLBAR вот его и ставь в GetDescendantWindow, но никто не запрещает ставить свой... только ручками придется вписывать его в Сreate... а так все должно работать... сам проверял... Забыл сказать, что визард ставит такой ID на все тулбары, а патаму нужен перебор по другим признакам... что совсем не хорошо и следовательно мы приходим к уникальному ID-менованию всех тулбаров с применением ранее предложенной методы... успехов... Это сообщение отредактировал(а) POV - 26.10.2006, 19:49 |
|||
|
||||
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: 3 Всего: 5 |
Earnest, И действительно вы как всегда вы правы
POV, Именно так. Внимание вопрос! Как теперь мне получить прямоугольник ТулБара для того что б его передать в InvalidateRect? -------------------- Never again... |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Ну ты даешь! А GetWindowRect никак не подойдет?
И на кой тебе InvalidateRect делать? Не поможет... Вызови у фрейма RecalcLayout после того, как изменишь тулбар. Добавлено @ 18:55 По-хорошему, после любых манипуляций с тулбаром нужно вызывать GetParentFrame()->RecalLayout(): ведь тулбар не обязательно пристыкован к главному окну, может и плавать. -------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |