Java týden První novoroční výprodej
Hledáš brigádu v IT, která bude 100 % home office a 100 % flexibilní? Pak napiš na: redakce [zavináč] itnetwork.cz pro více info!
80 % bodů zdarma díky akci Black Friday! Tento týden rovněž sleva na e-learning Java až 80 %
Avatar
Tomáš Hauser:27.3.2018 23:14

Zdravím,
poradil by mi někdo, jak mám nastavit barvu okna Windows Formy? Jakože toho okna jak je tam minimalizovat a křížek, jestli víte, co myslím.
Jelikož umím googlit, tak jsem našel tohle

this.BackColor = Color.FromArgb(255, 232, 232);

, ale nemám ponětí kam to mám napsat. Poradí někdo?
Díky.

 
Odpovědět
27.3.2018 23:14
Avatar
Jakub Hýža
Člen
Avatar
Jakub Hýža:28.3.2018 7:11

Tím kódem zbarvíš pozadí své aplikace, ale mám dojem že ty chceš přebarvit "form border". Buď do své aplikace vlož nějakou knihovnu, která ho změní, nebo ho skryj a udělej si vlastní s pomocí panelu.

Nahoru Odpovědět
28.3.2018 7:11
Sleep(); Eat();. Code(); Repeat();
Avatar
VitekST
Člen
Avatar
Odpovídá na Tomáš Hauser
VitekST:28.3.2018 15:10

Barvu okna, jako takovou, nelze změnit, jelikož ji kreslí operační systém na základě aktuálního vizuálního stylu.

Existují ale dva workaroundy:

  1. Jak Jakub zde zmínil, nastavit okno na bezokrajové (vlastnost FormBorderStyle) a okraj okna si udělat z již dostupných ovládacích prvků.
  2. Sic opět nastavit okno na bezokrajové, ale okraj si kreslit po svém, přepsáním metody OnPaint a následně naslouchat na události myši. Praktický příklad: https://github.com/…erialForm.cs
 
Nahoru Odpovědět
28.3.2018 15:10
Naši partneři možná hledají právě tebe!
Avatar
Radek Chalupa:28.3.2018 16:15

Pokud jakj odhadují kolegové myslíš neklientskou oblast (titulek a rámeček) tak můžeš v přepsané WndProc odchytit zprávu WM_NCPAINT (přijde při požadavku na vykreslení do neklientské oblasti), vykreslit si to po svém a zprávu nepustit k dalšímu zpracování.
Např. takhle:

public partial class Form1 : Form
{
        const int WM_NCPAINT = 0x85;
        [DllImport("user32.dll")]
        static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
        [DllImport("User32.dll")]
        private static extern IntPtr GetWindowDC(IntPtr hWnd);

        public Form1()
        {
                InitializeComponent();
        }

        protected override void WndProc(ref Message m)
        {
                if (WM_NCPAINT == m.Msg)
                        nc_paint(m.HWnd);
                else
                        base.WndProc(ref m);
        }

        private void nc_paint(IntPtr hwnd)
        {
                IntPtr hdc = GetWindowDC(hwnd);
                if ((int)hdc != 0)
                {
                        Graphics g = Graphics.FromHdc(hdc);
                        g.FillRectangle(Brushes.Chocolate, 0, 0, Width,
                                SystemInformation.CaptionHeight + SystemInformation.FrameBorderSize.Height);
                        g.FillRectangle(Brushes.Chocolate, 0, Height - SystemInformation.FrameBorderSize.Height,
                                Width, SystemInformation.FrameBorderSize.Height);
                        g.FillRectangle(Brushes.Chocolate, 0,
                                SystemInformation.FrameBorderSize.Width,
                                SystemInformation.FrameBorderSize.Width, Height);
                        g.FillRectangle(Brushes.Chocolate, Width - SystemInformation.FrameBorderSize.Width,
                                SystemInformation.FrameBorderSize.Width,
                                SystemInformation.FrameBorderSize.Width, Height);
                        g.Flush();
                        ReleaseDC(hwnd, hdc);
                }
        }

        private void button1_Click(object sender, EventArgs e)
        {
                Close();
        }
}

samozřejmě ještě do titulku můžeš vypsat text a vyktreslit ta systémová tlačítka - to už je jen rutinní práce.

Radek Chalupa

  • individuální konzultace, školení programování, (C/C++, C#, WinAPI, .NET, COM, ATL, MFC...)
  • vývoj software na zakázku

http://www.radekchalupa.cz

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět
28.3.2018 16:15
Avatar
Tomáš Hauser:29.3.2018 0:26

Díky moc všem.

 
Nahoru Odpovědět
29.3.2018 0:26
Avatar
Matyáš Černohous:14. ledna 8:41

Radek Chalupa můžu se zeptat jak se dají vykreslit systémová tlačítka do toho upraveného přemalovaného formu ? Píšeš, že je to rutinní práce dodělat text a tlačítka, ale já jsem se u těch tlačítek zasekl a nevím jak se pohnout dál :-S . Musí se zase přepsat nějaká metoda z WIN32 API ? Díky :-) .

 
Nahoru Odpovědět
14. ledna 8:41
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.

Zobrazeno 6 zpráv z 6.