Поиск:

Ответ в темуСоздание новой темы Создание опроса
> исчезает тоолбар 
V
    Опции темы
Skulle
Дата 3.2.2010, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет. Возникла у меня такая интересная ситуация в окне есть тоолбар. Его можно перемещать и он делается попап окном. Когда главное окно MAXIMIZED я тоолбар перемещает на фрейм и в этот момент тоолбар исчезает.
PM MAIL   Вверх
Earnest
Дата 4.2.2010, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Skulle @  3.2.2010,  18:54 Найти цитируемый пост)
я тоолбар перемещает на фрейм 

Это что значит. А вообще он где у тебя? Или ты имеешь в виду его стыковку (dock) к фрейму?
Значит, неправильный какой-то тулбар, с кривизной... Ты бы написал подробнее, какого вида это фрукт... А может это фрейм у тебя кривой. Во всяком случае, в стандартном MFC-приложении стандартный тулбар так себя не ведет. 



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


Новичок



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

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



user posted image

На рисунке показан тулбар под цифрой 1 и фрейм под цифрой 2. Этот тулбар наслидуеться от обычного тулбара с перегружен некоторых функциями. А также забранной рамкой над тулбаром. При том как окно имеет мексимальний размер и как я вытаскиваю тулбар на фрейм 2 он после отпускания левой кнопки на мыши исчезает. Это у меня SDI проект в MainFrame я ловлю когда окно имеет максимальный размер я передаю тулбар флаг и в OnMove тулбара запрещаю ему выходить за черту фрейма но чего-то не работает. Подскажите как это можно реализовать. Спасибо.

Код

void CMyToolBar::OnMove(int x,int y )
{
    if (m_iMaxSize==1)
    {

        if ((y==0)&&(x==0))
        {
            CToolBar::OnMove(10,10);
            return;
        } 

        if ((y<0)&&(x<0))
        {
            CToolBar::OnMove(2,20);
        } 
        else
        {
            if (x==0)
            {
                CToolBar::OnMove(2,2);
            } 
            else
            {
                CToolBar::OnMove(x,20);
            }
        }
    } 
    else
    {
        CToolBar::OnMove(x,y);
            }

}

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


Эксперт
****


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

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



Цитата(Skulle @  5.2.2010,  14:05 Найти цитируемый пост)
Этот тулбар наслидуеться от обычного тулбара с перегружен некоторых функциями.

А если отключить эти некоторые функции (т.е. использовать обычный тулбар), он продолжает исчезать?

Добавлено @ 14:07
Кроме того
Цитата(Skulle @  5.2.2010,  14:05 Найти цитируемый пост)
как я вытаскиваю тулбар на фрейм 2
На картинке у тебя не фрейм а заголовок фрейма. А фрейм - это все окно. Что ты хочешь? Чтобы тулбар был пристыкован как-бы на заголовке (а не плавал)? Так не бывает.
Не могу понять что ты хочешь.
Да и OnMove у тебя какой-то левый. 



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


Новичок



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

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



Мне необходимо чтобы тулар плавал. И когда я его вытаскивают на заголовок чтобы он ставился под заголовком. Для этого я используется OnMove. Мне нужно сделать так как в офисе когда окно имеет максимальный размер и когда на его заголовок вытаскиваешь тулбар он ставится под заголовком.

Это сообщение отредактировал(а) Skulle - 5.2.2010, 14:39
PM MAIL   Вверх
Earnest
Дата 5.2.2010, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Это совершенно нормальное стандартное поведение тулбара. Только создать его нужно правильно, вернее, пристыковать (dock). И не нужен никакой производный класс (для этого). В стилях пристыковки нужно укaзать, что тулбар может и стыковаться и плавать. При это м не надо никаких OnMove, тем более что плавает тулбар не сам по себе а внутри специального окна, даже двух.


--------------------
...
PM   Вверх
Skulle
Дата 5.2.2010, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А можна какойто пример.
PM MAIL   Вверх
Earnest
Дата 8.2.2010, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Сделай визардом MFC-проект (SDI или MDI) со стандартным тулбаром и будет тебе пример.


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


Новичок



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

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



Я так делал но ничево не исменилось
PM MAIL   Вверх
Skulle
Дата 8.2.2010, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Почтенная Earnest. Я действительно нашел загон в своей функция которая забирала рамку вокруг тулбара. Я бы хотел вас пороситы чтобы вы подсказали в какую сторону копать чтобы правильно убрать рамку вокруг тулбара. Был бы очень благодарен если бы дали пример кода. smile user posted image
PM MAIL   Вверх
Earnest
Дата 9.2.2010, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Я не поняла ни твоей проблемы, ни какую рамку ты хочешь убрать. Изложи, пожалуйста, еще раз, внятно.


--------------------
...
PM   Вверх
Skulle
Дата 9.2.2010, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



user posted image

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

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

Код

        CFrameWnd *pWnd = (CFrameWnd*) AfxGetMainWnd();
        CWnd* pParent = m_pDockBar->GetParent();
        if( pParent->IsKindOf(RUNTIME_CLASS(CMiniFrameWnd)))
        {
            //pParent->ModifyStyle( WS_SIZEBOX | WS_CAPTION |WS_SYSMENU  , WS_BORDER , 0 );
            pParent->ModifyStyle(WS_OVERLAPPEDWINDOW , WS_CAPTION ,0);
        }


Это сообщение отредактировал(а) Skulle - 9.2.2010, 13:37
PM MAIL   Вверх
Earnest
Дата 10.2.2010, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Хм, а как оно будет плавать без заголовка (таскать его за что будешь)?
Цитата(Skulle @  9.2.2010,  12:47 Найти цитируемый пост)
огда вылезает проблема которая была описана с самого начала

Исчезает, что ли? А то ты много чего описал...
Боюсь, чтобы отбить заголовок (и заодно рамку) у фрейма тебе нужно переопределить сам класс CMiniВockFrameWnd. Где-то в MFC есть место, в которое можно подсунуть свой класс док-фрейма.

Цитата(Skulle @  9.2.2010,  12:47 Найти цитируемый пост)
чтобы вокруг него небыло фрейма.

Или ты вообще его убрать хочешь (CMiniВockFrameWnd)? Но так не получится: только придоченный тулбар может быть без фрейма. Ну т.е. можно поизвращаться, только тогда проще весь MFC с его панелями выкинуть и начать с нуля.




--------------------
...
PM   Вверх
Skulle
Дата 10.2.2010, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет Earnest. Спасибо тебе за твои ответы. Двигать я буду за GRIPPER. А когда я прячу рамку и вытаскивают его на заголовок он исчезает (точнее говоря не исчезает а перемещается по координате Y = -22). Может есть какой способ уменьшить высоту заголовка? Или когда я ставлю стиль окна WS_SIZEBOX нужно запретить изменять размер пользователю? А как можно сделать так как MS WORD что тулбар можно дотягивать только на панель заголовка а на нее и за ней не поставишь? Посмотри пожалуйста и если сможешь дай какой-то пример кода.
PM MAIL   Вверх
Earnest
Дата 10.2.2010, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



По-моему, ты хочешь странного. Но это твое право. Мой опыт показывает, что переопределение стандартного поведения весьма геморройно и чревато разными глюками. Опять же, по-моему, раз хочешь совсем не MFC-шного поведения панелей, лучше отказать от MFC-реализации, больше проблем, чем помощи. Пиши уж с нуля.

Цитата(Skulle @  10.2.2010,  12:50 Найти цитируемый пост)
 А как можно сделать так как MS WORD что тулбар можно дотягивать только на панель заголовка а на нее и за ней не поставишь?
Да неужели? Легко... сначала панель, правда пытается пристыковаться, а потом перемещается куда тащишь. На заголовок, действительно, сложно поставить - там еще пристыковка действует, а за ним - нет проблем. И заголовок у панелей есть. Я имею в виду 2003 офис, не меняла на более новый, нема зачем.



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


 




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


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

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