コード例 #1
0
ファイル: ListViewKinsky.cs プロジェクト: daviddw/oss-public
        public void CreateDragCursor(DragDropEffects aEffect)
        {
            if (iCursorInfo.Effect != aEffect)
            {
                if (iCursorInfo.Cursor != null)
                {
                    iCursorInfo.Cursor.Dispose();
                    iCursorInfo.Cursor = null;
                    iCursorInfo.Effect = DragDropEffects.None;
                }
            }

            if (SelectedIndices.Count > 0 && iCursorInfo.Cursor == null)
            {
                ListViewKinsky.Item item = iCursorInfo.Item;

                Bitmap image = new Bitmap(item.ListView.Width + 32, item.Bounds.Size.Height + 32, PixelFormat.Format32bppArgb);

                Graphics g = Graphics.FromImage(image);
                item.Draw(g, true);
                switch (aEffect)
                {
                case DragDropEffects.Copy:
                    kCursorCopy.Draw(g, new Rectangle(iCursorInfo.HotSpot.X, iCursorInfo.HotSpot.Y, kCursorCopy.Size.Width, kCursorCopy.Size.Height));
                    break;

                case DragDropEffects.Move:
                    kCursorMove.Draw(g, new Rectangle(iCursorInfo.HotSpot.X, iCursorInfo.HotSpot.Y, kCursorMove.Size.Width, kCursorMove.Size.Height));
                    break;

                default:
                    kCursorNone.Draw(g, new Rectangle(iCursorInfo.HotSpot.X, iCursorInfo.HotSpot.Y, kCursorNone.Size.Width, kCursorNone.Size.Height));
                    break;
                }
                g.Dispose();

                CursorApi.IconInfo iconInfo = new CursorApi.IconInfo();
                iconInfo.fIcon    = false;
                iconInfo.xHotspot = iCursorInfo.HotSpot.X;
                iconInfo.yHotspot = iCursorInfo.HotSpot.Y;
                iconInfo.hbmColor = image.GetHbitmap();
                iconInfo.hbmMask  = image.GetHbitmap();

                IntPtr pIconInfo = Marshal.AllocHGlobal(Marshal.SizeOf(iconInfo));
                Marshal.StructureToPtr(iconInfo, pIconInfo, true);
                IntPtr pIcon = CursorApi.CreateIconIndirect(pIconInfo);

                CursorApi.DestroyIcon(pIconInfo);
                CursorApi.DeleteObject(iconInfo.hbmMask);
                CursorApi.DeleteObject(iconInfo.hbmColor);

                iCursorInfo.Cursor = new Cursor(pIcon);

                iCursorInfo.Effect = aEffect;
            }
        }
コード例 #2
0
ファイル: ListViewKinsky.cs プロジェクト: daviddw/oss-public
        private void EventListViewLibrary_ItemDrag(object sender, ItemDragEventArgs e)
        {
            if (SelectedIndices.Count > 0)
            {
                ListViewKinsky.Item item = Items[SelectedIndices[0]] as Item;
                Point mousePosition      = PointToClient(System.Windows.Forms.Control.MousePosition);

                if (iCursorInfo.Cursor != null)
                {
                    iCursorInfo.Cursor.Dispose();
                }
                iCursorInfo.Cursor  = null;
                iCursorInfo.Effect  = DragDropEffects.None;
                iCursorInfo.Item    = item;
                iCursorInfo.HotSpot = new Point(mousePosition.X - item.Bounds.X, mousePosition.Y - item.Bounds.Y);
            }
        }
コード例 #3
0
        private void DoSourceListChanged()
        {
            Trace.WriteLine(Trace.kKinskyDesktop, "SourceListChanged");

            IList <ModelSourceReceiver> sources = iSourceList.Sources;

            ListViewSelector.BeginUpdate();

            ListViewSelector.Items.Clear();

            foreach (ModelSourceReceiver s in sources)
            {
                if (iSender != null && s.Source.Device.Udn != iSender.Udn)
                {
                    Widgets.ListViewKinsky.Item  item    = new Widgets.ListViewKinsky.Item();
                    ListViewItem.ListViewSubItem subItem = new ListViewItem.ListViewSubItem();
                    subItem.Name = "Title";
                    subItem.Text = string.Format("{0}:{1}", s.Source.Room.Name, s.Source.FullName);
                    item.SubItems.Add(subItem);
                    //item.Icon = image;
                    //item.IconSelected = image;
                    item.Tag     = s;
                    item.Checked = s.IsPlayingSender(iSender);

                    int index = 0;
                    for (int i = 0; i < ListViewSelector.Items.Count; ++i, ++index)
                    {
                        ListViewItem        testItem = ListViewSelector.Items[i];
                        ModelSourceReceiver source   = testItem.Tag as ModelSourceReceiver;
                        string name = string.Format("{0}:{1}", source.Source.Room.Name, source.Source.FullName);
                        if (name.CompareTo(subItem.Text) > 0)
                        {
                            break;
                        }
                    }

                    ListViewSelector.Items.Insert(index, item);
                }
            }

            ListViewSelector.EndUpdate();
        }
