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 в диалоге и BringWindowToTop
Мне нужно в диалоговом окне отобразить ToolBar.
Код:
После создания нужно присоединить этот ToolBar к окну, но функция DockControlBar работает в диалоговом окне.
Может быть кто знает как отобразить ToolBar в диалоговом окне?
И ещё вопрос:
На этапе построения я ложу на диалог Static без текста (он играет роль рамки), затем ложу на него различные элементы управления, но они оказываются под Static’ом. После запуска программы, мне приходится использовать функцию BringWindowToTop() чтобы получить к ним доступ. Но когда я использую эту функцию по отношению к List Control и Tree Control, они вообще куда-то пропадают.:mad:
Можно ли управлять порядком расположения на этапе построения диалога?
Почему List Control и Tree Control так странно реагируют на BringWindowToTop()?
ЗАРАНЕЕ БЛАГОДАРЮ.
по поводу статика -- тебе не статик пользовать нужно, а GroupBox
Цитата: simplemortal
...
И ещё вопрос:
На этапе построения я ложу на диалог Static без текста (он играет роль рамки), затем ложу на него различные элементы управления, но они оказываются под Static’ом...
И ещё вопрос:
На этапе построения я ложу на диалог Static без текста (он играет роль рамки), затем ложу на него различные элементы управления, но они оказываются под Static’ом...
Чтоб элементы управления не оказывались под Static'ом попробуй
поставь ему свойство Simple в true.
Рамку сделал из Picture Control, он если без рисунка, то "прощёлкивается" насквозь.
А подобие ToolBar'а:
рельефную рамку из того же Picture Control, а не нём кнопки с рисунками.
создаёшь SDI приложение, в качестве вьюва -- CFormView и не мучаешься. получается обычное нормальное окно с рамкой, менюшкой и тулбаром, в внутри -- диалог с контролами
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;
}
{
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.
m_Valery, ты гений!
:D :D :D
После создания ToolBar в диалоге тут еще одна проблемка возникнет.
Как сделать чтоб он работал ? Ему не добавишь обрабртчики через
Add Event Handler.Тут надо поступить так:
1) Добавить в класс диалога переменную CMenu menu;
2)Создать меню в ресурсах с таким же количеством пунктов,как и у
ToolBar
3)В OnInitDialog написать
Код:
...
menu.LoadMenu(IDR_MENU1);
...
menu.LoadMenu(IDR_MENU1);
...
Ничего другого не писать ,я имею ввиду SetMenu(&menu) и DrawMenuBar(), тогда меню будет только в ресурсах,а на диалоге его не будет видно.
4)Добавить для пунктов меню обработчики (Add Event Heandler )
5) Поменять ID в Properties , т.е. поставить для ToolBar id-шники от пунктов меню.Теперь ToolBar полностью рабочий:)
Я таким образом связал некоторые пункты Popup меню с твоим гениальным тулбаром.:)