MFC picture control画图 画在控件外的部分如何擦除

MFC原本坐标范围画图效果如下:

我想通过改变坐标显示范围,从而实现局部放大的功能
将坐标显示范围变为原来的0.8后,效果图如下:

现在我想讲控件周围画出的内容擦除掉,不知该如何做,还请给位高手指导。
画图部分代码如下,zoom为放大比例,第一张图zoom=1.0,第二张图zoom=0.8:
void CMy0414CoastDlg::DrawCoast()//绘制coast图{ int i,j; int ii = 1; double a, b;//用来作为坐标变换的中间变量
ReadingData();
/*********坐标变换*****************/ for (i = 0; i<sizeof(latitude) / 8; i++) { WGS84ToMercator(latitude[i] * 60, longitude[i] * 60, &a, &b, 0, 0, 0);//单位是分 cx[i] = a; cy[i] = b; }
/************画图********************/ CRect rect; CWnd *pWnd; CDC *dc = GetDlgItem(IDC_Track)->GetDC(); pWnd = GetDlgItem(IDC_Track);//获得pictrue控件窗口的句柄 pWnd->GetClientRect(&rect);//获得pictrue控件所在的大小
WGS84ToMercator(-86 * 60, 179.9 * 60, &a, &b, 0, 0, 0);//逻辑坐标范围
FillRect(pWnd->GetDC()->GetSafeHdc(), &rect, CBrush(RGB(135,206,250)));//picture空间背景颜色为淡蓝色 dc->SetMapMode(MM_ANISOTROPIC); dc->SetWindowExt(abs(zoomby - b) * 2 * zoom, abs(zoombx - a) * 2 * zoom);//设置坐标范围,经度[-179~189],纬度[-86~86],经纬度坐标变换为直角坐标的值 dc->SetViewportExt(rect.right, -rect.bottom);//正北、正东为正方向 dc->SetViewportOrg(rect.right / 2, rect.bottom / 2);//设置窗口中心点为坐标系原点,使用物理坐标// dc->SetWindowOrg(zoomy - b, zoomx - a);//设置逻辑坐标原点在中心
POINT p[3000];//开辟足够大的空间存放点 for (i = 0; i<sizeof(flag) / 4 - 1; i++)
{ CRgn rg; CBrush b(RGB(0,255,127));//封闭图形颜色填充 dc->SelectObject(&b); dc->MoveTo(int(cy[flag[i]]), int(cx[flag[i]]));//画第一个点 p[0] = { int(cy[flag[i]]), int(cx[flag[i]]) };//转化为point类才能使用polygon填充颜色
for (j = flag[i] + 1; j<flag[i + 1]; j++) { dc->LineTo(int(cy[j]), int(cx[j])); //画其余点 if (ii != (flag[i + 1] - flag[i])) { p[ii] = { cy[j], cx[j] }; ii++; } } dc->Polygon(p,(flag[i+1]-flag[i]-1));//填充颜色点位置、个数 ii = 0;
} //UpdateWindow(0); }

建一个和图片控件相同大小的内存区,然后把图绘制在内存上,完成后再贴到控件上
温馨提示:内容为网友见解,仅供参考
无其他回答

MFC picture control画图 画在控件外的部分如何擦除
建一个和图片控件相同大小的内存区,然后把图绘制在内存上,完成后再贴到控件上

mfc如何擦除textout 绘制文字
设置一个标志位来表示是否想擦除a区域 当想擦除时把标志位设置TRUE 并且刷新该区域 在onpain函数中根据这个标志位来确认是否绘制A区域,在想绘制A区域的地方把标志位设为FALSE 刷新该区域

MFC上绘制的图被picture控件挡住了怎么办
有个原因你可以考虑:你的picture控件使用了自己派生的类控制,然后派生类里你响应了WM_PAINT消息,而你这个OUTPUT是父窗口,你这个绘图顺序就成了,先执行父窗口的画图函数,再派生类的画图函数OnPaint,所以,如果派生类没有任何绘制操作,就是个白色背景了,因为擦除了父窗口中关于picture绘制的内容。

VC MFC picture控件清除图像问题
GetDlgItem(ID)->ShowWindow(FALSE); \/\/关闭窗口显示 GetDlgItem(ID)->ShowWindow(TRUE); \/\/打开窗口显示,相当于把窗体重启,清除Picture控件的残余

mfc 如何不让画图时画到picture控件的外面
如果你是想将图形绘制在控件可视区,那你就用GetClientRect()得到当前客户区后,根据大小自己处理一下绘图函数时的大小就可以了。---解决方案--- CDC类有一个CDC::SelectClipRgn 函数可以设定裁剪区,设定后只能在这个区域内进行pdc的各项操作、绘制,保证不会绘制外面 ...

...如何读取外部的位图文件,让它显示在图片控件(Picture Control...
1.在你的对话框添一个按钮和一个图片控件(Picture Control).2.添加一个类,我这里上传不了,只能将.h和.cpp复制过来,你再将拷贝到txt里,改一下扩展名就可以了。这是Picture.h#if !defined(AFX_PICTURE_H__COPYFREE_BY_YOVAV_GAD__SOURCES_AT_SUPERMAIN_DOT_COM__INCLUDED_)#define AFX_PICTURE_H__...

求助,MFC 使用picture control显示图像出现问题
使用openCV的 cv::Mat 读取图片之后,需要在picture control控件中将图片显示出来。其过程是这样的:1、将 cv::Mat 转换格式为 IplImage,2、然后将 IplImage 转换格式为 CvvImage,因为 CvvImage 类中有函数 DrawToHDC(),可以直接完成MFC空间中的绘图。

MFC picture 控件上画图。
你已经做好了大部分的工作了,只差在控件上显示了。只需要再加句UpData(FALSE)就可以了。备注:UpData(true);把控件内容装入控件变量.即是说:当用户对控件作了操作,控件内容发生了改变,可以通过该函数加true参数实现同步。UpData(false);用控件变量的值更新控件。即是说:当程序中变量由于执行流程...

...Control)而另一个控件(Picture control)上边的图片会改变_百度知 ...
我不知道怎么读取图片,所以我的方法是,先在对话框建若干Picture Control ,每个Picture Control 里面放一张图,在Spin Control前面先建一个EDIT CONTROL,然后建Spin Control与之绑定,在EDIT CONTROL的响应函数里根据EDIT CONTROL中的整数值选择该显示的图片进行显示 ...

MFC我添加了Picture control后,发现ID都是一样的,但是我在resource.h...
picture control 本质上就是一个静态文本控件,默认ID跟静态文本的ID是一样的,想要使用就要把它的ID改成自己的ID ,不然是没法使用的。

相似回答