コード例 #4
0
        protected override void EventListViewLibrary_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
        {
            TextFormatFlags flags = TextFormatFlags.VerticalCenter | TextFormatFlags.NoPrefix | TextFormatFlags.EndEllipsis;

            // Because of a bug in the underlying Win32 control, the DrawItem event occurs without accompanying DrawSubItem events once per row in the
            // details view when the mouse pointer moves over the row, causing anything painted in a DrawSubItem event handler to be painted over by a
            // custom background drawn in a DrawItem event handler. See the example in the OwnerDraw reference topic for a workaround that invalidates
            // each row when the extra event occurs. An alternative workaround is to put all your custom drawing code in a DrawSubItem event handler
            // and paint the background for the entire item (including subitems) only when the DrawListViewSubItemEventArgs.ColumnIndex value is 0.
            if (e.ColumnIndex == 0)
            {
                e.Graphics.FillRectangle(iBackBrush, e.Bounds);

                if (iIsAlbum && Items.Count > 0)
                {
                    ListViewKinsky.Item item  = Items[0] as ListViewKinsky.Item;
                    musicTrack          track = item.Tag as musicTrack;

                    int iconHeight = (int)(Columns[0].Width * 0.5f);
                    int iconOffset = 5;// (int)((Columns[0].Width - iconHeight) * 0.5f);

                    Image albumArt = item.Icon;
                    if (albumArt != null)
                    {
                        e.Graphics.FillRectangle(iBackBrush, item.Bounds.Left + iconOffset, item.Bounds.Top + iconOffset, iconHeight, iconHeight);
                        try
                        {
                            e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                            e.Graphics.DrawImage(albumArt, item.Bounds.Left + iconOffset, item.Bounds.Top + iconOffset, iconHeight, iconHeight);
                        }
                        catch (ArgumentException ex)
                        {
                            Trace.WriteLine(Trace.kKinsky, "ListViewLibrary.EventListViewLibrary_DrawSubItem: " + ex.Message);
                        }
                    }

                    if (track != null)
                    {
                        int x      = item.Bounds.Left + iconOffset + iconHeight + iconOffset;
                        int y      = item.Bounds.Top + iconOffset;
                        int width  = Columns[0].Width + item.Bounds.Left;
                        int height = iFont.Height;

                        e.Graphics.FillRectangle(iBackBrush, new Rectangle(x, y, width - x, height * 4));

                        string album = DidlLiteAdapter.Album(track);
                        if (!string.IsNullOrEmpty(album))
                        {
                            TextRenderer.DrawText(e.Graphics, album, iFont, new Rectangle(x, y, width - x, height), ForeColor, flags);
                            y += height;
                        }

                        string artist = DidlLiteAdapter.AlbumArtist(track);
                        if (!string.IsNullOrEmpty(artist))
                        {
                            TextRenderer.DrawText(e.Graphics, artist, iFont, new Rectangle(x, y, width - x, height), Color.DarkGray, flags);
                            y += height;
                        }

                        string genre = DidlLiteAdapter.Genre(track);
                        if (!string.IsNullOrEmpty(genre))
                        {
                            TextRenderer.DrawText(e.Graphics, genre, iFont, new Rectangle(x, y, width - x, height), Color.DarkGray, flags);
                            y += height;
                        }

                        TextRenderer.DrawText(e.Graphics, DidlLiteAdapter.ReleaseYear(track), iFont, new Rectangle(x, y, width - x, height), Color.DarkGray, flags);
                    }
                }
            }
            //Console.WriteLine("columIndex=" + e.ColumnIndex + ", header=" + e.Header + ", item=" + e.Item + ", itemIndex=" + e.ItemIndex + ", subItem=" + e.SubItem);
            //e.DrawDefault = true;
            //return;

            if (e.ColumnIndex > 0)
            {
                if (e.Item.Selected)
                {
                    e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
                    e.Graphics.FillRectangle(iHighlightBackBrush, e.Bounds);
                }
                else
                {
                    e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
                    e.Graphics.FillRectangle(iBackBrush, e.Bounds);
                }
            }

            ListViewItem.ListViewSubItem subItem = null;
            for (int i = 0; i < e.Item.SubItems.Count; ++i)
            {
                if (e.Item.SubItems[i].Name == e.Header.Name)
                {
                    subItem = e.Item.SubItems[i];
                    break;
                }
            }

            if (subItem != null)
            {
                if (e.Item.Selected)
                {
                    TextRenderer.DrawText(e.Graphics, subItem.Text, iFont, e.Bounds, HighlightForeColour, flags);
                }
                else
                {
                    if (e.Header.Name != "Title")
                    {
                        TextRenderer.DrawText(e.Graphics, subItem.Text, iFont, e.Bounds, ForeColorMuted, flags);
                    }
                    else
                    {
                        TextRenderer.DrawText(e.Graphics, subItem.Text, iFont, e.Bounds, ForeColor, flags);
                    }
                }
            }
        }