Как разграничить ToolBar с клиентской обл. окна?
От: newDave Россия  
Дата: 22.01.02 20:05
Оценка:
Я делаю обычное SDI приложение на Visual C++6.
Главное окно у меня обычное(без всяких документ-видов).
Из главного окна можно вызывать Overlapped окошки на базе CFrameWnd,
(в которые я рисую всякие графики, но это не важно).
В этих окошках я замутил прилипающие ToolBar'ы. И проблема в том что,
эти ToolBar'ы воспринимаются как часть клиентской области окна, и на них все время наезжают, то графики то еще что-нибудь. Чутье мне подсказывает, что надо замутить в этих окошках свои виды(представления,view). И в них все рисовать. Я это уже пробовал для главного окна приложения. Вроде эффект
положительный.
Но как завести вид в моих Overlapped окошках я не знаю.
Разжуйте пожалуйста, а то я нигде этого не нашел.
Dave
Re: Как разграничить ToolBar с клиентской обл. окна?
От: CooLer Россия http://bestsoft.far.ru
Дата: 23.01.02 07:00
Оценка:
А может стоит попробовать сделать прогу на базе Doc/View?
"Выше голову" — сказл палач, надевая петлю
Re: Как разграничить ToolBar с клиентской обл. окна?
От: Андрей Россия  
Дата: 23.01.02 07:16
Оценка: 1 (1)
Здравствуйте newDave, Вы писали:

D>Я делаю обычное SDI приложение на Visual C++6.

D>Главное окно у меня обычное(без всяких документ-видов).
D>Из главного окна можно вызывать Overlapped окошки на базе CFrameWnd,
D>(в которые я рисую всякие графики, но это не важно).
D>В этих окошках я замутил прилипающие ToolBar'ы. И проблема в том что,
D>эти ToolBar'ы воспринимаются как часть клиентской области окна, и на них все время наезжают, то графики то еще что-нибудь. Чутье мне подсказывает, что надо замутить в этих окошках свои виды(представления,view). И в них все рисовать. Я это уже пробовал для главного окна приложения. Вроде эффект
D>положительный.
D>Но как завести вид в моих Overlapped окошках я не знаю.
D>Разжуйте пожалуйста, а то я нигде этого не нашел.

Архитектура Документ/Вид здесь ни при чем, для того CFrameWnd и существует, чтобы ты мог в него разные окна вставлять. CFrameWnd по умолчанию создает в методе OnCreateClient вид, у тебя, насколько я понимаю, это не так. Тогда возникает вопрос: где создаются окна графиков и тулбары? Ты должен тулбары создавать в CFrameWnd::OnCreate, а графики — в CFrameWnd::OnCreateClient. Тогда все должно работать.
Re[2]: Как разграничить ToolBar с клиентской обл. окна?
От: newDave Россия  
Дата: 23.01.02 10:48
Оценка:
Мда...,а я то мучился. Спасибо Андрей, думаю теперь все заработает.
Dave
Re[2]: Как разграничить ToolBar с клиентской обл. окна?
От: newDave Россия  
Дата: 23.01.02 12:15
Оценка:
Ан нет что-то не получается.
Не понятно как добраться до клиентской области.
Например пишу в OnCreateClient(хотя я так понимаю, что
без разнизы где это писать this то везде один)
cldc=new CClientDC(this).
В результате получаю тот же контекст в область которого
опять попадают все ToolBar'ы. Может вместо this что-то другое нужно?

Dave
Re[3]: Как разграничить ToolBar с клиентской обл. окна?
От: Андрей Россия  
Дата: 23.01.02 12:23
Оценка:
Здравствуйте newDave, Вы писали:

D>Ан нет что-то не получается.

D>Не понятно как добраться до клиентской области.
D>Например пишу в OnCreateClient(хотя я так понимаю, что
D>без разнизы где это писать this то везде один)
D>cldc=new CClientDC(this).
D>В результате получаю тот же контекст в область которого
D>опять попадают все ToolBar'ы. Может вместо this что-то другое нужно?

D>


А зачем ты в OnCreateClient DC получаешь? Ты здесь рисуешь, что ли? Ты здесь ДОЧЕРНИЕ ОКНА должен СОЗДАВАТЬ!!! А уже в этих окнах рисовать, но не где попало, а в обработчике WM_PAINT. А если у тебя рисование в CFrameWnd идет, ты уже САМ должен заботиться об отсечениях и обо всем остальном.
Re[4]: Как разграничить ToolBar с клиентской обл. окна?
От: newDave Россия  
Дата: 23.01.02 20:46
Оценка:
Ну ты загнул, описывать отсечения когда в окне болтается прилипающая(всмысле Docking)панель--это же не реально. Эти отсечения должны происходить автоматически если всеостальное сделать првильно, или я не прав? Дак вот я
и спрашивал как реализовать эти механизмы. Хотя я уже сделал панель без всякого прилипания и отсечения посчитал. Но прилипающая ведь приятнее...

PS. А DC я создавал в OnCreateClient(), потому как больше не придумал зачем его использовать в данном случае;из структуры которая туда передается я не смог вытащить ничего полезного для определения размеров клиентской области(имеется ввиду вся область кроме панельки).
Dave
Re[5]: Как разграничить ToolBar с клиентской обл. окна?
От: Андрей Россия  
Дата: 24.01.02 04:36
Оценка:
Здравствуйте newDave, Вы писали:


D>Ну ты загнул, описывать отсечения когда в окне болтается прилипающая(всмысле Docking)панель--это же не реально. Эти отсечения должны происходить автоматически если всеостальное сделать првильно, или я не прав? Дак вот я

D>и спрашивал как реализовать эти механизмы. Хотя я уже сделал панель без всякого прилипания и отсечения посчитал. Но прилипающая ведь приятнее...

Это не я загнул, а ты... Я тебе еще раз объясняю: посмотри на название функции OnCreateClient — ты здесь должен создать окно клиента, а уже в этом окне рисовать свои графики и прочую ... Это и есть стандартный механизм. CFrameWnd используется как контейнер, а ты пытаешься скрестить ужа с ежом. Если ты не используешь Doc/View, то второй параметр этой функции тебе не нужен, а вот из первого можно кое-что получить. А вообще, смотри исходные тексты класса CFrameWnd, и поймешь, что нужно делать.

D>PS. А DC я создавал в OnCreateClient(), потому как больше не придумал зачем его использовать в данном случае;из структуры которая туда передается я не смог вытащить ничего полезного для определения размеров клиентской области(имеется ввиду вся область кроме панельки).


Слушай, а документация тебе на что? Там же все ясно расписано.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.