只是要画图的话建议static控件。在WM_PAINT时先Update(hStatic);在用GetDC(hStatic)获得DC绘图。由于先Update,所以绘的图不会被Static覆盖
建立mfc工程然后实现您要的功能
步骤:
1、
new 选择project选项卡
2、
选择MFC AppWizard (exe) 填写相关信息点击确定就可以了
一般MFC中 OnDraw(CDCpDC) 这个函数 后面都有 CDCpDC
HDC就是最原始的 DC 句柄 ,在MFC中,为了将API封装成一个类来 *** 作,因此多出来了一个CDC
所以你说的那块绘图的区域 就是定义一块内存!
双缓充技术 就是开2个DC
CDC MemDC1;
CDC MemDC2;
MemDC1MoveTo(20,420);
MemDC1LineTo(425,420);//这是画到第一个
MemDC2MoveTo(20,420);
MemDC2LineTo(425,420);//这是画到第二个
pDC->BitBlt(x,y,450,460,&MemDC1,0,0,SRCCOPY);把第一块内存画到显示上去
pDC->BitBlt(x,y,450,460,&MemDC2,0,0,SRCCOPY);把第二块内存画到显示上去
上面就是最简单的 双缓冲 例子
如果觉得不详细,你可以看看一楼的传送门,或者直接网上找个例子看看
VC++画圆形可以使用API函数:Ellipse(int x1, int y1, int x2, int y2);
其画圆的原理是矩形的内切圆,四个参数中的前两个是矩形左上角坐标,后两个是矩形右下角坐标。VC++画图形前得先有一块画布DC即设备上下文。下面个例子:
void CrrDlg::PaintCircle() //画实心圆函数{
CDC pDC = this->GetDC(); //获取DC
CBrush brush,oldbrush; //画刷
//通过定时器中num递增,实现红色圆形与绿色圆形交替出现,即闪灯现象
if (num%2){ //num为定时器计数参数,其为偶数时画红色圆形
brushCreateSolidBrush(RGB(255,0,0));
}
else{ //num为奇数时,画绿色圆形
brushCreateSolidBrush(RGB(0,255,0));
}
oldbrush=pDC->SelectObject(&brush);
pDC->Ellipse(10,10,100,100);
pDC->Ellipse(110,10,200,100);
pDC->SelectObject(oldbrush);
ReleaseDC(pDC);
}
void CrrDlg::OnTimer(UINT_PTR nIDEvent) //定时器
{
num++;
PaintCircle();
CDialogEx::OnTimer(nIDEvent);
}
画空心圆环需要使用画笔CPen,画法一样。
我是用MFC的
首先在VIEW,H里面定义变量
CPoint startpoint;
然后初始化为o
在鼠标单击事后记录点
void CimagepaintView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
startpoint=point;
CView::OnLButtonDown(nFlags, point);
}
在松开鼠标时
void CimagepaintView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//topoint=point;
CClientDC dc(this);
CPen pen;
dcSelectObject(&pen);
dcSelectObject(&brush);
dcMoveTo(startpoint);
dcLineTo(point);
CView::OnLButtonUp(nFlags, point);
}
这样就可以了。画什么都可以。
或者卸载ONDRAW里面也行
这是我写的部分代码。。
以上就是关于请问如何用VC在picture control上面自绘图画全部的内容,包括:请问如何用VC在picture control上面自绘图画、如何使用vc++进行画图界面的开发,新手~、vc++中,做的一个画图的小程序,怎么在窗口重画后使图像不消失绘制代码不在ondraw()函数里面。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)