Dev C++ ile oluşturulan Windows uygulaması rengi

G3njoY

Yoctopat
Katılım
7 Haziran 2021
Mesajlar
16
Daha fazla  
Cinsiyet
Erkek
Merhabalar!

Başlığı tam olarak yazamamış olabilirim, içeriği en iyi bu şekilde özetler diye düşündüm. Uzatmadan konuya değinmek istiyorum. Başlamadan önce, programlamada yeni olduğumu ve ara yüz oluşturmaya yeni başladığımı söylemenin yararlı olacağını düşünüyorum. Yani C++'ın syntax'ına, derlemeye, header dosyalarına falan az da olsa aşinayım :)

Dev C++ ile Windows projesi oluşturdum ve kullandığım dili de C++ yaptım. Ardından ```main.cpp``` dosyası açıldı ve kaydettim. Bildiğiniz gibi bu dosya otomatik olarak açılıyor. Toplam 66 satırdan oluşan bu ```main``` dosyasında bulunan yorum satırlarını Türkçe yapmak ve bunu yaparken de öğrenmek istedim.

33. satıra kadar güzel ilerledim. Şu yorum vardı: ```White, COLOR_WINDOW is just a #define for a system color, try Ctrl+Clicking it```

Ben de burada belirtilen koda CTRL basarak tıkladım ve ```winuser.h``` dosyası açıldı. 3101. satırı gösteriyordu. Bu satır şöyle: ```#define COLOR_WINDOW 5```

"5", beyaz renginin kod rengidir diye düşündüm ve farklı bir sayı girdim. Mesela 4. ```winuser.h``` dosyasını kaydedip derledim ve ```main.cpp``` dosyasını da derleyip çalıştırdım. Ekran yine beyaz renkteydi ve derlediğimde herhangi bir hata almadım.

Bu yorum satırını, kodu ve ```winuser.h``` dosyasındaki 3101. satırı açıklayabilir misiniz? Ayrıca arka planın rengini değiştirmek konusunda da yardımınıza ihtiyacım olacak.
 
Son düzenleyen: Moderatör:
Standart header dosyalarıyla oynamayın, eski haline getirin.
WHITE varsa, dosyayı karıştırırsınız, ya da daha akıllıca bir şekilde dokümantasyona bakarsınız ve istediğiniz renk için olanını da bulursunuz. Hatta onu da yapmazsınız, önce bir düzgünce kod paylaşırsınız. Muhtemelen WHITE o header'da tanımlanmış ve sadece integer değeri olan bir şey. Bu yüzden oraya elinizle 3 yazsanız da hata vermeyecektir diye düşünüyorum.

winuser.h dosyasındaki 3101. satırı açıklayabilir misiniz?
Açıklayamam çünkü aynı isimli dosyanın bir sürü sürümü var. Kod görmek gerekiyor. Tüm dosyayı paylaşın.
 
Winuser.h dosyasını neden modifiye ettin ki, o Windows'un Win32 API'sine ait bir dosya.

Sanırım Win32 uygulaması oluşturdun ve uygulamanın pencere sınıfı (window class) struct'ında renk değiştirmek istiyorsun. Oradaki #define ile tanımlanmış olan renkleri deneyebilirsin.
 
Kodları paylaşırsanız daha iyi yardımcı olabiliriz :)
önce bir düzgünce kod paylaşırsınız.
Paylaşmadığım için kusuruma bakmayın.


GitHub kullanmayı pek bilmiyorum. Ancak bahsettiğim dosyalar burada.

Standart header dosyalarıyla oynamayın, eski haline getirin.
Standart olduğunu bilmiyordum, düzelttim.

WHITE varsa, dosyayı karıştırırsınız, ya da daha akıllıca bir şekilde dokümantasyona bakarsınız ve istediğiniz renk için olanını da bulursunuz.
Buraya gelmeden önce yaptığım şeylerden biriydi. Ancak herhangi bir renk ismi bulamadım. StackOverflow'da ise başka şeyler çıktı. Muhtemelen doğru bir şekilde araştıramadım.
 
Araştırırken çok fazla zorlamaya gerek yok aslında atadığınız sistem değişkenini(hbrBackground) yazıp aratsanız bile bir dünya örnek gelir.

Official dökümen için;

Type: HBRUSH

A handle to the class background brush. This member can be a handle to the physical brush to be used for painting the background, or it can be a color value.

Çok basit bir arama(create HBRUSH color) daha yaparak nasıl renk oluşturulduğu hakkında da örnekler bulabilirsin.

Gerekli API;

color

The color of the brush. To create a COLORREF color value, use the RGB macro.

Sonuç olarak;
wc.hbrBackground = CreateSolidBrush(RGB(red, green, blue));
 
İlk olarak sana Dev-C++ yerine Code::Blocks kullanmanı şiddetle öneriyorum. Otomatik önerme özelliği Dev-C++'taki gibi çalışmamazlık yapmıyor ve beraberinde gelen MinGW derleyicisi daha yeni bir sürümde olduğu için modern C++'ı -veya C- derliyor.

Evet, bu bahsetmiş olduğun tanım pencerenin arka plan rengini belirtiyor. Bu varsayılan olarak tanımlı, CreateSolidBrush() ile kendi rengini de koyabilirsin.
 
3101. satırda pencere rengini ifade eden şey 5 olarak nitelendirilmiş. Pencere renginin değeri değil.

Renk değiştir diye bir fonksiyon olduğunu düşünün. 2 parametre alsın. Birisi neresi olduğu, diğeri de ne renk olduğu. Siz ilkine COLOR_WINDOW veya 5 derseniz pencere rengi olur. İkincisinde ise rengi ifade eden bir şey verirsiniz. Bir yerlerde tip bir şey var bence. Dolusuyla makro var zaten.

Bir sürü tip tanımlaması var. Benim için oturup ayrı ayrı ne olduklarına bakmak gerekiyor. HBRUSH orada iş yapıyor. O da CreateSolidBrush imiş. Rengi onunla veriyormuşsun. Öyle öyle gidiyor.
 

Geri
Yukarı