界面的刷新

wil 2003-05-05 11:57:50
我建立了基于对话框的程序,在对话框中我画了一个网格图。
在程序运行时,我改变对话框的大小以改变网格图的大小,可是
在改变时网格图出现了背影,象是很多网格图重叠在一起一样。把对话框
隐藏起来(如最小化)然后回复,则阴影就消失了。请问该如何处理这种状况?
...全文
46 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wil 2003-05-05
  • 打赏
  • 举报
回复
如果我在画的函数里面调用Invalidate()不就出现死循环吗?
我的程序是这样的,当改变窗口时,就会调用画图函数。当窗口改变时,不是回自动发送消息吗?
qimz 2003-05-05
  • 打赏
  • 举报
回复
網格是用cdc華的吧,應該在華的函數裏面用Invalidate(FALSE)刷新.
wil 2003-05-05
  • 打赏
  • 举报
回复
应该是自动发送此消息吧?
丁淇石头 2003-05-05
  • 打赏
  • 举报
回复
每次改变对话框大小后使用Invalidate(TRUE)或Invalidate(FALSE)刷新画面
wil 2003-05-05
  • 打赏
  • 举报
回复
void CBisheDlg::OnPaint()
{

if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
Ondraw();
}
void CBisheDlg::Ondraw()
{
CRect WinRect;
GetWindowRect(&WinRect);
int Height,Width;
Height=WinRect.Height();
Width=WinRect.Width();

//创建两个窗口
CreateViewport(m_Rect1,m_Rect2,Height,Width);
CClientDC dc(this);
CPen pen1(PS_SOLID,1,m_Pen1Color);
CPen* oldPen=dc.SelectObject(&pen1);
CBrush brush1;
brush1.CreateSolidBrush(m_Brush1Color);
CBrush *oldBrush=dc.SelectObject(&brush1);
dc.Rectangle(m_Rect1);
DrawMesh(dc,m_Rect1);
//读数据文件
ReadDataFile();

//画幅值曲线
DrawLine(dc,m_Rect1,1);

CPen pen2(PS_SOLID,1,m_Pen2Color);
dc.SelectObject(&pen2);
CBrush brush2;//=new(CBrush);
brush2.CreateSolidBrush(m_Brush2Color);
dc.SelectObject(brush2);
dc.Rectangle(m_Rect2);
DrawMesh(dc,m_Rect2);

//画相位曲线
DrawLine(dc,m_Rect2,2);

//恢复以前的设置
dc.SelectObject(oldBrush);
dc.SelectObject(oldPen);

}

void CBisheDlg::DrawLine(CClientDC &dc,CRect &Rect, int Which)
{
if(Which==1)
{
dc.MoveTo(Rect.left+SwingArray[0].x,Rect.top+SwingArray[0].y);
for(int i=1;i<1024;i++)
dc.LineTo(Rect.left+SwingArray[i].x,Rect.top+SwingArray[i].y);
}
else
{
dc.MoveTo(Rect.left+BitArray[0].x,Rect.top+BitArray[0].y);
for(int i=1;i<1024;i++)
dc.LineTo(Rect.left+BitArray[i].x,Rect.top+BitArray[i].y);
}

}

shilong 2003-05-05
  • 打赏
  • 举报
回复
在改变时网格图出现了背影,象是很多网格图重叠在一起一样。

怎么会出现这种情况呢,贴点代码看看
wil 2003-05-05
  • 打赏
  • 举报
回复
我如何捕捉对话框大小改变的事件呢?
如果在onPaint()函数中调用这个函数的时候又回发送wm_paint消息,又会调用该函数,这样会无限循环。
能不能使窗口在改变大小的时候做相当于Invalidate(TRUE);的事情
因为该对话框被别的窗口覆盖再显示出来的时候就不会出现这种事情了。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