Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
Сдается мне, что надо для верхнего - убрать флаг cbrs_align_bottom 24.01.08 20:23 Число просмотров: 2811
Автор: Neznaika <Alex> Статус: Member
|
|
<programming>
|
[MFC] Затруднение с сохранением тулбаров (docking'а) 24.01.08 17:21
Автор: Heller <Heller> Статус: Elderman Отредактировано 24.01.08 17:24 Количество правок: 1
|
BOOL CMainFrame::InitObjects() {
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED, CRect(0, 0, 0, 0)/*, IDC_MISC*/)|!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) {
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
// TODO: Remove this if you don't want tool tips or a resizeable toolbar
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED | CBRS_FLOAT_MULTI);
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM);
EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM);
DockControlBar(&m_wndToolBar, AFX_IDW_DOCKBAR_TOP);
m_wndToolBar.SetButtonStyle (m_wndToolBar.CommandToIndex(IDM_FILTER), TBBS_CHECKBOX);
m_wndToolBar.GetToolBarCtrl().CheckButton(m_wndToolBar.CommandToIndex(IDM_FILTER), FALSE);
VERIFY(m_pToolBar->SubclassWindow(m_wndToolBar.m_hWnd));*/
m_pCBClient = new CTrueCB;
CRect rc, rc1;
UINT ui = m_wndToolBar.CommandToIndex(ID_CBOX);
UINT ui1= m_wndToolBar.CommandToIndex(ID_CBOX1);
m_wndToolBar.GetItemRect(ui, rc);
m_wndToolBar.GetItemRect(ui1, rc1);
rc.bottom= rc.top + rc.Height()*16;
rc.right = rc1.right;
VERIFY(m_pCBClient->Create(CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_VSCROLL, rc, &m_wndToolBar, ID_CBOX));
m_pCBClient->EnableWindow(FALSE);
m_wndToolBar.ShowWindow(SW_SHOW);
//HERE IS NEW CODE
m_wndTabsBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER |
CBRS_TOOLTIPS | CBRS_FLOAT_MULTI | CBRS_FLYBY | CBRS_SIZE_FIXED, CRect(0, 0, 0, 0));
m_wndTabsBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED | CBRS_FLOAT_MULTI);
m_wndTabsBar.LoadToolBar(IDS_TABSBAR);
m_wndTabsBar.EnableDocking(CBRS_ALIGN_BOTTOM);
DockControlBar(&m_wndTabsBar, AFX_IDW_DOCKBAR_BOTTOM);
m_wndTabsBar.ShowWindow(SW_SHOW);
m_wndToolBar.SetWindowText("Панель инструментов");
m_wndToolBar.SetWindowText("Экраны");
//END OF NEW CODE
LoadBarState("BarsState");
return TRUE;
}
---
m_wndToolBar и m_wndTabsBar определены как CToolBar.
До того как добавили новый код с m_wndTabsBar все было хорошо. После добавления нового тулбара началась проблема - верхний тулбар (m_wndToolBar) после загрузки из LoadBarState переносится в низ экрана.
Записи реестра прикладываю. old.reg - это ключи реестра до добавления m_wndTabsBar. new.reg - после добавления. Что написано в реестре я сам не понимаю, но чувствуется, что оба тулбара имеют один идентификатор (0xe800, если это он в реестре). Подскажите пожалуйста что-нибудь.
old.reg new.reg
|
|
Сдается мне, что надо для верхнего - убрать флаг cbrs_align_bottom 24.01.08 20:23
Автор: Neznaika <Alex> Статус: Member
|
|
| |
Проблема разрешилась 25.01.08 19:07
Автор: Heller <Heller> Статус: Elderman Отредактировано 25.01.08 19:22 Количество правок: 1
|
Добавил идентификаторы тулбаров в CreateEx, но с достаточно большой разницей. Разницы в 1-2 было не достаточно (каждый как я понял жрет отдельный идентификатор для каждого из возможных своих docking'ов). В общем, все теперь в норме.
Первоначальный ответ ниже сохраняю для истории - это уже не актуально.
-----------
Не помогает. К тому же дать пользователю право цеплять тулбары куда угодно весьма полезно.
Вообще CreateEx определяется как
BOOL CreateEx(CWnd* pParentWnd, DWORD dwCtrlStyle = TBSTYLE_FLAT, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP, CRect rcBorders = CRect(0, 0, 0, 0), UINT nID = AFX_IDW_TOOLBAR);
Есть подозрение, что последний параметр указывает на ID тулбара, который как раз и сохраняется. Пробовал присваивать разные ID'шники тулбарам относительно AFX_IDW_TOOLBAR, но тогда при загрузке прога падает на каком-то из внутренних ASSERT'ов. Я имею ввиду при загрузке настроек. С чистым реестром все грузится нормально, но после закрытия проги и загрузки вновь начинает падать. Где именно что неассертится смогу сказать только в понедельник.
|
|
|