Ignore:
Timestamp:
Oct 18, 2008, 5:55:42 PM (16 years ago)
Author:
イグトランス (egtra)
Message:

WindowHandleをWindows.UIの一部として使うために改造。メンバ関数の厳選、例外処理の導入など。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/ablib/src/Classes/ActiveBasic/Windows/UI/Control.ab

    r637 r646  
    3737    @brief HWNDからControlインスタンスを取得する。
    3838    @param[in] hwnd 対象のウィンドウハンドル
    39     @return 対応するControlインスタンス。ただし、存在しなければNothing。
     39    @return 対応するControlインスタンス。存在しなければ作成される。ただし、hwndがNULLならNothing。
    4040    */
    4141    Static Function FromHWnd(hwnd As HWND) As Control
    4242        FromHWnd = Nothing
    43         If _System_IsWindow(hwnd) Then
     43        If IsWindow(hwnd) Then
    4444            FromHWnd = FromHWndCore(hwnd)
     45            If ActiveBasic.IsNothing(FromHWnd) Then
     46                Dim lock = New ActiveBasic.Windows.CriticalSectionLock(_System_CriticalSection)
     47                Try
     48                    FromHWnd = New Control
     49                    FromHWnd.registerStandardEvent()
     50                    FromHWnd.AssociateHWnd(hwnd)
     51                Finally
     52                    lock.Dispose()
     53                End Try
     54            End If
    4555        End If
    4656    End Function
     
    104114
    105115Protected
    106     Abstract Sub GetCreateStruct(ByRef cs As CREATESTRUCT)
     116    Virtual Sub GetCreateStruct(ByRef cs As CREATESTRUCT)
     117    End Sub
    107118
    108119    Sub createImpl(ByRef cs As CREATESTRUCT, parent As Control)
     
    131142
    132143Public
     144/*
    133145    Sub Attach(hwndNew As HWND)
    134146        throwIfAlreadyCreated()
     
    139151        AssociateHWnd(hwndNew)
    140152    End Sub
    141 
     153*/
    142154    Sub BeginSubclass()
    143155        throwIfNotCreated()
    144         prevWndProc = SetWindowLongPtr(GWLP_WNDPROC, AddressOf(WndProcFirst) As LONG_PTR) As WNDPROC
     156        prevWndProc = SetWindowLongPtr(hwnd, GWLP_WNDPROC, AddressOf(WndProcFirst) As LONG_PTR) As WNDPROC
    145157    End Sub
    146158
     
    305317        Else
    306318            Dim ps As PAINTSTRUCT
    307             BeginPaint(ps)
     319            BeginPaint(hwnd, ps)
    308320            Try
    309321                OnPaintDC(New PaintDCArgs(ps.hdc, ps.rcPaint))
    310322            Finally
    311                 EndPaint(ps)
     323                EndPaint(hwnd, ps)
    312324            End Try
    313325        End If
Note: See TracChangeset for help on using the changeset viewer.