在BCGControlBar中,有CBCGPToolbarDateTimeCtrl这样一个类。此类提供了工具栏上的时间控件使用方法。
在BCG的例子ToolbarDateTimePicker中,已经提供了此类的应用。
首先,制作你的工具栏:
完成后,在资源文件中可以看到类似:
#define ID_DATE_BEGIN 32820 #define ID_TIME_BEGIN 32822 #define ID_DATE_END 32824 #define ID_TIME_END 32825
定义ID_VIEW_CUSTOMIZE,对应函数OnViewCustomize。
在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;
工具栏的效果如下:
哈哈,效果还不错吧?