?? composite.java
字號(hào):
Control control = tabList [i]; if (control == null) error (SWT.ERROR_INVALID_ARGUMENT); if (control.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT); if (control.parent != this) error (SWT.ERROR_INVALID_PARENT); } Control [] newList = new Control [tabList.length]; System.arraycopy (tabList, 0, newList, 0, tabList.length); tabList = newList; } this.tabList = tabList;}void setResizeChildren (boolean resize) { if (resize) { resizeChildren (); } else { int count = getChildrenCount (); if (count > 1 && lpwp == null) { lpwp = new WINDOWPOS [count]; } }}boolean setTabGroupFocus () { if (isTabItem ()) return setTabItemFocus (); boolean takeFocus = (style & SWT.NO_FOCUS) == 0; if ((state & CANVAS) != 0) { takeFocus = hooksKeys (); if ((style & SWT.EMBEDDED) != 0) takeFocus = true; } if (takeFocus && setTabItemFocus ()) return true; Control [] children = _getChildren (); for (int i=0; i<children.length; i++) { Control child = children [i]; if (child.isTabItem () && child.setRadioFocus ()) return true; } for (int i=0; i<children.length; i++) { Control child = children [i]; if (child.isTabItem () && child.setTabItemFocus ()) return true; } return false;}String toolTipText (NMTTDISPINFO hdr) { if ((hdr.uFlags & OS.TTF_IDISHWND) == 0) { return null; } int hwnd = hdr.idFrom; if (hwnd == 0) return null; Control control = display.getControl (hwnd); if (control == null) return null; return control.toolTipText;}boolean translateMnemonic (Event event, Control control) { if (super.translateMnemonic (event, control)) return true; if (control != null) { Control [] children = _getChildren (); for (int i=0; i<children.length; i++) { Control child = children [i]; if (child.translateMnemonic (event, control)) return true; } } return false;}boolean translateTraversal (MSG msg) { if ((state & CANVAS) != 0 && (style & SWT.EMBEDDED) != 0) return false; return super.translateTraversal (msg);}void updateFont (Font oldFont, Font newFont) { Control [] children = _getChildren (); for (int i=0; i<children.length; i++) { Control control = children [i]; if (!control.isDisposed ()) { control.updateFont (oldFont, newFont); } } super.updateFont (oldFont, newFont); layout (true);}int widgetStyle () { /* Force clipping of children by setting WS_CLIPCHILDREN */ return super.widgetStyle () | OS.WS_CLIPCHILDREN;}LRESULT WM_ERASEBKGND (int wParam, int lParam) { LRESULT result = super.WM_ERASEBKGND (wParam, lParam); if (result != null) return result; if ((state & CANVAS) != 0) { /* Return zero to indicate that the background was not erased */ if ((style & SWT.NO_BACKGROUND) != 0) return LRESULT.ZERO; } return result;}LRESULT WM_GETDLGCODE (int wParam, int lParam) { LRESULT result = super.WM_GETDLGCODE (wParam, lParam); if (result != null) return result; if ((state & CANVAS) != 0) { if ((style & SWT.NO_FOCUS) != 0) return new LRESULT (OS.DLGC_STATIC); if (hooksKeys ()) { int flags = OS.DLGC_WANTALLKEYS | OS.DLGC_WANTARROWS | OS.DLGC_WANTTAB; return new LRESULT (flags); } if (OS.GetWindow (handle, OS.GW_CHILD) != 0) return new LRESULT (OS.DLGC_STATIC); } return result;}LRESULT WM_GETFONT (int wParam, int lParam) { LRESULT result = super.WM_GETFONT (wParam, lParam); if (result != null) return result; int code = callWindowProc (OS.WM_GETFONT, wParam, lParam); if (code != 0) return new LRESULT (code); if (font == 0) font = defaultFont (); return new LRESULT (font);}LRESULT WM_LBUTTONDOWN (int wParam, int lParam) { LRESULT result = super.WM_LBUTTONDOWN (wParam, lParam); /* Set focus for a canvas with no children */ if ((state & CANVAS) != 0) { if ((style & SWT.NO_FOCUS) == 0 && hooksKeys ()) { if (OS.GetWindow (handle, OS.GW_CHILD) == 0) setFocus (); } } return result;}LRESULT WM_NOTIFY (int wParam, int lParam) { if (!OS.IsWinCE) { NMHDR hdr = new NMHDR (); OS.MoveMemory (hdr, lParam, NMHDR.sizeof); switch (hdr.code) { /* * Feature in Windows. When the tool tip control is * created, the parent of the tool tip is the shell. * If SetParent () is used to reparent the tool bar * into a new shell, the tool tip is not reparented * and pops up underneath the new shell. The fix is * to make sure the tool tip is a topmost window. */ case OS.TTN_SHOW: case OS.TTN_POP: { /* * Bug in Windows 98 and NT. Setting the tool tip to be the * top most window using HWND_TOPMOST can result in a parent * dialog shell being moved behind its parent if the dialog * has a sibling that is currently on top. The fix is to * lock the z-order of the active window. * * Feature in Windows. Using SetWindowPos() with HWND_NOTOPMOST * to clear the topmost state of a window whose parent is already * topmost clears the topmost state of the parent. The fix is to * check if the parent is already on top and neither set or clear * the topmost status of the tool tip. */ int hwndParent = hdr.hwndFrom; do { hwndParent = OS.GetParent (hwndParent); if (hwndParent == 0) break; int style = OS.GetWindowLong (hwndParent, OS.GWL_EXSTYLE); if ((style & OS.WS_EX_TOPMOST) != 0) break; } while (true); if (hwndParent != 0) break; display.lockActiveWindow = true; int flags = OS.SWP_NOACTIVATE | OS.SWP_NOMOVE | OS.SWP_NOSIZE; int hwndInsertAfter = hdr.code == OS.TTN_SHOW ? OS.HWND_TOPMOST : OS.HWND_NOTOPMOST; SetWindowPos (hdr.hwndFrom, hwndInsertAfter, 0, 0, 0, 0, flags); display.lockActiveWindow = false; break; } /* * Bug in Windows 98. For some reason, the tool bar control * sends both TTN_GETDISPINFOW and TTN_GETDISPINFOA to get * the tool tip text and the tab folder control sends only * TTN_GETDISPINFOW. The fix is to handle only TTN_GETDISPINFOW, * even though it should never be sent on Windows 98. * * NOTE: Because the size of NMTTDISPINFO differs between * Windows 98 and NT, guard against the case where the wrong * kind of message occurs by inlining the memory moves and * the UNICODE conversion code. */ case OS.TTN_GETDISPINFOA: case OS.TTN_GETDISPINFOW: { NMTTDISPINFO lpnmtdi; if (hdr.code == OS.TTN_GETDISPINFOA) { lpnmtdi = new NMTTDISPINFOA (); OS.MoveMemory ((NMTTDISPINFOA)lpnmtdi, lParam, NMTTDISPINFOA.sizeof); } else { lpnmtdi = new NMTTDISPINFOW (); OS.MoveMemory ((NMTTDISPINFOW)lpnmtdi, lParam, NMTTDISPINFOW.sizeof); } String string = toolTipText (lpnmtdi); if (string != null) { Shell shell = getShell (); string = Display.withCrLf (string); int length = string.length (); char [] chars = new char [length + 1]; string.getChars (0, length, chars, 0); /* * Ensure that the orientation of the tool tip matches * the orientation of the control. */ int hwnd = hdr.idFrom; if (hwnd != 0 && ((lpnmtdi.uFlags & OS.TTF_IDISHWND) != 0)) { Control control = display.getControl (hwnd); if (control != null) { if ((control.getStyle () & SWT.RIGHT_TO_LEFT) != 0) { lpnmtdi.uFlags |= OS.TTF_RTLREADING; } else { lpnmtdi.uFlags &= ~OS.TTF_RTLREADING; } } } if (hdr.code == OS.TTN_GETDISPINFOA) { byte [] bytes = new byte [chars.length * 2]; OS.WideCharToMultiByte (OS.CP_ACP, 0, chars, chars.length, bytes, bytes.length, null, null); shell.setToolTipText (lpnmtdi, bytes); OS.MoveMemory (lParam, (NMTTDISPINFOA)lpnmtdi, NMTTDISPINFOA.sizeof); } else { shell.setToolTipText (lpnmtdi, chars); OS.MoveMemory (lParam, (NMTTDISPINFOW)lpnmtdi, NMTTDISPINFOW.sizeof); } return LRESULT.ZERO; } break; } } } return super.WM_NOTIFY (wParam, lParam);}LRESULT WM_PAINT (int wParam, int lParam) { if ((state & CANVAS) == 0) { return super.WM_PAINT (wParam, lParam); } /* Set the clipping bits */ int oldBits = 0, newBits = 0; if (!OS.IsWinCE) { oldBits = OS.GetWindowLong (handle, OS.GWL_STYLE); newBits = oldBits | OS.WS_CLIPSIBLINGS | OS.WS_CLIPCHILDREN; if (newBits != oldBits) OS.SetWindowLong (handle, OS.GWL_STYLE, newBits); } /* Paint the control and the background */ PAINTSTRUCT ps = new PAINTSTRUCT (); if (hooks (SWT.Paint)) { /* Get the damage */ int [] lpRgnData = null; boolean isComplex = false; boolean exposeRegion = false; if ((style & SWT.NO_MERGE_PAINTS) != 0) { int rgn = OS.CreateRectRgn (0, 0, 0, 0); isComplex = OS.GetUpdateRgn (handle, rgn, false) == OS.COMPLEXREGION; if (isComplex) { int nBytes = OS.GetRegionData (rgn, 0, null); lpRgnData = new int [nBytes / 4]; exposeRegion = OS.GetRegionData (rgn, nBytes, lpRgnData) != 0; } OS.DeleteObject (rgn); } /* Create the paint GC */ GCData data = new GCData (); data.ps = ps; GC gc = GC.win32_new (this, data); int hDC = gc.handle; /* Send the paint event */ Event event = new Event (); event.gc = gc; if (isComplex && exposeRegion) { RECT rect = new RECT (); int count = lpRgnData [2]; for (int i=0; i<count; i++) { OS.SetRect (rect, lpRgnData [8 + (i << 2)], lpRgnData [8 + (i << 2) + 1], lpRgnData [8 + (i << 2) + 2], lpRgnData [8 + (i << 2) + 3]); if ((style & SWT.NO_BACKGROUND) == 0) { drawBackground (hDC, rect); } event.x = rect.left; event.y = rect.top; event.width = rect.right - rect.left; event.height = rect.bottom - rect.top; event.count = count - 1 - i; /* * It is possible (but unlikely), that application * code could have disposed the widget in the paint * event. If this happens, attempt to give back the * paint GC anyways because this is a scarce Windows * resource. */ sendEvent (SWT.Paint, event); if (isDisposed ()) break; } } else { if ((style & SWT.NO_BACKGROUND) == 0) { RECT rect = new RECT (); OS.SetRect (rect, ps.left, ps.top, ps.right, ps.bottom); drawBackground (hDC, rect); } event.x = ps.left; event.y = ps.top; event.width = ps.right - ps.left; event.height = ps.bottom - ps.top; sendEvent (SWT.Paint, event); } // widget could be disposed at this point /* Dispose the paint GC */ event.gc = null; gc.dispose (); } else { int hDC = OS.BeginPaint (handle, ps); if ((style & SWT.NO_BACKGROUND) == 0) { RECT rect = new RECT (); OS.SetRect (rect, ps.left, ps.top, ps.right, ps.bottom); drawBackground (hDC, rect); } OS.EndPaint (handle, ps); } /* Restore the clipping bits */ if (!OS.IsWinCE) { if (newBits != oldBits) { /* * It is possible (but unlikely), that application * code could have disposed the widget in the paint * event. If this happens, don't attempt to restore * the style. */ if (!isDisposed ()) { OS.SetWindowLong (handle, OS.GWL_STYLE, oldBits); } } } return LRESULT.ZERO;}LRESULT WM_PRINTCLIENT (int wParam, int lParam) { LRESULT result = super.WM_PRINTCLIENT (wParam, lParam); if (result != null) return result; if ((state & CANVAS) != 0) { forceResize (); int nSavedDC = OS.SaveDC (wParam); RECT rect = new RECT (); OS.GetClientRect (handle, rect); if ((style & SWT.NO_BACKGROUND) == 0) { drawBackground (wParam, rect); } GCData data = new GCData (); data.device = display; GC gc = GC.win32_new (wParam, data); Event event = new Event (); event.gc = gc; event.x = rect.left; event.y = rect.top; event.width = rect.right - rect.left; event.height = rect.bottom - rect.top; sendEvent (SWT.Paint, event); event.gc = null; gc.dispose (); OS.RestoreDC (wParam, nSavedDC); } return result;}LRESULT WM_SETFONT (int wParam, int lParam) { return super.WM_SETFONT (font = wParam, lParam);}LRESULT WM_SIZE (int wParam, int lParam) { /* Begin deferred window positioning */ setResizeChildren (false); /* Resize and Layout */ LRESULT result = super.WM_SIZE (wParam, lParam); /* * It is possible (but unlikely), that application * code could have disposed the widget in the resize * event. If this happens, end the processing of the * Windows message by returning the result of the * WM_SIZE message. */ if (isDisposed ()) return result; if (layout != null) layout.layout (this, false); /* End deferred window positioning */ setResizeChildren (true); /* Damage the widget to cause a repaint */ if ((state & CANVAS) != 0) { if ((style & SWT.NO_REDRAW_RESIZE) == 0) { if (hooks (SWT.Paint)) { OS.InvalidateRect (handle, null, true); } } } /* Resize the embedded window */ if ((state & CANVAS) != 0 && (style & SWT.EMBEDDED) != 0) { int hwndChild = OS.GetWindow (handle, OS.GW_CHILD); if (hwndChild != 0) { int threadId = OS.GetWindowThreadProcessId (hwndChild, null); if (threadId != OS.GetCurrentThreadId ()) { if (display.msgHook == 0) { if (!OS.IsWinCE) { display.getMsgCallback = new Callback (display, "getMsgProc", 3); display.getMsgProc = display.getMsgCallback.getAddress (); if (display.getMsgProc == 0) error (SWT.ERROR_NO_MORE_CALLBACKS); display.msgHook = OS.SetWindowsHookEx (OS.WH_GETMESSAGE, display.getMsgProc, OS.GetLibraryHandle(), threadId); } } OS.PostThreadMessage (threadId, Display.SWT_RESIZE, hwndChild, lParam); } } } return result;}LRESULT WM_SYSCOLORCHANGE (int wParam, int lParam) { Control [] children = _getChildren (); for (int i=0; i<children.length; i++) { int hwndChild = children [i].handle; OS.SendMessage (hwndChild, OS.WM_SYSCOLORCHANGE, 0, 0); } return null;}LRESULT WM_SYSCOMMAND (int wParam, int lParam) { LRESULT result = super.WM_SYSCOMMAND (wParam, lParam); if (result != null) return result; /* * Check to see if the command is a system command or * a user menu item that was added to the system menu. */ if ((wParam & 0xF000) == 0) return result; /* * Bug in Windows. When a vertical or horizontal scroll bar is * hidden or shown while the opposite scroll bar is being scrolled * by the user (with WM_HSCROLL code SB_LINEDOWN), the scroll bar * does not redraw properly. The fix is to detect this case and * redraw the non-client area. */ if (!OS.IsWinCE) { int cmd = wParam & 0xFFF0; switch (cmd) { case OS.SC_HSCROLL: case OS.SC_VSCROLL: boolean showHBar = horizontalBar != null && horizontalBar.getVisible (); boolean showVBar = verticalBar != null && verticalBar.getVisible (); int code = callWindowProc (OS.WM_SYSCOMMAND, wParam, lParam); if ((showHBar != (horizontalBar != null && horizontalBar.getVisible ())) || (showVBar != (verticalBar != null && verticalBar.getVisible ()))) { int flags = OS.RDW_FRAME | OS.RDW_INVALIDATE | OS.RDW_UPDATENOW; OS.RedrawWindow (handle, null, 0, flags); } if (code == 0) return LRESULT.ZERO; return new LRESULT (code); } } /* Return the result */ return result;}}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -