Переключатель цвета
кнопки
Автор: Benoit Dufort.
Пример показывает как реализовать некоторые
возможности приложений MS Office. А именно как в Excel
при построении гистограммы выбирать тип графика,
а также как выбирать текущий цвет вывода текста.
Достаточно включить файлы ComboBtn.h и ComboBtn.cpp в Ваш
проект и создать объект элемента управления.
Скачать пример и исходник -
85KB
// mainfrm.h : интерфейс класса CMainFrame
//
/////////////////////////////////////////////////////////////////////////////
#include "combobtn.h"
class CMainFrame : public CMDIFrameWnd
{
DECLARE_DYNAMIC(CMainFrame)
public:
CMainFrame();
// Attributes
public:
CButtonCombo m_colorBtn;
CButtonCombo m_bitmapBtn;
// Operations
public:
// Implementation
public:
virtual ~CMainFrame();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected: // control bar embedded members
CStatusBar m_wndStatusBar;
CToolBar m_wndToolBar;
// Generated message map functions
protected:
//{{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
// в mainfrm.cpp
// кнопки тулбара - IDs это команды кнопок
static UINT BASED_CODE buttons[] =
{
// тот же порядок, что и в битмапе 'toolbar.bmp'
ID_FILE_NEW,
ID_FILE_OPEN,
ID_FILE_SAVE,
ID_SEPARATOR,
ID_EDIT_CUT,
ID_EDIT_COPY,
ID_EDIT_PASTE,
ID_SEPARATOR,
ID_SEPARATOR, // Цветная кнопка
ID_SEPARATOR,
ID_SEPARATOR, // Bitmap кнопка
ID_SEPARATOR,
ID_FILE_PRINT,
ID_APP_ABOUT,
};
static UINT BASED_CODE indicators[] =
{
ID_SEPARATOR, // статус бар
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
#define IDC_BTNCOLOR 1000
#define IDC_BTNBITMAP 1001
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.Create(this) ||
!m_wndToolBar.LoadBitmap(IDR_MAINFRAME) ||
!m_wndToolBar.SetButtons(buttons,
sizeof(buttons)/sizeof(UINT)))
{
TRACE("Failed to create toolbar\n");
return -1; // ошибка создания
}
m_wndToolBar.SetButtonInfo(8, IDC_BTNCOLOR, TBBS_SEPARATOR, 48 );
m_wndToolBar.SetButtonInfo(10, IDC_BTNBITMAP, TBBS_SEPARATOR, 48 );
m_wndToolBar.SetButtonInfo(9, ID_SEPARATOR, TBBS_SEPARATOR, 12 );
m_wndToolBar.SetButtonInfo(11, ID_SEPARATOR, TBBS_SEPARATOR, 12 );
CRect rect;
m_wndToolBar.GetItemRect(8, &rect);
CString sText = "";
char buffer[5];
for (int i = 0; i < 72; i++)
sText += "Color " + CString(itoa(i, buffer, 10)) + ((i < 71)? ";" : "");
m_colorBtn.Create(rect, CSize(8, 6), CSize(16, 15), &m_wndToolBar, IDC_BTNCOLOR);
// Если Вам необходимо сделать текст для каждого цвета, используйте:
// m_colorBtn.Create(rect, CSize(8, 6), CSize(16, 15), &m_wndToolBar, IDC_BTNCOLOR, sText);
sText.LoadString(IDS_STRINGCHART);
m_wndToolBar.GetItemRect(10, &rect);
m_bitmapBtn.Create(rect, CSize(4, 4), IDB_CHART, 14, &m_wndToolBar, IDC_BTNBITMAP, sText);
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE("Failed to create status bar\n");
return -1; // ошибка создания
}
return 0;
}
|