#define IDC_START_DT 10016
#define IDC_END_DT 10017
#define IDC_OPERATOR_COMB 10018
#define IDC_CARTYPE_COMB 10019
#define IDC_MIANFIE_EDT 10020
#define IDC_CHANNEL_COMB 10021
//控件定义
CDateTimeCtrl m_StartDt;
CDateTimeCtrl m_EndDt;
CComboBox m_OperatorComb;
CComboBox m_CarTypeComb;
CEdit m_MianFeiEdt;
CComboBox m_ChannelComb;
CMyListCtrl m_ListCtr;
在view上动态建立控件
int CReportView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
//生成开始时间
if(!m_StartDt.Create(WS_VISIBLE | WS_CHILD | WS_TABSTOP | DTS_LONGDATEFORMAT,CRect(0,0,0,0), this, IDC_START_DT))
{
return FALSE;
}
//生成结束时间
if(!m_EndDt.Create(WS_VISIBLE | WS_CHILD | WS_TABSTOP | DTS_LONGDATEFORMAT,CRect(0,0,0,0), this, IDC_END_DT))
{
return FALSE;
}
//生成操作员下拉框
if(!m_OperatorComb.Create(CBS_DROPDOWNLIST | WS_VISIBLE |
WS_TABSTOP | WS_VSCROLL, CRect(0,0,0, 0), this, IDC_OPERATOR_COMB))
{
return FALSE;
}
//生成车类型下拉框
if(!m_CarTypeComb.Create(CBS_DROPDOWNLIST | WS_VISIBLE |
WS_TABSTOP | WS_VSCROLL, CRect(0,0,0, 0), this, IDC_CARTYPE_COMB))
{
return FALSE;
}
//生成通道号下拉框
if(!m_ChannelComb.Create(CBS_DROPDOWNLIST | WS_VISIBLE |
WS_TABSTOP | WS_VSCROLL, CRect(0,0,0, 0), this, IDC_CHANNEL_COMB))
{
return FALSE;
}
//生成免费编辑框
if(!m_MianFeiEdt.Create(ES_AUTOHSCROLL | ES_AUTOVSCROLL | WS_CHILD | WS_VISIBLE | WS_TABSTOP,
CRect(0,0,0, 0), this, IDC_MIANFIE_EDT))
{
return FALSE;
}
return 0;
}
//改变控件位置
void CReportView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if(IsWindow(m_StartDt))//开始时间
{
CRect rc(65, 1, 235, 24);
m_StartDt.MoveWindow(rc);
}
if(IsWindow(m_EndDt))//结束时间
{
CRect rc(290, 1, 460, 24);
m_EndDt.MoveWindow(rc);
}
if(IsWindow(m_OperatorComb))
{
CRect rc(505, 2, 565, 250);
m_OperatorComb.MoveWindow(rc);
m_OperatorComb.SetItemHeight(-1, 16);
}
if(IsWindow(m_CarTypeComb))
{
CRect rc(610, 2,670, 250);
m_CarTypeComb.MoveWindow(rc);
m_CarTypeComb.SetItemHeight(-1, 16);
}
if(IsWindow(m_ChannelComb))//道口
{
CRect rc(700, 2,805, 250);
m_ChannelComb.MoveWindow(rc);
m_ChannelComb.SetItemHeight(-1, 16);
}
if(IsWindow(m_MianFeiEdt))//免费大于
{
CRect rc(860, 1, 1110, 24);
m_MianFeiEdt.MoveWindow(rc);
}
if(IsWindow(m_ListCtr))
{
CRect rc(1,26,cx,cy-25);
m_ListCtr.MoveWindow(rc);
}
}
//初始化控件
void CReportView::OnInitialUpdate()
{
CView::OnInitialUpdate();
m_StartDt.SetFormat(L"yyy-MM-dd HH:mm:ss");
m_EndDt.SetFormat(L"yyy-MM-dd HH:mm:ss");
COleDateTime tmEnd = COleDateTime::GetCurrentTime();
COleDateTime tmStart = tmEnd - COleDateTimeSpan(1,0,0,0);
m_StartDt.SetTime(tmStart);
m_EndDt.SetTime(tmEnd);
m_OperatorComb.AddString(L"所有");
m_OperatorComb.AddString(L"1");
m_OperatorComb.AddString(L"2");
m_OperatorComb.AddString(L"3");
m_OperatorComb.SetCurSel(0);
m_CarTypeComb.AddString(L"所有");
m_CarTypeComb.AddString(L"临时车");
m_CarTypeComb.AddString(L"固定车");
m_CarTypeComb.SetCurSel(0);
m_ChannelComb.AddString(L"所有");
m_ChannelComb.AddString(L"名诚大楼出口1");
m_ChannelComb.AddString(L"名诚大楼出口2");
m_MianFeiEdt.SetWindowText(L"");
}
void CReportView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
//以下为画工具条背景图片
CBitmap hbitmap;
hbitmap.LoadBitmap(IDB_16TOOLBARBK);
CDC Medc;
Medc.CreateCompatibleDC(pDC);
Medc.SelectObject(hbitmap);
BITMAP bmp;
hbitmap.GetBitmap(&bmp);
CRect DrawRect;
GetWindowRect(DrawRect);
ScreenToClient(DrawRect);
DrawRect.bottom = 26;
pDC->StretchBlt(DrawRect.left,DrawRect.top,DrawRect.Width(),DrawRect.Height(),&Medc,
0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
CFont font;
VERIFY(font.CreatePointFont(100, L"宋体", pDC));
CFont* def_font = pDC->SelectObject(&font);
pDC->SetBkMode(TRANSPARENT);
if(m_ReportType ==SHOW_REPORT_OPERATOR_FEE)//操作员收费查询报表
{
pDC->TextOut(10,7,L"开始时间");
pDC->TextOut(235,7,L"结束时间");
pDC->TextOut(460,7,L"操作员");
pDC->TextOut(565,7,L"车类型");
pDC->TextOut(670,7,L"道口");
pDC->TextOut(805,7,L"免费大于");
}
else
{
pDC->TextOut(10,7,L"排序字段");
pDC->TextOut(255,7,L"排序方式");
}
pDC->SelectObject(def_font);
font.DeleteObject();
}
BOOL CReportView::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CBrush backBrush(RGB(200,220,255));
// 保存旧刷子
CBrush* pOldBrush = pDC->SelectObject(&backBrush);
CRect rect;
pDC->GetClipBox(&rect); // 擦除所需的区域
pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
pDC->SelectObject(pOldBrush);
return TRUE;
}
以上为刷新代码,onpaint没重载
程序运行后,在视图上点击时间控件或从下拉框中选择某项后,当鼠标移动到最后面的文本框上时,不知为何会在文本框的位置会显示时间控件或下拉框上的界面内容?但当鼠标点击了文本框时,仍可在文本框中输入内容。