控制類(Controller)繼承,controller繼承
在控制類裡,Controller只是基類,主要實現從視窗傳遞過來的訊息觸發,並通過字典的方式來處理不同的訊息響應。在Python裡有字典,而沒有case語句,對於很多訊息來說,只有採用字典的方式會更容易處理訊息調用函數。接收到一個訊息時,可以先判斷是否在字典裡,如果存在說明這個訊息已經有相應的響應函數,如果不存在說明這個訊息給視窗的預設函數處理。通過字典的方式來處理,從代碼的編寫上來看,比case語句節省很多代碼。你也許看到在這個基類裡很多訊息是沒有明確的訊息處理的,而只是填寫pass語句,也就是說這些函數什麼功能也沒有做,只是一個佔位的作用。這樣寫有什麼意義呢?其實這樣寫是相當於C++裡的虛函數,只要衍生類別裡重載這些函數,實現相應功能就可以調用。這樣設計的意圖就是想讓控制類在不同場合下使用時編寫不同的功能代碼,從而達到基類的代碼複用。衍生類別的實現具體的訊息處理,代碼如下:
#開發人員:蔡軍生(QQ:9073204) 深圳 2014-9-24#控制類 class CtrlAll(Controller): def __init__(self): Controller.__init__(self) #調用基類構造方法 self.model = Model() self.view = View() self.win = Window(self.GetWnd()) def OnPaint(self, wParam, lParam): paint = PaintCanvas(self.GetWnd()) self.view.Paint(paint, self.model.GetPoint()) return True def OnMouseMove(self, wParam, lParam): paint = UpdateCanvas(self.GetWnd()) pt = self.GetPoint(lParam) if self.win.IsLButton(wParam): self.model.AddPoint(pt.x, pt.y, False) self.view.MoveTo(paint, pt.x, pt.y, True) else: self.view.PrintPos(paint, pt.x, pt.y) return True def OnLButtonDown(self, wParam, lParam): self.win.CaptureMouse() paint = UpdateCanvas(self.GetWnd()) pt = self.GetPoint(lParam) self.view.MoveTo(paint, pt.x, pt.y, False) self.model.AddPoint(pt.x, pt.y, True) return True def OnLButtonUp(self, wParam, lParam): self.win.ReleaseMouse() return True
在衍生類別的建構函式裡先調用基類的建構函式進行初始化,接著建立模型類和視圖類,這樣控制類就可以與模型類和視圖類進行溝通了。
成員函數OnPaint是響應視窗介面更新的訊息,因此調用視圖類裡更新視窗介面。
成員函數OnMouseMove是當滑鼠移動時響應,這裡調用模型類來儲存相應的資料,並調用視圖類在介面上顯示相應的滑鼠的座標。
成員函數OnLButtonDown是滑鼠左鍵按下訊息響應,在這裡先捕捉滑鼠,然後擷取滑鼠的座標,接著在介面顯示滑鼠當前位置,最後把相應的滑鼠座標位置儲存到模型類裡。
成員函數OnLButtonUp是滑鼠左鍵彈起訊息響應,這裡比較簡單,只是取消滑鼠捕捉。
對於ios開發中串連storyboard中的viewController與它所屬的類的視圖控制器的問題
我看你那個也比較蒙…我一般都是一個介面連一個,不是寫在一起了
怎定義一個Base_Controller,讓其他controller繼承?
一直都找不到那肯定是不支援這種寫法,具體如何寫請仔細看一下手冊,可以嗎?