zl程序教程

您现在的位置是:首页 >  其他

当前栏目

控制类(Controller)

控制 Controller
2023-09-14 09:10:33 时间

在这个视图类里,由构造函数声明了两个保存当前鼠标坐标的点(x, y)。接着下来看到成员函数Paint,这个函数主要作用就是把界面所有画过的线,在窗口更新之后,再次把所有的直线显示出来。所以在这个函数传入两个参数:canvasptListcanvas是窗口的画布,ptList是保存所有直线的端点,有了画布和所有直线的端点,就可以把以前在界面画过的线重新显示出来。为什么要这样做呢?因为窗口每次更新,都会变成一个空白的画布,如果不把以前的直线显示出来,界面上就什么也看不到。

成员函数PrintPos是用来在界面上显示当前鼠标所在位置,同时把最后鼠标位置保存起来。

成员函数MoveTo是用来当鼠标移动时,是否需要在窗口上显示直线,同时把当前鼠标位置显示到窗口。

在这个类里主要实现历史直线的显示、当前鼠标位置显示和移动时实时直线的显示。

控制类(Controller

控制类主要响应窗口所有事件,比如鼠标移动、按键按下、按键弹起、窗口更新等等。然后根据事件类型来调用模型类或视图类的功能。这个控制类的基类代码如下:

#开发人员:蔡军生(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