サブクラスで実装した(処理を書いた)メソッドをスーパークラスで呼びたいときはAbstract修飾を使いますが・・・
COMインターフェースとかで使うとかは聞きますが、使ったことはありません。
COMインターフェース以外での利用方法などがあればご教授ください。
それとOverrideについても質問です。
(AB5CP3での現象/他のバージョンは未検証)
[ここをクリックすると内容が表示されます]
Sub opened(hWnd, pCreateStruct) のように2度以上オーバーライドをした場合、コード: 全て選択
インターフェース的クラス
Class cAbstractWindow
Public
'ウィンドウプロシージャ
Abstract Function wndProc(hWnd As HWND, message As DWord, wParam As WPARAM, lParam As LPARAM) As LRESULT
':::::::: ウィンドウ処理 ::::::::
Protected
'作成された
Abstract Sub opened(hWnd As HWND, pCreateStruct As *CREATESTRUCT)
'閉じようとしている
Abstract Function closing() As Long
'閉じられた
Abstract Sub closed()
End Class
コード: 全て選択
'実装クラス
Class cWindow
Inherits cAbstractWindow
Public
'ウィンドウプロシージャ
Override Function wndProc(hWnd As HWND, message As DWord, wParam As WPARAM, lParam As LPARAM) As LRESULT
Select Case message
Case WM_CREATE
opened(hWnd, lParam As *CREATESTRUCT)
Case WM_CLOSE
If (closing() = TRUE) then DestroyWindow(hWnd)
return 0
Case WM_DESTROY
closed()
(省略)
End Select
return _eventcallproc(hWnd, message, wParam, lParam)
End Function
':::::::: ウィンドウ処理 ::::::::
Protected
'作成された
Override Sub opened(hWnd As HWND, pCreateStruct As *CREATESTRUCT)
End Sub
'閉じようとしている
Override Function closing() As Long
return TRUE
End Function
'閉じられた
Override Sub closed()
End Sub
End Class
コード: 全て選択
グローバル領域
Dim wnd As cMainWindow( AddressOf(EventCall_MainWnd) )
Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As LRESULT
return wnd.wndProc(hWnd, dwMsg, wParam, lParam)
'MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function
'使用クラス
Class cMainWindow
Inherits cWindow
':::::::: ウィンドウ処理 ::::::::
Protected
'作成された
Override Sub opened(hWnd As HWND, pCreateStruct As *CREATESTRUCT)
addItemEvent(ListView1)
End Sub
End Class
cWindow クラスのメソッドが呼ばれてしまい、最終的にオーバーライドしたクラスのメソッドが呼ばれません。
ついでにいうとスーパークラスでAbstract修飾かInterface定義ではないメソッドを
サブクラスでOverrideしようとすると「"Override" の使い方が不正です」とエラーになってしまいます。
そういう仕様ならあきらめますが、どうなのでしょうか?
USBメモリに開発環境を入れているので、AB5CP4, CP5は(クラスライブラリの容量から)導入をためらっています。
環境はWinXP_Pro_ver2002SP3+IE6です