在这个视图类里,由构造函数声明了两个保存当前鼠标坐标的点(x, y)。接着下来看到成员函数Paint,这个函数主要作用就是把界面所有画过的线,在窗口更新之后,再次把所有的直线显示出来。所以在这个函数传入两个参数:canvas和ptList,canvas是窗口的画布,ptList是保存所有直线的端点,有了画布和所有直线的端点,就可以把以前在界面画过的线重新显示出来。为什么要这样做呢?因为窗口每次更新,都会变成一个空白的画布,如果不把以前的直线显示出来,界面上就什么也看不到。
成员函数PrintPos是用来在界面上显示当前鼠标所在位置,同时把最后鼠标位置保存起来。
成员函数MoveTo是用来当鼠标移动时,是否需要在窗口上显示直线,同时把当前鼠标位置显示到窗口。
在这个类里主要实现历史直线的显示、当前鼠标位置显示和移动时实时直线的显示。
控制类主要响应窗口所有事件,比如鼠标移动、按键按下、按键弹起、窗口更新等等。然后根据事件类型来调用模型类或视图类的功能。这个控制类的基类代码如下:
#开发人员:蔡军生(QQ:9073204) 深圳 2014-9-23 class Controller: def __init__(self): self.hWnd = HWND() self.msgfun = { WM_DESTROY: self.OnDestroy, WM_PAINT: self.OnPaint, WM_MOUSEMOVE: self.OnMouseMove, WM_LBUTTONDOWN: self.OnLButtonDown, WM_LBUTTONUP: self.OnLButtonUp, WM_CAPTURECHANGED: self.OnCaptureChanged, WM_NULL: self.OnNull #最后一个函数处理,方便在前面插入函数 } def SetWnd(self, hWnd): self.hWnd = hWnd def GetWnd(self): return self.hWnd def GetPoint(self, lParam): pt = POINT() pt.x = lParam & 0xFFFF pt.y = (lParam>>16) & 0xFFFF return pt def MyWndProc(self, hWnd, Msg, wParam, lParam): if Msg in self.msgfun and self.msgfun[Msg](wParam, lParam): return 0 else: return windll.user32.DefWindowProcW(hWnd, Msg, wParam, lParam) def OnNull(self, wParam, lParam): pass return False def OnDestroy(self, wParam, lParam): windll.user32.PostQuitMessage(0) print(‘OnDestroy‘) return True def OnPaint(self, wParam, lParam): pass return False def OnMouseMove(self, wParam, lParam): pass return False def OnLButtonDown(self, wParam, lParam): pass return False def OnLButtonUp(self, wParam, lParam): pass return False def OnCaptureChanged(self, wParam, lParam): pass return False
时间: 2024-10-12 11:05:52