利用BCGControlBar,打造工具栏上的时间控件

 在BCGControlBar中,有CBCGPToolbarDateTimeCtrl这样一个类。此类提供了工具栏上的时间控件使用方法。

在BCG的例子ToolbarDateTimePicker中,已经提供了此类的应用。

首先,制作你的工具栏:

利用BCGControlBar,打造工具栏上的时间控件_第1张图片

完成后,在资源文件中可以看到类似:

#define ID_DATE_BEGIN                   32820
#define ID_TIME_BEGIN                   32822
#define ID_DATE_END                     32824
#define ID_TIME_END                     32825

定义ID_VIEW_CUSTOMIZE,对应函数OnViewCustomize。

利用BCGControlBar,打造工具栏上的时间控件_第2张图片

在MainFrm.cpp中加入:

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
 //{{AFX_MSG_MAP(CMainFrame)
 //}}AFX_MSG_MAP
 ON_COMMAND(ID_VIEW_CUSTOMIZE, OnViewCustomize)
 ON_REGISTERED_MESSAGE(BCGM_RESETTOOLBAR, OnToolbarReset)
END_MESSAGE_MAP()

实现这两个函数:

void CMainFrame::OnViewCustomize()
{
	//------------------------------------
	// Create a customize toolbars dialog:
	//------------------------------------
	CBCGPToolbarCustomize* pDlgCust = new CBCGPToolbarCustomize (this,
		TRUE /* Automatic menus scaning */
		);
	
	//----Exmaple----//
	
	CBCGPToolbarDateTimeCtrl dateButton (ID_DATE_BEGIN,
		CImageHash::GetImageOfCommand (ID_DATE_BEGIN, FALSE));
	pDlgCust->ReplaceButton (ID_DATE_BEGIN, dateButton);
	
	
	CBCGPToolbarDateTimeCtrl timeButton (ID_TIME_BEGIN,
		CImageHash::GetImageOfCommand (ID_TIME_BEGIN, FALSE),
		DTS_TIMEFORMAT | DTS_UPDOWN);
	pDlgCust->ReplaceButton (ID_TIME_BEGIN, timeButton);

	CBCGPToolbarDateTimeCtrl dateEndButton (ID_DATE_END,
		CImageHash::GetImageOfCommand (ID_DATE_END, FALSE));
	pDlgCust->ReplaceButton (ID_DATE_END, dateEndButton);
	
	
	CBCGPToolbarDateTimeCtrl timeEndButton (ID_TIME_END,
		CImageHash::GetImageOfCommand (ID_TIME_END, FALSE),
		DTS_TIMEFORMAT | DTS_UPDOWN);
	pDlgCust->ReplaceButton (ID_TIME_END, timeEndButton);
	
	//----Exmaple----//
	
	pDlgCust->Create ();
}

LRESULT CMainFrame::OnToolbarReset(WPARAM wp,LPARAM)
{
	//----Exmaple----//
	
	UINT uiToolBarId = (UINT) wp;
	
	switch (uiToolBarId)
	{
	case IDR_MAINFRAME:
		{
			CBCGPToolbarDateTimeCtrl dateButton (ID_DATE_BEGIN,
				CImageHash::GetImageOfCommand (ID_DATE_BEGIN, FALSE));
			m_wndToolBar.ReplaceButton (ID_DATE_BEGIN, dateButton);
			
			CBCGPToolbarDateTimeCtrl timeButton (ID_TIME_BEGIN,
				CImageHash::GetImageOfCommand (ID_TIME_BEGIN, FALSE),
				DTS_TIMEFORMAT | DTS_UPDOWN);
			m_wndToolBar.ReplaceButton (ID_TIME_BEGIN, timeButton);

			CBCGPToolbarDateTimeCtrl dateEndButton (ID_DATE_END,
				CImageHash::GetImageOfCommand (ID_DATE_END, FALSE));
			m_wndToolBar.ReplaceButton (ID_DATE_END, dateEndButton);
			
			CBCGPToolbarDateTimeCtrl timeEndButton (ID_TIME_END,
				CImageHash::GetImageOfCommand (ID_TIME_END, FALSE),
				DTS_TIMEFORMAT | DTS_UPDOWN);
			m_wndToolBar.ReplaceButton (ID_TIME_END, timeEndButton);
		}
		break;
	}
	
	//----Exmaple----//
	
	return 0;
}

然后,就可以定义你想用的函数了,比如:GetStartDateTime()。

void CMainFrame::GetStartDateTime()
{
	SYSTEMTIME t;
    CBCGPToolbarDateTimeCtrl::GetTimeAll(ID_DATE_BEGIN,&t);
	m_byCallYear = (USHORT)t.wYear;				//年(调用历史数据的日期)
	m_byCallStartMonth = (BYTE)t.wMonth;			//起始月
	m_byCallStartDay = (BYTE)t.wDay;			//起始日
    CBCGPToolbarDateTimeCtrl::GetTimeAll(ID_TIME_BEGIN,&t);
	m_byStartHour = (BYTE)t.wHour;				//调用历史数据的起始时间
	m_byStartMinute = (BYTE)t.wMinute;			//调用历史数据的起始分钟

}

void CMainFrame::GetEndDateTime()
{
	SYSTEMTIME t;
    CBCGPToolbarDateTimeCtrl::GetTimeAll(ID_DATE_END,&t);
	m_byCallEndYear = (USHORT)t.wYear;				//终止年
	m_byCallEndMonth = (BYTE)t.wMonth;			//终止月
	m_byCallEndDay = (BYTE)t.wDay;			//终止日
	CBCGPToolbarDateTimeCtrl::GetTimeAll(ID_TIME_END,&t);
	m_byEndHour = (BYTE)t.wHour;				//调用历史数据的终止时间
	m_byEndMinute = (BYTE)t.wMinute;			//调用历史数据的终止分钟
}

我用到的这个例子中,m_byCallYear 等变量是在MainFrame.h中定义的。其它文件访问的时候,可以通过如下方式访问:

CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();

pMainWnd->m_byCallYear;


工具栏的效果如下:


哈哈,效果还不错吧?

 

你可能感兴趣的:(利用BCGControlBar,打造工具栏上的时间控件)