- Timestamp:
- Jul 13, 2008, 1:47:20 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ab5.0/ablib/src/Classes/ActiveBasic/Windows/UI/Forms/Control.ab
r542 r544 14 14 Class Control 15 15 Public 16 17 '118 19 16 Sub Control() 20 17 End Sub … … 47 44 48 45 '-------------------------------- 49 ' 1ウィンドウ作成46 ' ウィンドウ作成 50 47 /* 51 48 Function Create( … … 90 87 Public 91 88 Virtual Function WndProc(msg As DWord, wp As WPARAM, lp As LPARAM) As LRESULT 92 /*93 Select Case msg94 Case WM_MOUSELEAVE95 OnMouseLeave(makeMouseEventFromWPLP(wp, lp))96 mouseEntered = False97 Case WM_KEYDOWN98 OnKeyDown(New KeyEventArgs(makeKeysFormWPLP(wp, lp)))99 Case WM_KEYUP100 OnKeyUp(New KeyEventArgs(makeKeysFormWPLP(wp, lp)))101 Case WM_CHAR102 OnKeyPress(New KeyPressEventArgs(wp As Char))103 ' Case WM_CREATE104 Case WM_DESTROY105 OnDestroy(EventArgs.Empty)106 Case Else107 WndProc = DefWndProc(msg, wp, lp)108 End Select109 */110 89 Dim h = Nothing As MessageEventHandler 111 90 Dim b = messageMap.TryGetValue(Hex$(msg), h) … … 126 105 127 106 Private 128 Static Function makeKeysForm WPLP(wp As WPARAM, lp As LPARAM) As Keys107 Static Function makeKeysFormMsg(e As MessageEventArgs) As Keys 129 108 Dim t As DWord 130 t = wpAnd Keys.KeyCode109 t = e.WParam And Keys.KeyCode 131 110 t Or= (GetKeyState(VK_SHIFT) As Word And &h8000) << 1 132 111 t Or= (GetKeyState(VK_CONTROL) As Word And &h8000) << 2 133 112 t Or= (GetKeyState(VK_MENU) As Word And &h8000) << 3 134 makeKeysFormWPLP = t As Keys 135 End Function 136 137 Static Function makeMouseEventFromWPLP(wp As WPARAM, lp As LPARAM) As MouseEventArgs 138 makeMouseEventFromWPLP = New MouseEventArgs(LOWORD(wp) As MouseButtons, 1, GET_X_LPARAM(lp), GET_Y_LPARAM(lp), 0) 113 makeKeysFormMsg = t As Keys 114 End Function 115 116 Static Function makeMouseEventFromMsg(e As MessageEventArgs) As MouseEventArgs 117 Dim wp = e.WParam 118 Dim lp = e.LParam 119 makeMouseEventFromMsg = New MouseEventArgs(LOWORD(wp) As MouseButtons, 1, GET_X_LPARAM(lp), GET_Y_LPARAM(lp), 0) 139 120 End Function 140 121 … … 146 127 Sub StartWndProc() 147 128 Dim t = This '#177対策 148 messageMap = New System.Collections.Generic.Dictionary<Object, MessageEventHandler>149 129 AddMessageEvent(WM_ERASEBKGND, AddressOf(t.OnEraseBackground)) 150 130 Dim md = New MessageEventHandler(AddressOf(t.OnMouseDownBase)) … … 163 143 AddMessageEvent(WM_MBUTTONDBLCLK, mu) 164 144 AddMessageEvent(WM_XBUTTONDBLCLK, mu) 145 146 AddMessageEvent(WM_MOUSELEAVE, AddressOf(t.OnMouseLeaveBase)) 165 147 AddMessageEvent(WM_PAINT, AddressOf(t.OnPaintBase)) 148 AddMessageEvent(WM_KEYDOWN, AddressOf(t.OnKeyDownBase)) 149 ' AddMessageEvent(WM_CHAR, AddressOf(t.OnChar)) 150 AddMessageEvent(WM_CREATE, AddressOf(t.OnCreateBase)) 166 151 End Sub 167 152 … … 174 159 175 160 Sub OnMouseDownBase(sender As Object, e As MessageEventArgs) 176 OnMouseDown(makeMouseEventFrom WPLP(e.WParam, e.LParam))161 OnMouseDown(makeMouseEventFromMsg(e)) 177 162 End Sub 178 163 179 164 Sub OnMouseUpBase(sender As Object, e As MessageEventArgs) 180 Dim me = makeMouseEventFrom WPLP(e.WParam, e.LParam)165 Dim me = makeMouseEventFromMsg(e) 181 166 If doubleClickFired = False Then 182 OnClick(EventArgs.Empty)167 ' OnClick(System.EventArgs.Empty) 183 168 OnMouseClick(me) 184 169 doubleClickFired = False … … 188 173 189 174 Sub OnMouseDblClkBase(sender As Object, e As MessageEventArgs) 190 Dim me = makeMouseEventFrom WPLP(e.WParam, e.LParam)175 Dim me = makeMouseEventFromMsg(e) 191 176 doubleClickFired = True 192 177 OnMouseDown(me) 193 OnDoubleClick(EventArgs.Empty)178 ' OnDoubleClick(System.EventArgs.Empty) 194 179 OnMouseDoubleClick(me) 195 180 End Sub 196 181 197 182 Sub OnMouseMoveBase(sender As Object, e As MessageEventArgs) 198 Dim me = makeMouseEventFrom WPLP(e.WParam, e.LParam)183 Dim me = makeMouseEventFromMsg(e) 199 184 If mouseEntered Then 200 185 OnMouseMove(me) … … 205 190 End Sub 206 191 192 Sub OnMouseLeaveBase(sender As Object, e As MessageEventArgs) 193 Dim me = makeMouseEventFromMsg(e) 194 OnMouseLeave(me) 195 mouseEntered = False 196 End Sub 197 207 198 Sub OnPaintBase(sender As Object, e As MessageEventArgs) 208 199 Dim ps As PAINTSTRUCT 209 200 BeginPaint(hwnd, ps) 210 'Try211 'OnPaintDC(New PaintDCEventArgs(ps.hdc, ps.rcPaint))212 'Finally201 Try 202 OnPaintDC(New PaintDCEventArgs(ps.hdc, ps.rcPaint)) 203 Finally 213 204 EndPaint(hwnd, ps) 214 ' End Try 215 End Sub 216 205 End Try 206 End Sub 207 208 Sub OnKeyDownBase(sender As Object, e As MessageEventArgs) 209 OnKeyDown(New KeyEventArgs(makeKeysFormMsg(e))) 210 End Sub 211 212 Sub OnKeyUpBase(sender As Object, e As MessageEventArgs) 213 OnKeyUp(New KeyEventArgs(makeKeysFormMsg(e))) 214 End Sub 215 216 ' コメントアウト解除のときはStartWndProcのコメントアウト解除も忘れないこと 217 ' Sub OnChar(sender As Object, e As MessageEventArgs) 218 ' OnKeyPress(New KeyPressEventArgs(e.WParam As Char)) 219 ' End Sub 220 221 Sub OnCreateBase(sender As Object, e As MessageEventArgs) 222 OnCreate(New CreateEventArgs(e.LParam As *CREATESTRUCT)) 223 End Sub 217 224 218 225 messageMap As System.Collections.Generic.Dictionary<Object /*DWord*/, MessageEventHandler> … … 260 267 '-------- 261 268 'イベント 262 ' 3263 269 264 270 #include "ControlEvent.sbp" 265 271 266 272 '-------------------------------- 267 ' 1インスタンスメンバ変数273 ' インスタンスメンバ変数 268 274 Private 269 275 hwnd As HWND … … 281 287 282 288 '-------------------------------- 283 ' 1初期ウィンドウクラス289 ' 初期ウィンドウクラス 284 290 Private 285 291 Static Function WndProcFirst(hwnd As HWND, msg As DWord, wp As WPARAM, lp As LPARAM) As LRESULT … … 339 345 340 346 '-------------------------------- 341 ' 1初期化終了関連(特にウィンドウクラス)347 ' 初期化終了関連(特にウィンドウクラス) 342 348 Private 343 349 'ウィンドウ作成時にウィンドウプロシージャへThisを伝えるためのもの … … 450 456 Inherits Form 451 457 Public 452 Sub NcDestory(sender As Object, et As EventArgs) 458 Sub t() 459 Dim f = This 460 f.AddMessageEvent(WM_DESTROY, AddressOf (f.Destory)) 461 f.AddPaintDC(AddressOf (f.Paint)) 462 End Sub 463 464 Sub Destory(sender As Object, e As EventArgs) 465 OutputDebugString(Ex"Destory\r\n") 453 466 PostQuitMessage(0) 454 467 End Sub 468 469 Sub Paint(sender As Object, e As PaintDCEventArgs) 470 TextOut(e.Handle, 10, 10, "Hello world!", 12) 471 End Sub 455 472 End Class 456 473 457 474 Dim f = New MyForm 475 f.t() 458 476 f.Create() 459 Dim h = New MessageEventHandler(AddressOf (f.NcDestory))460 f.AddMessageEvent(WM_NCDESTROY, h)461 477 ShowWindow(f.Handle, SW_SHOW) 462 478 … … 481 497 482 498 End 483
Note:
See TracChangeset
for help on using the changeset viewer.