Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать сразу два тулбара? 
:(
    Опции темы
thunderfox
Дата 10.9.2005, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть приложение типа "диалог". Хочу сделать две отдельные панели toolbar. Создаю первую:
CToolBarCtrl T1;
T1.Create(WS_VISIBLE | WS_CHILD, Rect(10, 10, 100, 40), ParentOwner, MY_CTOOLBARCTRL);
Добавляю кнопочки, картинки, в общем, все работает. Теперь хочу создать второй тулбар.
CToolBarCtrl T2;
А если написать
T2.Create(WS_VISIBLE | WS_CHILD, Rect(10, 60, 100, 100), ParentOwner, MY_CTOOLBARCTRL2);
даже без всяких кнопочек, исчезает и первый тулбар, и второй. Что делать?
PM MAIL   Вверх
Coocky
Дата 12.9.2005, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Попробуй поиграться с
CWnd::RepositionBars();


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Coocky
Дата 12.9.2005, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



У меня получилось, вот пример smile (на ListCtrl не обращай внимание-это я для быстроты присобачил к проекту) smile

Присоединённый файл ( Кол-во скачиваний: 36 )
Присоединённый файл  ListCtrlExample_I.rar 44,77 Kb


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Javgen
Дата 18.10.2005, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Может подскажешь как с ToolBarом работать что бы его можно было переносить
PM MAIL   Вверх
Coocky
Дата 19.10.2005, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Цитата

Итак, панель инструментов это окно. Более того, панель инструментов это дочернее окно. Для создания окна, необходимо в классе CMainFrame создать экземпляр класса CToolBar, а затем вызвать метод Create. При создании экземпляра класса CToolBar по умолчанию устанавливаются следующие размеры в пикселах: кнопка - 23х22, рисунок - 16х15, высота верхней и нижней рамки - 3 пиксела. Когда объект CToolBar создан, необходимо на базе предопределенного оконного класса TOOLBARCLASSNAME создать соответсвующее окно Windows - это, как раз-то, выполняет метод Create класса CToolBar. Лучше всего, обратиться к методу Create класса CToolBar в обработчике сообщений WM_CREATE класса CMainFrame (обычно, это обработчик OnCreate класса CMainFrame). Собственно говоря, для Вас эта технология не нова, Вы часто использовали ее при создании элементов управления (сначала создавали объект необходимого класса, а затем вызывали его метод Create).

BOOL Create( CWnd* pParentWnd,
DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP,
UINT nID = AFX_IDW_TOOLBAR );
Параметр pParentWnd должен содержать адрес  родителя,
парметр dwStyle  - стиль панели инструментов,
nID - идентификатор панели инструментов.

И здесь, необходимо отметить, что панель инструментов настоящая "стиляга". Кроме стилей, общих для всех окон, существует "немножко" и своих собственных...


Стили панели инструментов
CBRS_TOP (CBRS_BOTTOM) Расположить панель вверху (внизу) рабочей области родительского окна
CBRS_NOALIGN Если изменились родительские размеры, размеры панели не переопределяться
CBRS_TOOLTIPS Выводить краткое описание кнопок (вспомните, комментарий после \n, который Вы задавали при создании кнопки)
CBRS_SIZE_DYNAMIC Разрешает пользователю при помощи мыши менять размер панели инструментов, если она находиться в плавающем состоянии
CBRS_SIZE_FIXED Запрещает менять размер панели инструментов
CBRS_FLOATING Панель инструментов плавающая
CBRS_FLYBY В строке состояния будет отображаться информация о кнопке
CBRS_HIDE_INPLACE Делает панель инструментов невидимой
CBRS_ALIGN_TOP (CBRS_ALIGN_BOTTOM) Панель управления пристыкуется к верхней (нижней) стороне рабочей области фрейма
CBRS_ALIGN_LEFT (CBRS_ALIGN_RIGHT) Панель управления пристыкуется к левой (правой) стороне рабочей области фрейма
CBRS_ALIGN_ANY Панель управления может пристыковаться к любой стороне рабочей области фрейма
CBRS_BORDER_TOP (CBRS_BORDER_BOTTOM) Добавляет рамку, которая очерчивает верхний (нижний) край панели инструментов
CBRS_BORDER_LEFT (CBRS_BORDER_RIGHT) Добавляет рамку, которая очерчивает левый (правый) край панели инструментов
CBRS_FLOAT_MULTI В окне минифрейма могут распологаться несколько панелей управления
CCS_ADJUSTABLE Пользователь может изменять конфигурацию элемента управления
CСS_TOP (CСS_BOTTOM) Элемент управления должен быть расположен в верхней (нижней) части рабочей области окна
ССS_NODIVIDER В верхней части элемента управления не надо рисовать разделитильную линию (ширина линии 2 пиксела)
CСS_NOHILITE В верхней части элемента управления не надо рисовать разделитильную линию шириной 1 пиксел
CCS_NOMOVEY При получении сообщения WM_SIZE элемент управления может изменять свои размеры и перемещаться только горизонтально. Стиль нельзя использовать совместно со стилем CCS_NOSIZE
CСS_NOPARENTALIGN Элемент управления не будет автоматически перемещаться в верхнюю или нижнюю часть родительского окна
CСS_NORESIZE Размеры объектов, заданные по умолчанию, использоваться не будут, соответсвенно, необходимо будет явно задать размеры элементов управления.


Однако, при генерации кода AppWizard не использует метод Create, а использует его расширенную версию - 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); -
pParentWnd - адрес родителя,
dwCtrlStyle - задает стили кнопок,
dwStyle - стиль панели инструментов,
rcBorders - задает размеры прямоугольника, определяющего положение и размер
панели инструментов (при нулевых значениях используется значение по умолчанию)

