请问一下:我的程序(Dialog-based)设定了背景色,但又要每秒钟更新屏幕一次。
所以我用了InvalidateRect()这个函数。
但是当屏幕更新了后,更新的区域周围会出现长方形黑边。请问如何解决?谢谢!!
程序代码大约如下:
==================================
BOOL CDrawDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
SetTimer(0, 1000, NULL); return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}//更新屏幕
void CDrawDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default CRect rect;
//得到屏幕的长和宽
GetClientRect(rect);
rect.top = 0;
rect.bottom = 35; InvalidateRect(rect,TRUE); CDialog::OnTimer(nIDEvent);
}//设定背景色
BOOL CDrawDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default COLORREF green = 0x008000;
CBrush brush (green);
CBrush* pOldBrush = pDC->SelectObject (&brush);
CRect rcClip ;
pDC->GetClipBox (&rcClip);
pDC->Rectangle(rcClip);
pDC->SelectObject (pOldBrush); return TRUE;
}
void CEyeProtectDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here CString str;
//变量i 在header中定义了
str.Format("%d", i++);
dc.TextOut(10, 10, str); // Do not call CDialog::OnPaint() for painting messages
}
所以我用了InvalidateRect()这个函数。
但是当屏幕更新了后,更新的区域周围会出现长方形黑边。请问如何解决?谢谢!!
程序代码大约如下:
==================================
BOOL CDrawDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
SetTimer(0, 1000, NULL); return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}//更新屏幕
void CDrawDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default CRect rect;
//得到屏幕的长和宽
GetClientRect(rect);
rect.top = 0;
rect.bottom = 35; InvalidateRect(rect,TRUE); CDialog::OnTimer(nIDEvent);
}//设定背景色
BOOL CDrawDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default COLORREF green = 0x008000;
CBrush brush (green);
CBrush* pOldBrush = pDC->SelectObject (&brush);
CRect rcClip ;
pDC->GetClipBox (&rcClip);
pDC->Rectangle(rcClip);
pDC->SelectObject (pOldBrush); return TRUE;
}
void CEyeProtectDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here CString str;
//变量i 在header中定义了
str.Format("%d", i++);
dc.TextOut(10, 10, str); // Do not call CDialog::OnPaint() for painting messages
}
解决方案 »
- mfc 使用webbrowser控件 遇到的问题 请大侠帮忙
- CEdit:从文件里读入数据,在CEdit里显示,如何实现
- 我在_tWinMain里面开线程发送,发送完成后希望调用当前com的连接点函数Fire_SendBack把结果发送给调用客户程序.怎么实现?
- 如何在调试MFC程序时使用输出中间结果?
- 无法实现预期目标,请高手指教
- 帮我!!!! 谁有BCGCBProInc.h的文件吗?
- 求救:谁做过一台电脑(client)连接多台服务器(server)的程序!
- listview中关于click的函数
- 用MFC做过ACtiveX控件的朋友请指点一下:
- 关于VC的一个很有意思的问题
- 面试题?尽快,在线等
- vs.net vs7.0 vs.net2003是什么关系啊?
pDC->Rectangle(rcClip);出的问题。
你试试。
因为我写的是保护眼睛的程序,但我发问时改了名字,而这个忘了改。 ^.^;
用InvalidateRect设定的Rect好像不管用,还是刷新整个static区域,当然dialog
其他地方不闪烁