MFC中设置字体和背景,大量数据刷新显示后出有关问题
MFC中设置字体和背景,大量数据刷新显示后出问题
用对话框的编辑框控件显示从下位机采集到的数据,在OnInitDialog()中设置了字体,采用OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)消息更新编辑框的的背景。
当我用虚拟串口向界面发固定的数据时,无论发多久,都没问题;当我接上下位机接收数据(不断变化),开始还好,过了几分钟后,那些编辑框背景色就变白色了,最小化后再显示界面,连窗口最上面的的最小化那一栏都看不见了,但是数据还是在更新,按键等还能正常的操作。
下面是部分的源代码,望各路大侠帮忙!
BOOL CADDlg::OnInitDialog()
{
。。。
//设置字体
CFont * cf=new CFont;//FW_SEMIBOLD
cf->CreateFont(21,0,0,0,FW_BOLD,FALSE,FALSE,0,
ANSI_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
DEFAULT_PITCH&FF_SWISS,"Arial");
GetDlgItem(IDC_AD_HIGH)->SetFont(cf);
。。。
}
HBRUSH CADDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
// 设置显示字体颜色 背景
switch (pWnd->GetDlgCtrlID())
{
//针对ID为IDC_CTL1, IDC_CTL2和IDC_CTL3的控件进行同样的设置
case IDC_AD_HIGH:
case IDC_FLOAT_HIGHT:
case IDC_AD_LEFT:
case IDC_AD_RIGHT:
case IDC_FLOAT_RIGHT:
case IDC_FLOAT_LEFT:
{
pDC->SetBkMode(TRANSPARENT);////OPAQUE
pDC->SetTextColor(RGB(0,255,255));
// pWnd->SetFont(cf);
HBRUSH B = CreateSolidBrush(RGB(0,0,0));
return (HBRUSH) B;
}
default:
return hbr;//CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
------解决方案--------------------
初始化中:HBRUSH m_B = CreateSolidBrush(RGB(0,0,0));
一次就可以了,
退出时:
DeleteObject(m_B);
------解决方案--------------------
CreateSolidBrush
重复操作了,而且没删除。
用对话框的编辑框控件显示从下位机采集到的数据,在OnInitDialog()中设置了字体,采用OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)消息更新编辑框的的背景。
当我用虚拟串口向界面发固定的数据时,无论发多久,都没问题;当我接上下位机接收数据(不断变化),开始还好,过了几分钟后,那些编辑框背景色就变白色了,最小化后再显示界面,连窗口最上面的的最小化那一栏都看不见了,但是数据还是在更新,按键等还能正常的操作。
下面是部分的源代码,望各路大侠帮忙!
BOOL CADDlg::OnInitDialog()
{
。。。
//设置字体
CFont * cf=new CFont;//FW_SEMIBOLD
cf->CreateFont(21,0,0,0,FW_BOLD,FALSE,FALSE,0,
ANSI_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
DEFAULT_PITCH&FF_SWISS,"Arial");
GetDlgItem(IDC_AD_HIGH)->SetFont(cf);
。。。
}
HBRUSH CADDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
// 设置显示字体颜色 背景
switch (pWnd->GetDlgCtrlID())
{
//针对ID为IDC_CTL1, IDC_CTL2和IDC_CTL3的控件进行同样的设置
case IDC_AD_HIGH:
case IDC_FLOAT_HIGHT:
case IDC_AD_LEFT:
case IDC_AD_RIGHT:
case IDC_FLOAT_RIGHT:
case IDC_FLOAT_LEFT:
{
pDC->SetBkMode(TRANSPARENT);////OPAQUE
pDC->SetTextColor(RGB(0,255,255));
// pWnd->SetFont(cf);
HBRUSH B = CreateSolidBrush(RGB(0,0,0));
return (HBRUSH) B;
}
default:
return hbr;//CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
------解决方案--------------------
初始化中:HBRUSH m_B = CreateSolidBrush(RGB(0,0,0));
一次就可以了,
退出时:
DeleteObject(m_B);
------解决方案--------------------
CreateSolidBrush
重复操作了,而且没删除。