Параметр dwCtrlStyle может принимать следующие значения:

TBSTYLE_BUTTON Стандартная кнопка
TBSTYLE_SEP Разделитель между группами кнопок (отступ)
TBSTYLE_CHECK Кнопка с фиксацией (соответсвует пунктам меню с "галочкой")
TBSTYLE_GROUP Отмечает начало группы стандартных кнопок
TBSTYLE_CHECKGROUP Отмечает начало группы кнопок с фиксацией (аналогично "радио"-переключателей). 
TBSTYLE_TOOLTIPS Панель инструментов может создавать и управлять всплывающей подсказкой (tooltip). Тот случай, когда Вам необходимо будет самим написать обработчик извещения от этого элемента управления
TBSTYLE_WRAPABLE Кнопки на панели инструментов могут распологаться в несколько линий

Если Вы создали объект класса CToolBar и вызвали метод CreateEx (или Create), Вам необходимо подгрузить пиктограммы кнопок из ресурсов. Для этого в классе CToolBar предусмотрены следующие методы:


BOOL LoadToolBar( LPCTSTR lpszResourceName );
и
BOOL LoadToolBar( UINT nIDResource ); - метод загружает панель
инструментов определенную идентификатором nIDResource.
Сопоставление кнопок с образами и командами осуществляется автоматически.

void SetSizes( SIZE sizeButton, SIZE sizeImage ); - Устанавливает размер
кнопок панели инструментов, задаваемій параметром sizeButton,  при этом
параметр sizeImage должен содержать размер образов, зафиксированный
в соответсвующем битовом массиве. Размеры кнопок задаются, исходя из
размеров образов, плюс 7 пикселов для ширины и 6 пикселов для высоты.
Раземры панели инструментов устанавливаются автоматически.

void SetHeight( int cyHeight ); - задает высоту (в пикселах)
панели инструментов. Вы можете обратиться к данному методом,
к примеру, если после использования метода SetSize Вас не устраивает
вариант автоматического задания высоты панели инструментов .

void SetButtonStyle( int nIndex, UINT nStyle ); - задает стиль кнопки,
сепаратора или группы кнопок. Параметр nIndex - задает индекс кнопки, а
параметр nStyle - стиль кнопки. Ниже в таблице представлены возможные стили.

