mfc 教程
源代码在线查看: untitled-25.txt
告诉onMouseMove和onLButtonUp是否已画了橡皮筋线。如果。bCaptureEnabled是真,则
OnLButtonDown的唯一的操作就是捕获鼠标:
if(In--bCaptureEnabled)
SetCaature();
m—bCaptureEnabled由CMainwindow的构造函数初始化为TRUE。它由窗口的onNcLBut-
tonDown处理程序切换,以便可以打开和关闭鼠标捕获来查看鼠标捕获对程序操作的影响。
(待会儿详细讨论。)
onMouseMove的工作就是无论何时移动了鼠标,都要移动橡皮筋线并用新的光标位置
更新LptTo。语句
InvertL。ne(&dc,。ntFrom,m-ptTo);
清除以前画的橡皮筋线,而语句
InvertLine(&dc,。ptFrom,point);
画一条新的线。Invertline是CMainwindow的一个成员。它画线不是通过将每个像素设置为
某种颜色,而是通过转换现有的像素颜色。这就能确保线条无论在什么背景上都可以被看
见,并且只要恢复原有的屏幕颜色就可以清除已有的线。转换是用下列语句将设备描述表
的绘图方式设置为RZ.NOT完成的:
nit noldriode= pDC-> SetROPZ(RZNOT);
可以参阅第2章中有关RZ.NOT以及其他绘图模式的介绍。
在鼠标左键释放时,调用 CMainwindow:: onLButtonUp。在 m—bTraking被设置为 FAInE
并释放鼠标以后,它将清除橡皮筋线,最后调用 onMouseMove:
CClientDC dc(this);
InvertLine(&dC, In--ptFrom, m-ptTo);
onLButtonUp然后创建一个16像素宽原色为红色的笔,将它选人设备描述表,并绘制粗的红
色线条:
Cnen nen(PS_SOLID, 16, RGB(255, 0, 0》;
dc.Selectobject(&pen);
dc.MoveTo(。ptFro。);
dc.LineTo(po。nt);
处理结束后, onLButtonUp返回,绘图操作完成。图 3-4显示了 MouseCap窗口含有几条绘制
好的线和新的橡皮筋线的样子。
在熟悉了程序以后,可以单击标题栏激活OnNcLButtonDown处理程序,将。bCaptureEn一