你在自已写的函数中可以把CDC的有关设备上下文的有关数据作为参数传递给你的函数,但是在你的函数中不能把该上下文释放掉,由OnPaint中来释放
解决方案 »
- VC跟随鼠标的实现方法
- [HELP]对话框窗体背景、按纽、文本框和标题背景前景色设置问题(在线等)
- 关于CBitmap.LoadBitmap问题!
- 100分,求教!基于CSocket(不是winsock)的套接字通信问题,如何设置发送和接收超时?
- 关于RegisterWindowMessage函数的问题,谁能解我愁:(
- 对XML文件中,我们在解析XML文件的时候,是如何使用DTD文件的?请高手告知一二
- 关于高级程序员考试的一些问题!
- 问两个关于c++的简单问题
- 如何用editbox显示路径?
- 浮点型数变字符型怎么弄!
- 幽默-关于程序员
- 146分大赠送:谁知道win2k IFS kit在哪儿有?微软就算了....能下载就给分!!!!!!!
{ CPaintDC dc(this); // device context for painting// DrawFrame(0, 0, 400, 400); //这是我的函数的调用,若将我的函数放在此处,则下
//面的画sin(x)曲线的语句失效,若将其放在画sin(x)
//曲线的语句后,则这个自编的函数失效,何故???
// TODO: Add your message handler code here
CRect ClientRect;
GetClientRect(&ClientRect);
CPen pen5; if(pen4.CreatePen(PS_SOLID,1,RGB(0,0,0))) // 判断有效性
{
CPen*pOldPen=dc.SelectObject(&pen4);
dc.MoveTo(x2,y1+1);
dc.LineTo(x1+1.0,y1+1);
dc.LineTo(x1+1,y2);
dc.SelectObject(pOldPen);
} if(pen5.CreatePen(PS_SOLID,1,RGB(255,0,0))) // 判断有效性
{
CPen*pOldPen=dc.SelectObject(&pen5); // 装入原有GDI对象 //用以在对话框上画一个 sin(x)函数/////////////////////////////////////////// dc.MoveTo(0.0,200.0);
int i;
double x=0.0,y,step=0.01;
for(i=1;i<=10000;i++)
{
y=sin(x)*50.0+200.0;
dc.LineTo(10.0*x,y);
x+=step;
}
dc.SelectObject(pOldPen);
}
// Do not call CDialog::OnPaint() for painting messages
}//自编的函数体void CDialog1::DrawFrame(int x1, int y1, int x2, int y2)
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CRect ClientRect;
CPen pen1,pen2,pen3,pen4;
GetClientRect(&ClientRect);
if(pen1.CreatePen(PS_SOLID,2,RGB(255,255,255))) // 判断有效性
{
CPen*pOldPen=dc.SelectObject(&pen1);
dc.Rectangle(x1,y1,x2,y2);
dc.SelectObject(pOldPen);
} if(pen2.CreatePen(PS_SOLID,1,RGB(130,130,130))) // 判断有效性
{
CPen*pOldPen=dc.SelectObject(&pen2);
dc.MoveTo(x2,y1);
dc.LineTo(x1,y1);
dc.LineTo(x1,y2);
dc.SelectObject(pOldPen);
}
if(pen3.CreatePen(PS_SOLID,1,RGB(200,200,200))) // 判断有效性
{
CPen*pOldPen=dc.SelectObject(&pen3);
dc.MoveTo(x1,y2);
dc.LineTo(x2,y2);
dc.LineTo(x2,y1);
dc.MoveTo(x1,y2-2);
dc.LineTo(x2-2,y2-2);
dc.LineTo(x2-2,y1);
dc.SelectObject(pOldPen);
}
if(pen4.CreatePen(PS_SOLID,1,RGB(0,0,0))) // 判断有效性
{
CPen*pOldPen=dc.SelectObject(&pen4);
dc.MoveTo(x2,y1+1);
dc.LineTo(x1+1.0,y1+1);
dc.LineTo(x1+1,y2);
dc.SelectObject(pOldPen);
}
// Do not call CDialog::OnPaint() for painting messages
} 请给予修改,不胜感激!!!!!!
void CDialog1::DrawFrame(CDC * pDC,int x1, int y1, int x2, int y2);
调用时使用DrawFrame(&dc,0, 0, 400, 400);
CDC *pDC=GetDC();
DrawFrame(pDC,....);
ReleaseDC();//如果不释放会造成泄露如果在OnPaint中写了这些,其他地方可以用Invalidate()触发Onpaint
是的!!!只使用一个DC作图