TBBS_BUTTON Стиль стандартной кнопки (действует по умолчанию)
TBBS_SEPARATOR Разделитель (он же, сепаратор)
TBBS_CHECKBOX Кнопка-переключатель (во вдавленном состоянии активна)
TBBS_GROUP Задает начало группы кнопок
TBBS_CHECKGROUP  Задает начало группы кнопок-переключателей

UINT GetButtonStyle( int nIndex ) const; - метод позволяет определить
текущий стиль кнопки (сепаратора). Параметр nIndex определяет индекс кнопки
(сепаратора), чей стиль необходимо узнать. Возвращаемое значение - стиль
кнопки.

UINT GetItemID( int nIndex ) const; - позволяет определить
идентификатор команды сопоставленной с кнопкой nIndex. Если nIndex
задает сепаратор, то вовзращаемое значение равняется ID_SEPARATOR.

int CommandToIndex( UINT nIDFind ); - возвращает
индекс первой найденой кнпоки панели инструментов, чей идентификатор
совпадает с nIDFInd.

BOOL SetButtonText( int nIndex, LPCTSTR lpszText ); - выводит
надпись на кнопке. Параметр nIndex - определяет индекс кнопки,
lpszText  - задает текст.

CString GetButtonText( int nIndex ) const;
и
void GetButtonText( int nIndex, CString& rString ) const; -
позволяют получить текст rString, ассоциированный с кнопкой nIndex.

CToolBarCtrl& GetToolBarCtrl( ) const;-ссылка на объект класса
CToolBarCtrl

Естественно, полное описание всех методов класса CToolBar Вы можете найти в MSDN.



Цитата

С помощью элементов управления класса CToolBarCtrl возможно осуществить более тонкую настройку панели инструментов. Чтобы воспользоваться методами класса CToolBarCtrl необходимо, либо непосредственно создать окно CToolBarCtrl, либо создать панель инструментов на основе класа CToolBar. а затем получить доступ к элементам объекта CToolBarCtrl, вызвав функцию этого класса GetToolBarCtrl.

Каждая кнопка панели инструментов имеет ассоциированную с ней структуру TBBUTTON, которая содержит полную информацию о кнопке. Ниже приведено описание структуры.

typedef struct _TBBUTTON {
    int iBitmap; //номер рисунка
    int idCommand; //идентификатор команды (для сепаратора равен нулю)
    BYTE fsState; //комбинация флагов состояния кнопки
    BYTE fsStyle; //комбинация стилей кнопки
    DWORD dwData; //значение определяемое приложением
    INT_PTR iString; //текст кнопки
} TBBUTTON, NEAR* PTBBUTTON, FAR* LPTBBUTTON;

TBSTATE_CHECKED Кнопка имеет стиль TBSTYLE_CHECKED (кнопка-переключатель (с "залипанием"))
TBSTATE_ENABLED Кнопка доступна. При отсутсвии данного свойства, кнопка отображается серым цветом
TBSTATE_HIDDEN Кнопка не видима
TBSTATE_INDETERMINATE Кнопка отображается серым цветом
TBSTATE_PRESSED  Кнопка изображается в нажатом состоянии
TBSTATE_WRAP (действует совместно с TBSTATE_ENABLED) Если после данной кнопки существуют другие кнопки, то они выводяться с новой строки

Зная о возможностях даной структуры, Вы можете с помощью метода

BOOL GetButton( int nIndex, LPTBBUTTON lpButton ) const - узнать всю
информацию lpButton, относительно интересующей Вас кнопки nIndex

Еще раз замечу, что класс CToolBarCtrl предоставляет большое количество методов, для работы с панелью инструментов. Существует группа методов IsButton..., которая позволяет, в обход явного использования структуры TBBUTTON, получить информацию о текущем состоянии любой из кнопок. Динамическое (т.е. во время выполнения приложения) добавление, удаление, изменение состояния кнопок - все это возможно благодаря использованию методов класса CToolBarCtrl. За более детальной справкой обращайтесь в MSDN.

