Есть панель инструментов на форме dialog в MFC (как была создана - это отдельная история).
Как сделать так, чтобы при нажатии на кнопку панели эта кнопка оставалась в "нажатом" положении, пока ее не "отожмут"?
(Есть такая функция, как GetDlgItem(ID_MY_BUTTON), она возвращает указатель на объект, но класса Wnd), а как можно обратиться к свойствам этой кнопки?
MFC и ToolBar
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
А вот зря Вы не написали, как была создана панель
- не пришлось бы гадать.
Скорее всего, тулбар был добавлен как ActiveX control, тогда у него должен быть редактор свойств, через который, собственно, и задаются кнопки. Просто надо указать для нужно кнопки стиль tbrCheck. По кр.мере так это делается для Microsoft Toolbar Control (v.5 и 6)

Скорее всего, тулбар был добавлен как ActiveX control, тогда у него должен быть редактор свойств, через который, собственно, и задаются кнопки. Просто надо указать для нужно кнопки стиль tbrCheck. По кр.мере так это делается для Microsoft Toolbar Control (v.5 и 6)
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Непосредственный ответ на вторую часть вопроса:
((CButton*)GetDlgItem(...))->AnyMethodOfCButtonClass();
((CButton*)GetDlgItem(...))->AnyMethodOfCButtonClass();
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
А добавлена панель инструментов так: в OnInitDialog такой код:
//Добавляем панель инструментов
ToolBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_BORDER_BOTTOM);
ToolBar.LoadToolBar(IDR_TOOLBAR1);
CRect rcClientStart;
CRect rcClientNow;
GetClientRect(rcClientStart);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST,
0, reposQuery, rcClientNow);
CPoint ptOffset(rcClientNow.left - rcClientStart.left,
rcClientNow.top - rcClientStart.top);
CRect rcChild;
CWnd* pwndChild = GetWindow(GW_CHILD);
while (pwndChild)
{
pwndChild->GetWindowRect(rcChild);
ScreenToClient(rcChild);
rcChild.OffsetRect(ptOffset);
pwndChild->MoveWindow(rcChild, FALSE);
pwndChild = pwndChild->GetNextWindow();
}
CRect rcWindow;
GetWindowRect(rcWindow);
rcWindow.right += rcClientStart.Width() - rcClientNow.Width();
rcWindow.bottom += rcClientStart.Height() - rcClientNow.Height();
MoveWindow(rcWindow, FALSE);
// Положение панелей
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
Если надо, чтобы кнопка на панели после нажатия оставалась в этом положении - это какой метод CButton надо использовать?
Я что-то все пересмотрела - ничего похожего не нашла....
В CBuilder - это свойство, а вот в MFC как его достать...
//Добавляем панель инструментов
ToolBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_BORDER_BOTTOM);
ToolBar.LoadToolBar(IDR_TOOLBAR1);
CRect rcClientStart;
CRect rcClientNow;
GetClientRect(rcClientStart);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST,
0, reposQuery, rcClientNow);
CPoint ptOffset(rcClientNow.left - rcClientStart.left,
rcClientNow.top - rcClientStart.top);
CRect rcChild;
CWnd* pwndChild = GetWindow(GW_CHILD);
while (pwndChild)
{
pwndChild->GetWindowRect(rcChild);
ScreenToClient(rcChild);
rcChild.OffsetRect(ptOffset);
pwndChild->MoveWindow(rcChild, FALSE);
pwndChild = pwndChild->GetNextWindow();
}
CRect rcWindow;
GetWindowRect(rcWindow);
rcWindow.right += rcClientStart.Width() - rcClientNow.Width();
rcWindow.bottom += rcClientStart.Height() - rcClientNow.Height();
MoveWindow(rcWindow, FALSE);
// Положение панелей
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
Если надо, чтобы кнопка на панели после нажатия оставалась в этом положении - это какой метод CButton надо использовать?
Я что-то все пересмотрела - ничего похожего не нашла....
В CBuilder - это свойство, а вот в MFC как его достать...
С уважением, Светлана.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Для изменения стиля кнопки тулбара следует использовать метод CToolBar::SetButtonStyle.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.