明清两代乡试第一名:VC++ 6.0 泡泡程序

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/30 03:25:45
使用MFC程序向导做一个单文档程序,要求点击左键生成一个泡泡(用画圆函数Ellipse),可以多次点击生成多个泡泡,这部分程序已经实现,请问若要右键点击某个泡泡,将其删除,怎么做?请给出右键代码,谢谢了。

其实就是实现undo功能。

首先,建立一个基类CEditRecord,对于每一种操作,都从该基类上派生出与操作相对应的类,记载操作过程,供以后进行具体的Undo/Redo操作;基类CEditRecord中的纯虚函数,为Undo、Redo操作提供接口。

然后,建立一个用于控制Undo/Redo的类:CRecordCtrl。 CRecordCtrl类从基类CObArray上派生,用于记载已经进行过的操作,响应Undo/Redo命令等

--------------------

如果你嫌这个复杂的话,就用重绘技术。
每次操作都重绘所有需要重绘的图案,
这样图案就可以随意增加和减少了。

基本思路:
取得鼠标点击位置,然后得到该点所在的椭圆,用背景色填充之。
建议维护一个泡泡堆栈链表,这样,每次擦除一个后,在链表中把该泡泡删除,再从规模底redraw.
难点是如何判断点击点在哪个椭圆中,这要用到图形学中的算法。还有一个实现方法是:因为已知都是椭圆,所以从栈顶开始,逐一判断该点在不在椭圆上。判断的方法可采用中学数学关于判断某点与椭圆相对位置的算法:把该点坐标代入椭圆方程,若结果小于0,则表明该点在椭圆内。(或者使用方法二:把已知点到到两个焦点的距离求和,如果小于长轴的长度,就说明点在椭圆内.否则就在椭圆外。)