【求助】对话框 控件绘图 双缓冲

liaohuming 2012-02-14 11:32:20
我的问题是这样的:

我建立了一个基于对话框的程序
然后在对话框上添加一个“Static Text”控件
然后在该控件上绘图

绘图的步骤是这样的:

1、定义好若干个图形的绘制函数
2、每次在“Static Text”控件空白处点击鼠标左键获取坐标,然后将坐标值以及相关参数存入一个数组array1
3、OnPaint()函数处理数组array1的绘图数据

为了实现立刻显示图形,我在每次点击鼠标之后添加了InvalidateRect()来重绘显示图形
这样便导致屏幕闪烁

请问如何才能实现上述的功能,同时屏幕不闪烁呢?
比如说用双缓冲,在对话框控件上绘图如何实现呢?

望大家指点,贴点代码最好了^_^

...全文
91 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liaohuming 2012-02-17
  • 打赏
  • 举报
回复
终于解决了,散分散分^_^
shn521 2012-02-14
  • 打赏
  • 举报
回复
WM_ERASEBKGND消息直接return TRUE可以防止闪烁
Eleven 2012-02-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 liaohuming 的回复:]
我的问题是这样的:

我建立了一个基于对话框的程序
然后在对话框上添加一个“Static Text”控件
然后在该控件上绘图

绘图的步骤是这样的:

1、定义好若干个图形的绘制函数
2、每次在“Static Text”控件空白处点击鼠标左键获取坐标,然后将坐标值以及相关参数存入一个数组array1
3、OnPaint()函数处理数组array1的绘图数据

为了实现立刻显……
[/Quote]
重写CStatic类,WM_ERASEBKGND消息直接return TRUE;WM_PAINT消息响应函数中OnPaint函数使用双缓冲绘图
CDC memDC;
memDC.CreateCompatibleDC(&dc);
...
dc.BitBlt(....);
memDC.DeleteDC();
morrist1987 2012-02-14
  • 打赏
  • 举报
回复
我这里有份代码。留个邮箱。可以发给你参考一下。
liaohuming 2012-02-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 visualeleven 的回复:]
引用楼主 liaohuming 的回复:
我的问题是这样的:

我建立了一个基于对话框的程序
然后在对话框上添加一个“Static Text”控件
然后在该控件上绘图

绘图的步骤是这样的:

1、定义好若干个图形的绘制函数
2、每次在“Static Text”控件空白处点击鼠标左键获取坐标,然后将坐标值以及相关参数存入一个数组array1
3、OnPaint()函数处理数组……
[/Quote]

重写CStatic类能说具体点么?
void CXXXDlg::OnPaint()
{
CPaintDC dc(this);

pWnd=GetDlgItem(IDC_STATIC_DRAW);
pControlDC=pWnd->GetDC();

pWnd->Invalidate();
pWnd->UpdateWindow();

CRect rct;
pWnd->GetClientRect(rct);

CPen RectPen(PS_SOLID,1,BLACK_BRUSH);
pControlDC->SelectObject(&RectPen);

//绘制一个大矩形,充当白色的画布
pControlDC->Rectangle(rct.left,rct.top,rct.right,rct.bottom);
//绘图函数
DrawFt(pControlDC);
RectPen.DeleteObject();
pWnd->ReleaseDC(pControlDC);
}

上面是我的OnPaint()函数的代码,具体的绘制在DrawFt(pControlDC)里实现

就上面的情况双缓冲怎么使用呢?是在OnPaint()里写还是在DrawFt(pControlDC)

能不能说详细一点呢,我刚刚接触这个,没基础,很多都不懂-_-!,谢谢~
liaohuming 2012-02-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 morrist1987 的回复:]
我这里有份代码。留个邮箱。可以发给你参考一下。
[/Quote]

liaohuming@163.com 发我学习学习^_^
振翅高飞 2012-02-14
  • 打赏
  • 举报
回复
我也来看看,这个双缓冲我也需要学习学习。
healer_kx 2012-02-14
  • 打赏
  • 举报
回复
最好就是双缓冲了。如果还是闪,就是绘制逻辑的问题了。

15,979

社区成员

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

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