?? tablecolumn.java
字號:
checkWidget (); int index = parent.indexOf (this); if (index == -1) return 0; int hwnd = parent.handle; return OS.SendMessage (hwnd, OS.LVM_GETCOLUMNWIDTH, index, 0);}/** * Causes the receiver to be resized to its preferred size. * For a composite, this involves computing the preferred size * from its layout, if there is one. * * @exception SWTException <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> * </ul> * */public void pack () { checkWidget (); int index = parent.indexOf (this); if (index == -1) return; int hwnd = parent.handle; TCHAR buffer = new TCHAR (parent.getCodePage (), text, true); int headerWidth = OS.SendMessage (hwnd, OS.LVM_GETSTRINGWIDTH, 0, buffer) + 10; if (image != null) { int margin = 0; if ((OS.COMCTL32_MAJOR << 16 | OS.COMCTL32_MINOR) >= (5 << 16 | 80)) { int hwndHeader = OS.SendMessage (hwnd, OS.LVM_GETHEADER, 0, 0); margin = OS.SendMessage (hwndHeader, OS.HDM_GETBITMAPMARGIN, 0, 0); } else { margin = OS.GetSystemMetrics (OS.SM_CXEDGE) * 3; } Rectangle rect = image.getBounds (); headerWidth += rect.width + margin * 2; } if ((parent.style & SWT.VIRTUAL) != 0) { if (image == null) { OS.SendMessage (hwnd, OS.LVM_SETCOLUMNWIDTH, index, OS.LVSCW_AUTOSIZE_USEHEADER); } else { OS.SendMessage (hwnd, OS.LVM_SETCOLUMNWIDTH, index, headerWidth); } } else { OS.SendMessage (hwnd, OS.LVM_SETCOLUMNWIDTH, index, OS.LVSCW_AUTOSIZE); int columnWidth = OS.SendMessage (hwnd, OS.LVM_GETCOLUMNWIDTH, index, 0); /* * Bug in Windows. When LVM_SETCOLUMNWIDTH is used with LVSCW_AUTOSIZE * where each item has I_IMAGECALLBACK but there are no images in the * table, the size computed by LVM_SETCOLUMNWIDTH is to small for the * first column, causing long items to be clipped with '...'. The fix * is to increase the value by a small amount. */ if (index == 0 && parent.imageList == null) columnWidth += 2; if (headerWidth > columnWidth) { if (image == null) { OS.SendMessage (hwnd, OS.LVM_SETCOLUMNWIDTH, index, OS.LVSCW_AUTOSIZE_USEHEADER); } else { OS.SendMessage (hwnd, OS.LVM_SETCOLUMNWIDTH, index, headerWidth); } } else { if (index == 0) { OS.SendMessage (hwnd, OS.LVM_SETCOLUMNWIDTH, index, columnWidth); } } }}void releaseChild () { super.releaseChild (); parent.destroyItem (this);}void releaseWidget () { super.releaseWidget (); parent = null;}/** * Removes the listener from the collection of listeners who will * be notified when the control is moved or resized. * * @param listener the listener which should be notified * * @exception IllegalArgumentException <ul> * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> * </ul> * @exception SWTException <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> * </ul> * * @see ControlListener * @see #addControlListener */public void removeControlListener (ControlListener listener) { checkWidget (); if (listener == null) error (SWT.ERROR_NULL_ARGUMENT); if (eventTable == null) return; eventTable.unhook (SWT.Move, listener); eventTable.unhook (SWT.Resize, listener);}/** * Removes the listener from the collection of listeners who will * be notified when the control is selected. * * @param listener the listener which should be notified * * @exception IllegalArgumentException <ul> * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> * </ul> * @exception SWTException <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> * </ul> * * @see SelectionListener * @see #addSelectionListener */public void removeSelectionListener(SelectionListener listener) { checkWidget (); if (listener == null) error (SWT.ERROR_NULL_ARGUMENT); if (eventTable == null) return; eventTable.unhook (SWT.Selection, listener); eventTable.unhook (SWT.DefaultSelection,listener); }/** * Controls how text and images will be displayed in the receiver. * The argument should be one of <code>LEFT</code>, <code>RIGHT</code> * or <code>CENTER</code>. * * @param alignment the new alignment * * @exception SWTException <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> * </ul> */public void setAlignment (int alignment) { checkWidget (); if ((alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER)) == 0) return; int index = parent.indexOf (this); if (index == -1 || index == 0) return; style &= ~(SWT.LEFT | SWT.RIGHT | SWT.CENTER); style |= alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER); int hwnd = parent.handle; LVCOLUMN lvColumn = new LVCOLUMN (); lvColumn.mask = OS.LVCF_FMT | OS.LVCF_IMAGE; OS.SendMessage (hwnd, OS.LVM_GETCOLUMN, index, lvColumn); lvColumn.fmt &= ~OS.LVCFMT_JUSTIFYMASK; int fmt = 0; if ((style & SWT.LEFT) == SWT.LEFT) fmt = OS.LVCFMT_LEFT; if ((style & SWT.CENTER) == SWT.CENTER) fmt = OS.LVCFMT_CENTER; if ((style & SWT.RIGHT) == SWT.RIGHT) fmt = OS.LVCFMT_RIGHT; lvColumn.fmt |= fmt; OS.SendMessage (hwnd, OS.LVM_SETCOLUMN, index, lvColumn);}public void setImage (Image image) { checkWidget(); if (image != null && image.isDisposed ()) { error (SWT.ERROR_INVALID_ARGUMENT); } int index = parent.indexOf (this); if (index == -1) return; super.setImage (image); int hwnd = parent.handle; LVCOLUMN lvColumn = new LVCOLUMN (); lvColumn.mask = OS.LVCF_FMT | OS.LVCF_IMAGE; OS.SendMessage (hwnd, OS.LVM_GETCOLUMN, index, lvColumn); if (image != null) { lvColumn.fmt |= OS.LVCFMT_IMAGE; lvColumn.iImage = parent.imageIndex (image); } else { lvColumn.fmt &= ~OS.LVCFMT_IMAGE; } OS.SendMessage (hwnd, OS.LVM_SETCOLUMN, index, lvColumn);}/** * Sets the resizable attribute. A column that is * not resizable cannot be dragged by the user but * may be resized by the programmer. * * @param resizable the resize attribute * * @exception SWTException <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> * </ul> */public void setResizable (boolean resizable) { checkWidget (); this.resizable = resizable;}public void setText (String string) { checkWidget (); if (string == null) error (SWT.ERROR_NULL_ARGUMENT); int index = parent.indexOf (this); if (index == -1) return; super.setText (string); /* * Bug in Windows. For some reason, when the title * of a column is changed after the column has been * created, the alignment must also be reset or the * text does not draw. The fix is to query and then * set the alignment. */ int hwnd = parent.handle; LVCOLUMN lvColumn = new LVCOLUMN (); lvColumn.mask = OS.LVCF_FMT; OS.SendMessage (hwnd, OS.LVM_GETCOLUMN, index, lvColumn); /* Set the column title */ int hHeap = OS.GetProcessHeap (); TCHAR buffer = new TCHAR (parent.getCodePage (), string, true); int byteCount = buffer.length () * TCHAR.sizeof; int pszText = OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, byteCount); OS.MoveMemory (pszText, buffer, byteCount); lvColumn.mask |= OS.LVCF_TEXT; lvColumn.pszText = pszText; int result = OS.SendMessage (hwnd, OS.LVM_SETCOLUMN, index, lvColumn); if (pszText != 0) OS.HeapFree (hHeap, 0, pszText); if (result == 0) error (SWT.ERROR_CANNOT_SET_TEXT);}/** * Sets the width of the receiver. * * @param width the new width * * @exception SWTException <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> * </ul> */public void setWidth (int width) { checkWidget (); int index = parent.indexOf (this); if (index == -1) return; int hwnd = parent.handle; OS.SendMessage (hwnd, OS.LVM_SETCOLUMNWIDTH, index, width);}}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -