Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ToolBar в диалоге и BringWindowToTop

7.8K
01 апреля 2007 года
simplemortal
62 / / 09.02.2007
Привет всем.
Мне нужно в диалоговом окне отобразить ToolBar.
 
Код:
if (!m_wndToolBar.Create(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
        | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
        !m_wndToolBar.LoadToolBar(IDR_TOOLBAR1))
{
    TRACE0("Failed to create toolbar\n");
    return -1;      // fail to create
}
    DockControlBar(&m_wndToolBar);

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

И ещё вопрос:
На этапе построения я ложу на диалог Static без текста (он играет роль рамки), затем ложу на него различные элементы управления, но они оказываются под Static’ом. После запуска программы, мне приходится использовать функцию BringWindowToTop() чтобы получить к ним доступ. Но когда я использую эту функцию по отношению к List Control и Tree Control, они вообще куда-то пропадают.:mad:
Можно ли управлять порядком расположения на этапе построения диалога?
Почему List Control и Tree Control так странно реагируют на BringWindowToTop()?
ЗАРАНЕЕ БЛАГОДАРЮ.
355
01 апреля 2007 года
<SCORP>
786 / / 21.10.2006
на диалог придокать тулбар не получиться, потому что докинг реализован только в CFrameWnd, а диалог наследуется от .

по поводу статика -- тебе не статик пользовать нужно, а GroupBox
320
01 апреля 2007 года
m_Valery
1.0K / / 08.01.2007
Цитата: simplemortal
...
И ещё вопрос:
На этапе построения я ложу на диалог Static без текста (он играет роль рамки), затем ложу на него различные элементы управления, но они оказываются под Static’ом...


Чтоб элементы управления не оказывались под Static'ом попробуй
поставь ему свойство Simple в true.

7.8K
03 апреля 2007 года
simplemortal
62 / / 09.02.2007
Все получилось.
Рамку сделал из Picture Control, он если без рисунка, то "прощёлкивается" насквозь.

А подобие ToolBar'а:
рельефную рамку из того же Picture Control, а не нём кнопки с рисунками.
355
03 апреля 2007 года
<SCORP>
786 / / 21.10.2006
создаёшь SDI приложение, в качестве вьюва -- CFormView и не мучаешься. получается обычное нормальное окно с рамкой, менюшкой и тулбаром, в внутри -- диалог с контролами
320
03 апреля 2007 года
m_Valery
1.0K / / 08.01.2007
Ну у тебя и задачки.:D Всюду ToolBar используют действительно в однодокументном приложении.Но сделал.Вот...:D
1) Рисуешь сам ToolBar в ресурсах.
2) В класс диалога добавляешь переменную CToolBar m_toolbar;
3) Для диалога в Messages ставишь ф-ию OnCreate,она имеет вид
Код:
int Ca_dialog1Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CDialog::OnCreate(lpCreateStruct) == -1)
        return -1;
   
    m_toolbar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD|WS_VISIBLE|CBRS_ALIGN_TOP| CBRS_TOP| CBRS_TOOLTIPS);
    m_toolbar.LoadToolBar(IDR_TOOLBAR1);
    CRect rect1;
    CRect rect2;
    GetClientRect(rect1);
    RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST,
                  0, reposQuery, rect2);
    CPoint point(rect2.left - rect1.left,
                    rect2.top - rect1.top);
    CRect  rect;
    CWnd* pwndChild = GetWindow(GW_CHILD);
    while (pwndChild)
    {
        pwndChild->GetWindowRect(rect);
        ScreenToClient(rect);
        rect.OffsetRect(point);
        pwndChild->MoveWindow(rect, FALSE);
        pwndChild = pwndChild->GetNextWindow();
    }
    RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
    return 0;
}

Потом уже можешь добавлять обработчики кнопок ToolBara.
7.8K
04 апреля 2007 года
simplemortal
62 / / 09.02.2007
<SCORP>, m_Valery спасибо большое!
m_Valery, ты гений!
:D :D :D
320
04 апреля 2007 года
m_Valery
1.0K / / 08.01.2007
Спасибо на добром слове.:)
После создания ToolBar в диалоге тут еще одна проблемка возникнет.
Как сделать чтоб он работал ? Ему не добавишь обрабртчики через
Add Event Handler.Тут надо поступить так:
1) Добавить в класс диалога переменную CMenu menu;
2)Создать меню в ресурсах с таким же количеством пунктов,как и у
ToolBar
3)В OnInitDialog написать
 
Код:
...
menu.LoadMenu(IDR_MENU1);
...

Ничего другого не писать ,я имею ввиду SetMenu(&menu) и DrawMenuBar(), тогда меню будет только в ресурсах,а на диалоге его не будет видно.
4)Добавить для пунктов меню обработчики (Add Event Heandler )
5) Поменять ID в Properties , т.е. поставить для ToolBar id-шники от пунктов меню.Теперь ToolBar полностью рабочий:)
7.8K
04 апреля 2007 года
simplemortal
62 / / 09.02.2007
m_Valery, благодарю за заботу, но до этого я уже догадался.
Я таким образом связал некоторые пункты Popup меню с твоим гениальным тулбаром.:)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог