Sleva na školení Naučit se HTML & CSS, JS a Bootstrap
Získej 500 Kč na naše školení. Více zde
Probíhá výprodej HTML & CSS, JavaScript a Bootstrap

Lekce 3 - Modifikovaný ListView jako kontakt list a Mutex - ISIM

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

MainForm.cs

ListView

Designer

Properties

  • Name: contactListView
  • Dock: Fill // zaujme celé místo okýnka
  • Modifiers: Public // aby byla přístupná ze všady
  • MultiSelect: False // nechci vybírat více položek
  • View: Tile // se mi líbí nejvíc
  • OwnerDraw: true // vlastní kreslení itemů

Groups

  • onlineListViewGroup
  • offlineListVi­ewGroup

Code view

Tato metůdka zachycuje signál který se volá v SingleInstance díky Mutexu, ten zkontroluje, zda souhlasí a zobrazí okénko (aby se něco stalo, když klepu na soubor)

protected override void WndProc(ref System.Windows.Forms.Message m)
{
        if (m.Msg == Global.SingleInstance.WM_SHOWME)
                this.ShowForm();

        base.WndProc(ref m);
}

public void ShowForm()
{
        Show();
        WindowState = FormWindowState.Normal;
        Activate();
}

Při double clicku na položku se zobrazí okénko chatu:

private void contactListView_DoubleClick(object sender, EventArgs e)
{
        if (contactListView.SelectedItems.Count == 0)
                return;

        Global.ISIMFunctions.OpenChatForm(((contactListView.SelectedItems[0]) as ContactListViewItem).contact, true);
}

A takto si kreslím položci

private void contactListView_DrawItem(object sender, DrawListViewItemEventArgs e)
{
        if (e.ItemIndex == -1) return;

        ISIMContact contact = (contactListView.Items[e.ItemIndex] as ContactListViewItem).contact;

        using (Brush textBrush = new SolidBrush(Color.White))
        {
                Brush textColor = Brushes.Black;

                // rámeček
                if (((e.State & ListViewItemStates.Selected) == ListViewItemStates.Selected) || (e.Item.Selected == true))
                {
                        e.Graphics.FillRectangle(Brushes.MediumSeaGreen, e.Bounds);
                        e.Graphics.DrawRectangle(new Pen(Brushes.DarkGreen), e.Bounds.X, e.Bounds.Y, e.Bounds.Width - 1, e.Bounds.Height - 1);
                        textColor = Brushes.White;
                }
                else if (contact.unreadedMessage == true)
                {
                        e.Graphics.FillRectangle(Brushes.Orange, e.Bounds);
                        e.Graphics.DrawRectangle(new Pen(Brushes.Red), e.Bounds.X, e.Bounds.Y, e.Bounds.Width - 1, e.Bounds.Height - 1);
                }
                else
                        e.Graphics.FillRectangle(Brushes.White, e.Bounds);

                // avatar
                Bitmap contactAvatar = Global.Converter.GetContactAvatar(contact.id);
                if (contact.availability == Global.Availability.Offline)
                        contactAvatar = Global.ISIMFunctions.MakeImageGrayscale(contactAvatar);

                e.Graphics.DrawImage(contactAvatar, e.Bounds.Left + 1, e.Bounds.Top + 1, 26, 26);

                contactAvatar.Dispose();

                // dostupnost, píše, nepřečtená zpráva
                Bitmap availabilityImage;
                if (contact.unreadedMessage == true)
                        availabilityImage = new Bitmap(Global.appRunPath + "graphics" + System.IO.Path.DirectorySeparatorChar + "messageIcon.png");
                else
                        availabilityImage = Global.Converter.GetContactAvailabilityImage(contact.availability);

                e.Graphics.DrawImage(availabilityImage, e.Bounds.Left + 5 + 25, e.Bounds.Top + 1, 12, 12);

                e.Graphics.DrawImage(Global.Converter.GetProtocolIcon(contact.protocol), e.Bounds.Left + 5 + 25, e.Bounds.Top + 1 + 13, 12, 12);

                e.Graphics.DrawString(contact.name, e.Item.Font, textColor, e.Bounds.Left + 2 + 40, e.Bounds.Top + 1);
        }
}

 

 

Článek pro vás napsal David Jančík
Avatar
Jak se ti líbí článek?
1 hlasů
Autor je vášnivý programátor a vizionář. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.
Předchozí článek
Přítomnost .NET 3.5 SP1 a Mutex - ISIM
Všechny články v sekci
Programujeme vlastní Instant Messenger ::ISIM::
Miniatura
Následující článek
Interface pro kontakt, Adaptee Wrapper a komparátor - ISIM
Aktivity (1)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!