Slevový týden - Březen C# týden
Využij náš slevový týden a získej až 30 % bodů navíc zdarma! Zároveň také probíhá C# týden se slevou na e-learning až 80 %
Hledáme fulltime programátora do ITnetwork týmu -100% homeoffice, 100% časově flexibilní #bezdeadlinu Mám zájem!

3. diel - Modifikovaný ListView ako kontakt list a mutex - isim

MainForm.cs

ListView

designer

Tento výukový obsah pomáhajú rozvíjať nasledujúce firmy, ktoré možno hľadajú práve teba!

Properties

  • Name: contactListView
  • Dock: Fill // zaujme celé miesto okienka
  • Modifiers: Public // aby bola prístupná zo vsadí
  • Multiselect: False // nechcem vyberať viac položiek
  • View: Tile // sa mi páči najviac
  • OwnerDraw: true // vlastné kreslenie itemov

Groups

  • onlineListViewGroup
  • offlineListVi­ewGroup

code view

Táto metůdka zachytáva signál ktorý sa volá v Singleinstance vďaka mutex, ten skontroluje, či súhlasí a zobrazí okienko (aby sa niečo stalo, keď klopem na súbor)

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

Pri double clicku na položku sa zobrazí okienko chate:

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žke

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ánok pre vás napísal David Jančík
Avatar
Ako sa ti páči článok?
Ešte nikto nehodnotil, buď prvý!
Autor je vášnivý programátor. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.
Predchádzajúci článok
Prítomnosť .NET 3.5 SP1 a mutex - isim
Všetky články v sekcii
Programujeme vlastné Instant Messenger :: isim ::
Miniatúra
Nasledujúci článok
Interface pre kontakt, Adaptee Wrapper a komparátor - isim
Aktivity (1)

 

 

Komentáre

Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!