用c++ MFC 制作一个绘图软件!怎么填充图形 可以的话各位上代码!...
展开全部 1 绘图设备类 CDC类-父类是CObject,封装的是一般的绘图设备,例如:显示器, 打印机等。
CWindowDC类-父类是CDC类,封装的是窗口对象,包括客户区和非 客户区。
CClientDC类-父类是CDC类,封装的仍然是窗口,但是只包括客户区。
CPaintDC类-父类是CDC类,封装的是窗口的客户区。
但是,它只用 在窗口的WM_PAINT消息处理函数中。
CMetaFileDC类-父类是CDC类,作用保存绘制命令。
2 使用 创建MFC AppWizard(exe)工程,添加菜单项,然后使用类向导生成消息命令的函数体框架。
2.1 CDC::CreateDC()-创建绘图设备 virtual BOOL CreateDC( LPCTSTR lpszDriverName,//设备的驱动名称 LPCTSTR lpszDeviceName,//设备名称 LPCTSTR lpszOutput,//接口 const void* lpInitData//设备的初始化参数 ); 设备为显示器时,("DISPLAY",NULL,NULL,NULL); 2.2 使用 .... 2.3 CDC::DeleteDC()-删除设备 2.4 CDC的子类CWindowDC、CClientDC、CPaintDC,在构造函数中 调用CreateDC(),在析构函数中调用DeleteDC(),所以,子类使用 只需要构造对象即可。
2.5 CMetaFileDC类的使用 2.5.1 创建 CMetaFileDC::Create 2.5.2 绘制 .... 2.5.3 关闭,返回句柄 HMETAFILE CMetaFileDC::Close 2.5.4 使用...
用VS2010MFC制作简易画图程序,为何画出来的矩形是重影,如何解...
是这样的,MFC创建的窗口,在接收到“重绘”消息的时候会擦除窗口的内容并绘制控件的图案(这意味着如果你不是在重绘消息的处理函数中绘制图形,那么图形被擦除后也不会再恢复),而在其它情况下窗口是不会擦除内容并重绘的。
所以如果你只是在鼠标拖拽的事件中绘制矩形的话,绘制新矩形之前旧的矩形是不会被擦掉的。
然而,也不能简单地使窗口重绘来到达目的,因为那样会导致之前已经绘制好的所有图形被擦掉,最后窗口只剩下最新绘制的矩形。
要达到画图的目的,你得将已绘制好的图案储存在内存中(以位图的形式),而正在绘制的矩形则只在窗口上绘制,不在内存中的位图中绘制,而当当前的图形完全确定(即松开鼠标)时,再将它绘制入内存中的位图。
这样处理后,就可以在鼠标拖动过程中(需要实时删除之前的图形)放心地使窗口重绘(这会使之前的图像被擦除,不会留下痕迹),然后在重绘消息处理函数中(擦除过程由MFC框架自动完成,你的处理函数会在擦除后被调用,负责绘制图案)将内存中的图案复制到窗口上,这使得之前已经确定的图案重新被显示。
最后再向窗口中绘制当前还未确定的图形。
至于具体实现,主要途径就是创建内存画布,网页搜索“MFC双缓冲绘图”,你会得到通过暂时在内存中绘图,最后再向屏幕复制图案以防止重绘时窗口闪烁的方法,在它的基础上稍加改动(例如将位图对象从临时改为全局以保留图像,请结合自己的思考修改其它部分)即可实现画图的功能。
过程中请务必记住,窗口上的图像很容易就会因遮挡或重绘而消失,而且不方便针对性地删除某一个与其它图案重叠的图形,所以需要在内存中保存你希望保存的图像。
C++简单绘图软件源代码(附要求)
展开全部 在对话框界面上画出统计后的柱状图。
提示:在OnPaint()函数中加入画线代码: CDC* pDC = GetDC(); //利用MFC的CDC类实现画线 CPoint pt1,pt2; //定义起点、终点 pt1.x = 100; pt1.y = 100; pt2.x = 200; pt2.y = 200; pDC->MoveTo(pt1); //线的起点 pDC->LineTo(pt2); //线的终点 ReleaseDC(pDC); //释放CDC 满意答案 网友回答 来自太平洋电脑网 - 第一专业IT门户网站2013-07-29读文件: int nData[20]; FILE *fpTxt; if( ( fpTxt = fopen ("C:\\1.txt","r")) == NULL ) { MessageBox("打开文件失败","系统警告",MB_OK); return; } for(int i=0;i>...