Java týden Body zdarma
Využij podzimních slev a získej od nás až 40 % bodů zdarma! Více zde
Pouze tento týden sleva až 80 % na Java e-learning!

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

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

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í!