Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET. Zároveň využij akci až 30 % zdarma při nákupu e-learningu - Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
discount 30 + hiring

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

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);
    }
}

 

Všechny články v sekci
Programujeme vlastní Instant Messenger ::ISIM::
Přeskočit článek
(nedoporučujeme)
Interface pro kontakt, Adaptee Wrapper a komparátor - ISIM
Článek pro vás napsal David Jančík
Avatar
Uživatelské hodnocení:
1 hlasů
Autor je vášnivý programátor. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.
Aktivity

 

 

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