好久没接触MFC了,问个菜问题。
我建了个基于对话框的工程,写了2个画图函数
int CAaaDlg:: Line(float x1,float y1,float x2,float y2)
{
CPaintDC dc(this);
dc.MoveTo(x1,y1);
dc.LineTo(x2,y2);
return 1;
}int CAaaDlg:: Circle(float x1,float y1,int radius)
{
CPaintDC dc(this);
dc.MoveTo(x1,y1);
dc.Ellipse(x1-radius,y1-radius,x1+radius,y1+radius);
return 1;
}OnPaint如下
void CAaaDlg::OnPaint()
{
aa();
CDialog::OnPaint();
}
在函数aa里调用了自己写的那2个函数,
CAaaDlg *dlg;
dlg = (CAaaDlg*)AfxGetMainWnd();
dlg->Line(50,30,170,40);
dlg->Circle(170,140, 20);不过运行时为什么只画了线,没有圆,急盼高手解答。
我建了个基于对话框的工程,写了2个画图函数
int CAaaDlg:: Line(float x1,float y1,float x2,float y2)
{
CPaintDC dc(this);
dc.MoveTo(x1,y1);
dc.LineTo(x2,y2);
return 1;
}int CAaaDlg:: Circle(float x1,float y1,int radius)
{
CPaintDC dc(this);
dc.MoveTo(x1,y1);
dc.Ellipse(x1-radius,y1-radius,x1+radius,y1+radius);
return 1;
}OnPaint如下
void CAaaDlg::OnPaint()
{
aa();
CDialog::OnPaint();
}
在函数aa里调用了自己写的那2个函数,
CAaaDlg *dlg;
dlg = (CAaaDlg*)AfxGetMainWnd();
dlg->Line(50,30,170,40);
dlg->Circle(170,140, 20);不过运行时为什么只画了线,没有圆,急盼高手解答。
解决方案 »
- (回复有分!)F5调试退出:The thread 'Win32 Thread' (0xc24) has exited with code 2 (0x2)
- 在MFC里 如何得到WAV文件的时间啊
- 好简单的,找错。
- 如何确定是否安装了某应用程序,如何查找此程序的安装目录,不知如何下手?
- 流传的“真正”的程序员(大家see see)
- 在WIN2K SERVER平台上,如何通过编程(C++)实现添加新用户?有何API可用?
- 大散分--->如何实现线程间共享数据
- DAO调用Access的查询语句?
- 在数据库中,怎么用SQL语言查询输入的东西啊
- 怎样用cmd.exe将参数传递给mfc的对话框
- 图形移动刷新的问题
- 对话框上添加菜单(改变默认的位置-窗体左上角)??
这行代码在每次OnPaint函数被调用时只可用一次,不能重复使用,可以改成在OnPaint中写这行代码,把dc指针作为参数传给其它函数,其它函数都不要再构造CPaintDC对象。
void CXXXXX::OnPaint()
{
//Get device context for painting
CPaintDC dc(this); DrawYourOwnGraphics(&dc); //在这个函数里面绘制,DC 作为指针传递过去。 ReleaseDC(&dc); //Do not call CWnd::OnPaint() for painting messages
}
如果你需要大量绘图,要避免闪烁请使用双缓冲并处理 OnEraseBkgnd。
此问题我已回答多次。
1、DC 是系统资源,使用时必须向系统申请和释放,频繁的操作物理 DC 于效率和稳定性上都有欠妥当;
2、如果你遇到了画面闪烁的问题,你会明白 OnPain 传指针的原因;
3、有些事情不能只看表面、图简单。