Rehber C# dili ile yazılan programda başlık çubuğu (titlebar) rengini değiştirme

Merhaba 😇

Bugün sizlerle birlikte C# dili ile, yani Form veya WPF olarak yazılmış bir yazılımın titlebar, yani başlık çubuğu rengini değiştirmeyi göstereceğim.

Bildiğiniz üzere bir program yazınca başlık çubuğu rengi bu şekilde gözüküyor.

1679051407985.png


Özellikle koyu tema bir yazılım geliştirdiğiniz zaman sinir bozucu olabiliyor.

Normalde varsayılan olarak WinForm bunu desteklemez. Hatta çoğu zaman WPF'de tam olarak desteklemez.

O yüzden DWM (Desktop Window Manager) API kullanacağız. Bu API, Windows'un kendi içinde yer alan bir API'dir.

Şimdi başlık çubuğu rengini değiştirelim.

Not:
Bu yapacağımız renk değiştirme işlemleri sadece Windows 10 ve 11'de çalışır.

Gerekli kütüphaneler;
C#:
using System;
using System.Windows.Forms; // WPF ise gerekli değil.
using System.Runtime.InteropServices;

Öncelike Form'un global alanına ilgili kodu yazmanız lazım.

1679052642903.png

C#:
// ======================================================================================================
// TITLE BAR SETTINGS DWM API - TECHNOPAT SOSYAL
[DllImport("DwmApi")]
private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, int[] attrValue, int attrSize);

Ardından Form veya WPF programının Load (Form) veya Start (WPF) işlemine altta verdiğim kodu yazmanız gerekiyor.

1679052658168.png

C#:
try{
    if (DwmSetWindowAttribute(Handle, 19, new[]{ 1 }, 4) != 0){
        DwmSetWindowAttribute(Handle, 20, new[]{ 1 }, 4);
    }
}catch(Exception){ }

Bu kod titlebar, yani başlık çubuğu rengi beyaz ise rengini siyaha çevirir. Ardından metin ve pencere boyutlandırma renklerini beyaza çeviriyor.

1679051779349.png


Gördüğünüz üzere, artık başlık çubuğu rengi siyah oldu.

Umarım işinize yaramıştır.
Yazılım rehberlerimin devamı gelecek.

İyi çalışmalar, kolay gelsin
😎
 
Son düzenleme:
Tekrar merhaba size bir sorum olacaktı. Bazı programların pencere sistemi çok gelişmiş, dinamik ve düzenlenebilir oluyor (Unreal E., Adobe Programları,Blender gibi) visual studio da böyle düzenlenebilir arayüzler yapmak mümkünmüdür yoksa görsel olarak değilde en baştan kod olarakmı yazmak lazım?
 
Çok yararlı bir rehber olmuş. C# dilini ilk öğrendiğim zamanlar kendimi biraz geliştirdikten sonra havalı bir program yazmak istemiştim ancak 2 saat boyunca titlebar rengini yapmaya çalışmıştım :D o zamanlar stackedoverflowdan haberim yoktu ve her kaynakta başka class veya başka public kullandıkları için zorlanmıştım. Sonuç olarak kendi titlebarımı yapmıştım. Anlatım biçimi hoşuma gitti. Kendi titlebarımızı yapmak içinde bir rehber hazırlayabilirsiniz.

Çaktırmayın bu titlebar rengini ayarlama işini şimdi bu rehberden öğrendim bende.
 
Geri beyaz haline çevirmek isterseniz eğer alttaki kod ile değiştirebilirsiniz;

C#:
try{ if (DwmSetWindowAttribute(Handle, 20, new[]{ 1 }, 4) != 1){ DwmSetWindowAttribute(Handle, 20, new[]{ 0 }, 4); } }catch (Exception){ }
 
Tekrar merhaba size bir sorum olacaktı. Bazı programların pencere sistemi çok gelişmiş, dinamik ve düzenlenebilir oluyor (Unreal E., Adobe Programları,Blender gibi) visual studio da böyle düzenlenebilir arayüzler yapmak mümkünmüdür yoksa görsel olarak değilde en baştan kod olarakmı yazmak lazım?
Günümüz teknolojisinde bu rehberdekiler zaten kullanılmıyor. WinForm veya WPF ile sadece vakit kaybedersiniz. UWP ve bir sonraki nesil Windows APP SDK olarak gözüküyor.

 
Merhaba 😇

Bugün sizlerle birlikte C# dili ile, yani Form veya WPF olarak yazılmış bir yazılımın titlebar, yani başlık çubuğu rengini değiştirmeyi göstereceğim.

Bildiğiniz üzere bir program yazınca başlık çubuğu rengi bu şekilde gözüküyor.

Eki Görüntüle 1704521

Özellikle koyu tema bir yazılım geliştirdiğiniz zaman sinir bozucu olabiliyor.

Normalde varsayılan olarak WinForm bunu desteklemez. Hatta çoğu zaman WPF'de tam olarak desteklemez.

O yüzden DWM (Desktop Window Manager) API kullanacağız. Bu API, Windows'un kendi içinde yer alan bir API'dir.

Şimdi başlık çubuğu rengini değiştirelim.

Not:
Bu yapacağımız renk değiştirme işlemleri sadece Windows 10 ve 11'de çalışır.

Gerekli kütüphaneler;
C#:
using System;
using System.Windows.Forms; // WPF ise gerekli değil.
using System.Runtime.InteropServices;

Öncelike Form'un global alanına ilgili kodu yazmanız lazım.

Eki Görüntüle 1704544
C#:
// ======================================================================================================
// TITLE BAR SETTINGS DWM API - TECHNOPAT SOSYAL
[DllImport("DwmApi")]
private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, int[] attrValue, int attrSize);

Ardından Form veya WPF programının Load (Form) veya Start (WPF) işlemine altta verdiğim kodu yazmanız gerekiyor.

Eki Görüntüle 1704545
C#:
try{
    if (DwmSetWindowAttribute(Handle, 19, new[]{ 1 }, 4) != 0){
        DwmSetWindowAttribute(Handle, 20, new[]{ 1 }, 4);
    }
}catch(Exception){ }

Bu kod titlebar, yani başlık çubuğu rengi beyaz ise rengini siyaha çevirir. Ardından metin ve pencere boyutlandırma renklerini beyaza çeviriyor.

Eki Görüntüle 1704526

Gördüğünüz üzere, artık başlık çubuğu rengi siyah oldu.

Umarım işinize yaramıştır.
Yazılım rehberlerimin devamı gelecek.

İyi çalışmalar, kolay gelsin
😎
Hocam peki burada rengi siyah değil de kendimiz verebiliyor muyuz? Kırmızı,mor gibi değiştirmek mesela.
 
C ya da C++ ile yapmak isteyenler:
C:
HMODULE module = LoadLibrary("dwmapi.dll");
if(module == NULL)
{
    MessageBox(NULL, "dwmapi.dll bulunamadi", "Hata", MB_OK | MB_ICONERROR);
    ExitProcess(1);
}

FARPROC ProcDwmSetWindowAttribute = GetProcAddress(module, "DwmSetWindowAttribute");
if(ProcDwmSetWindowAttribute == NULL)
{
    MessageBox(NULL, "dwmapi.dll icinde DwmSetWindowAttribute bulunamadi", "Hata", MB_OK | MB_ICONERROR);
    ExitProcess(1);
}
    
DWORD pvAttribute[] = {1};
if(ProcDwmSetWindowAttribute(hwnd, 19, pvAttribute, 4) != 0)
{
    ProcDwmSetWindowAttribute(hwnd, 20, pvAttribute, 4);
}
 

Geri
Yukarı