最近写multitouch程序,要求用一个界面显示N个浏览器窗口的快照,点击某个快照后切换到相应的浏览器窗口。在浏览器窗口内,需要能够进行标注,模拟鼠标点击以及模拟鼠标滚轮。
 
我用的是MDI框架。写了2个DocTemplate,一个Template下的View继承了CHtmlView,另外一个template下的view继承了基本的CView类。用来显示其他htmlView的Snapshot。
 
调试过程中,碰到2个问题:
1,在HtmlView窗口之上做标注,由于MFC对CHtmlView的Update做了特殊处理,没办法使用标准的OnDraw或者OnUpdate之类的来进行标注线的更新。而且我直接用View里面的DC做绘图,根本显示不出来。所以使用了View的ParentWindow(就是FrameWnd)的DC来做的绘图。这个时候,如果我需要把之前绘制的某个区域清除掉,调用InvalidateRect没有任何效果。google半天没有找到合适的方法。最后没办法只能调用了FrameWnd的hide和show,才能让浏览器窗口整体刷新了一遍。
 
2,把程序装载到demo机器上后发现,如果调用了SendInput模拟鼠标的Wheel动作,就会引起整个系统reboot(不是SendInput引起的问题,用鼠标直接操作浏览器的滚动条也会reboot。)。而这个程序在我本机上调试是好的。反反覆覆观察很多次后,才发现demo机器上的浏览器版本比我机器上的版本要低。更新了浏览器版本之后,问题解决。