guanyuqi 2018-04-11 03:18 采纳率: 0%
浏览 1039
已采纳

VC中MFC视图中建立的其它控件,单击时这些控件的界面会显示到文本框的位置上

#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没重载

程序运行后,在视图上点击时间控件或从下拉框中选择某项后,当鼠标移动到最后面的文本框上时,不知为何会在文本框的位置会显示时间控件或下拉框上的界面内容?图片说明但当鼠标点击了文本框时,仍可在文本框中输入内容。

  • 写回答

3条回答 默认 最新

  • Eleven 2018-08-25 14:41
    关注

    意思就是你的CListCtrl中每个ITEM的位置变化了,你的这些下拉列表CComboBox/Edit也要跟着变化~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已采纳回答 11月16日

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