Цитата

Некоторые методы классов CFrameWnd и CControlBar для работы с панелью инструментов
Для работы с панелью инструментов, существует ряд методов, которые не относяться к классам CToolBar и CToolBarCtrl, но тем не менее, позволяют настроить работу с панелью инструментов. Рассмотрим эти методы.

void CControlBar::EnableDocking( DWORD dwStyle ); - метод класса
CControlBar разрешает привязать панель управления (в нашем случае,
панель инструментов)  к одной из сторон родительского фрейма, причем
эта сторона должна быть доступна для привязки. Если сторона, передаваемая
в качестве параметра dwStyle, и сторона, разрешенная для привязки, фрейма
не совпадают, то панель управления не может быть привязана к родительскому
фрейму. Если значение параметра dwStyle равно нулю, то панель управления
не будет пристыкована.

CBRS_ALIGN_TOP (CBRS_ALIGN_BOTTOM) Панель управления пристыкуется к верхней (нижней) стороне рабочей области фрейма
CBRS_ALIGN_LEFT (CBRS_ALIGN_RIGHT) Панель управления пристыкуется к левой (правой) стороне рабочей области фрейма
CBRS_ALIGN_ANY Панель управления может пристыковаться к любой стороне рабочей области фрейма

Итак, привязка панели инструментов к родительскому фрейму зависит не только от самой панели, но и от ее родителя. Слудеующие методы класса CFrameWnd отвечают за работу с панелями управления:

void CFrameWnd::EnableDocking( DWORD dwDockStyle ); - разрешает привязку
панели управления к одной или нескольким сторонам фрейма. Количество
сторон задаетяс с помощью параметра dwDockStyle. который может принимать
одно или несколько из значений из таблицы приведенной выше.

void CFrameWnd::DockControlBar( CControlBar * pBar,
UINT nDockBarID = 0, LPCRECT lpRect = NULL ); -
привязывает панель управления pBar к одной из сторон текущего фрейма, которая
задается параметром nDockBarID и может быть нулем (привязка будет
осуществляться к любой из сторон, определенных ранее в методе EnableDocking
класса CControlBar и CFrameWnd) или принимать одно из значений из приведенных
ниже в таблице. Параметр lpRect определяет в координатах экрана, где вне
рабочей области фрейма привязано окно, содержащее плаващую панель
элементов управления.

AFX_IDW_DOCKBAR_TOP Привязка к верхней стороне фрейма
AFX_IDW_DOCKBAR_BOTTOM Привязка к нижней стороне фрейма
AFX_IDW_DOCKBAR_LEFT Привязка к левой стороне фрейма
AFX_IDW_DOCKBAR_RIGHT Привязка к правой стороне фрейма

CFrameWnd* FloatControlBar( CControlBar * pBar, CPoint point,
DWORD dwStyle = CBRS_ALIGN_TOP ); -
переводит панель управления pBar в плавающее состояние.
Параметр point задает координаты точки, в которой будет находиться левый
верхний угол панели управления. Параметр dwStyle определяет стиль
выравнивания панели управления и ориентации внутри нового фрейма. dwStyle
может принимать значения приведенные в первой таблице (начинаются с
префикса CBRS_) за исключением стиля CBRS_ALIGN_ANY.

virtual void RecalcLayout( BOOL bNotify = TRUE );  - перепозиционирует
панели управления текущего фрейма. Параметр bNotify определяет, получит ли
активизированный по месту элемент извещение при изменении размещения.
Если Вы хотите управлять отображением и поведением панелей управления
осле изменения компоновки фрейма, то необходимо переопределить эту
функцию в своем классе.




Присоединённый файл ( Кол-во скачиваний: 24 )
Присоединённый файл  ExampleTBwE.rar 35,72 Kb


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


 




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


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

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