Form Öncelik Problemi
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Form Öncelik Problemi
Değerli Arkadaşlar..
Forum'da arattırdım ancak net birşey bulamadığım için kendim topic açmaya karar verdim. Problem şu Flight Simulator oyunu'nu duymuşsunuzdur, ben bu oyuna add on bir software geliştirdim ancak bir konuda feci bir şekilde takılmış bulunmaktayım. Normalde oyun 2 farklı mod'da çalışıyor birisi PENCERE MODU (border ve form caption) diğeri ise FULLSCREEN (border ve form caption yok).
Benim projem StayOnTop açılıyor buraya kadar herşey doğru. Pencere modun'da hiç bir problem yok aynı anda gözükebiliyor ama oyunu fullscreen mod'a çevirdiğimde benim formum ekrandan kayboluyor farklı bir add on bunu yapabiliyor her iki mod'da ekran da kalabiliyor.
Arkadaşlar yardım ederseniz sevinirim
Herkese şimdiden çok teşekkür ederim
Saygılarımla
Forum'da arattırdım ancak net birşey bulamadığım için kendim topic açmaya karar verdim. Problem şu Flight Simulator oyunu'nu duymuşsunuzdur, ben bu oyuna add on bir software geliştirdim ancak bir konuda feci bir şekilde takılmış bulunmaktayım. Normalde oyun 2 farklı mod'da çalışıyor birisi PENCERE MODU (border ve form caption) diğeri ise FULLSCREEN (border ve form caption yok).
Benim projem StayOnTop açılıyor buraya kadar herşey doğru. Pencere modun'da hiç bir problem yok aynı anda gözükebiliyor ama oyunu fullscreen mod'a çevirdiğimde benim formum ekrandan kayboluyor farklı bir add on bunu yapabiliyor her iki mod'da ekran da kalabiliyor.
Arkadaşlar yardım ederseniz sevinirim
Herkese şimdiden çok teşekkür ederim
Saygılarımla
Burak M.
Bilgi Paylaşmak İçin Vardır.
Bilgi Paylaşmak İçin Vardır.
Selam,
Büyük ihtimalle Flight Simulator oyunu DirecX (veya OpenGL, ikisinde de aynı durum sözkonusu) kullanıyordur. DiretX'de Full Screen bir pencerenin üstüne bir şeyler basabilmeniz için, yine DirecX kullanmanız gerekiyor. Bu DiretX'in ekran kartının belleğine direkt eriştiği için olan bir şey. Pencere modunda iken hala Windows'un GDI fonksiyonları kullanılır, sadece DirectX alanı olarak tanımlanan alan için özel bir tanımlama yapılır. Bu da pencere modunda iken performansın düşük olmasına sebep olur. MS bu yüzden pencere modunu tavsiye etmez.
Sonuç olarak bu add-onu'u DirectX veya OpenGL (Flight Simulator hangisini kullanıyorsa artık) ile geliştirmen gerekiyor.
Kolay gelsin,
Bahadır Alkaç
Büyük ihtimalle Flight Simulator oyunu DirecX (veya OpenGL, ikisinde de aynı durum sözkonusu) kullanıyordur. DiretX'de Full Screen bir pencerenin üstüne bir şeyler basabilmeniz için, yine DirecX kullanmanız gerekiyor. Bu DiretX'in ekran kartının belleğine direkt eriştiği için olan bir şey. Pencere modunda iken hala Windows'un GDI fonksiyonları kullanılır, sadece DirectX alanı olarak tanımlanan alan için özel bir tanımlama yapılır. Bu da pencere modunda iken performansın düşük olmasına sebep olur. MS bu yüzden pencere modunu tavsiye etmez.
Sonuç olarak bu add-onu'u DirectX veya OpenGL (Flight Simulator hangisini kullanıyorsa artık) ile geliştirmen gerekiyor.
Kolay gelsin,
Bahadır Alkaç
- Murat DİCLE
- Kıdemli Üye
- Mesajlar: 702
- Kayıt: 19 Nis 2006 04:12
- Konum: İstanbul
- İletişim:
Sanırım şöyle demek istemiş.
Senin açtığın pencerenin PARENT değeri, FS'nin açık olduğu handle ile aynı olmalı demek istiyor.
Ancak @opt2000 arkadaşın da dediği gibi FS DirectX ile destekleniyordur. Dolayısıyla bu özel alan içerisine standart windows bileşeni yerleştirilemez (sanırım). Bu nedenle aktif olan DirectX alanına yine DirectX komutlarıya bir pencere açman ve bu pencereninde PARENT değeri oyundaki DirectX alanının HANDLE'ı olmalıdır.
Senin açtığın pencerenin PARENT değeri, FS'nin açık olduğu handle ile aynı olmalı demek istiyor.
Ancak @opt2000 arkadaşın da dediği gibi FS DirectX ile destekleniyordur. Dolayısıyla bu özel alan içerisine standart windows bileşeni yerleştirilemez (sanırım). Bu nedenle aktif olan DirectX alanına yine DirectX komutlarıya bir pencere açman ve bu pencereninde PARENT değeri oyundaki DirectX alanının HANDLE'ı olmalıdır.
Selam,
Windowed modunda çalışan OpenGL veya DirectX penceresi, biraz daha farklı çalışır. Diğer pencerelerle uyumlu olabilmesi için, yarı GDI, yarı dx veya OpenGL arabirimi kullanır. Bu yüzden, örneğin bir formun içine dx alanı açabilir, standart Windows bileşenleri ekleyebilirsin, ama performans asla gerçek dx seviyesinde olmaz. Aynı durum OpenGL için de geçerlidir.
Flight Simulator'ün dokümanlarında bununla ilgili bilgiler olması gerekiyor, aksi takdirde add-on yazımı aslında illegal bir işlem olur. Sorunun cevabı büyük ihtimalle SDK dokümanlarında vardır. Bence burada vakit kaybetmektense, SDK dokümanlarını baştan sona dikkatlice (ve gerekirse tekrar tekrar) okumanda fayda var.
Kolay gelsin,
Bahadır Alkaç
Windowed modunda çalışan OpenGL veya DirectX penceresi, biraz daha farklı çalışır. Diğer pencerelerle uyumlu olabilmesi için, yarı GDI, yarı dx veya OpenGL arabirimi kullanır. Bu yüzden, örneğin bir formun içine dx alanı açabilir, standart Windows bileşenleri ekleyebilirsin, ama performans asla gerçek dx seviyesinde olmaz. Aynı durum OpenGL için de geçerlidir.
Flight Simulator'e nasıl add-on yazıldığını bilmeden bu cümleden bir şey anlamak mümkün değil. Eğer Flight Simulator'ün bir SDK'sı varsa, ki google'den hızlıca baktığımda var görünüyor, o zaman büyük ihtimalle SDK içinde bir Window class'ı verilmiştir ve senin kendi pencereni SDK'da verilmiş Window classından türetmen gerekiyor. Bir ihtimal de, Flight Simulator sana base bir class verir (abstract bir class) ve sen ondan kendi class'ını türetirsin, daha sonra da render listesine eklersin. Ama bu yazdıklarımın hepsi çok havada kalıyor, çünkü SDK hakkında en ufak bir bilgim bile yok.Make sure your window is a subclass of the FS window, it should work then.
Flight Simulator'ün dokümanlarında bununla ilgili bilgiler olması gerekiyor, aksi takdirde add-on yazımı aslında illegal bir işlem olur. Sorunun cevabı büyük ihtimalle SDK dokümanlarında vardır. Bence burada vakit kaybetmektense, SDK dokümanlarını baştan sona dikkatlice (ve gerekirse tekrar tekrar) okumanda fayda var.
Kolay gelsin,
Bahadır Alkaç