使用mfc鼠标画线,主要使用鼠标左键单击,鼠标移动,鼠标右键单击等响应函数完成。
在mfc画线是主要要注意以下几点:
1、坐标系问题:在鼠标左键单击的响应函数中获取的鼠标坐标为设备坐标(屏幕坐标),而画线使MOVETO,LINETO函数使用的是逻辑坐标(客户区坐标),因此在获取鼠标单击坐标时需要进行坐标系的转换。
同时,如果是在对话框的某个控件上画线,还需要获取控件和对话框窗口的相对坐标。
坐标转换相关知识参见:http://blog.csdn.net/foreverhuylee/article/details/23998821;http://shitou7630.blog.163.com/blog/static/3269953620146201628498/;
2、鼠标移动时画线的擦除问题:
2-1、在鼠标移动响应函数中使用反色绘图模式ddd.SetROP2(R2_NOT);擦除上一条临时线。
2-2、在鼠标移动结束后,最终画线是需要擦除鼠标移动时最后一次绘制的临时线,否则有可能出现绘制两条直线的结果。
具体做法为:在左键弹起响应函数(或者左键第二次单击判断函数)中,先使用ddd.SetROP2(R2_NOT)擦除最后一条临时线,再使用ddd.SetROP2(R2_COPYEN)绘制要求的固定直线。参考资料:http://zhidao.baidu.com/link?url=uVKRfPSGeazHqhg4UCDGc8UAnmftL28EXpUIY5zAE-4yptYI52-i5jja6gf-sjV-g8aqzNWvdx55zJqvy-53Iq;