[C++] Metin2 Client Window Centering Bug (Win10/11) – Gerçek Sebep ve Kalıcı Çözüm

Kaptan Yosun

Co-Co Admin
Moderatör
Geliştirici
Yardımsever Üye
Usta Üye
Mesaj
1.500
Çözümler
55
Beğeni
2.556
Puan
1.839
Ticaret Puanı
0
:mmt-hakkinda:
Metin2 client’ında uzun zamandır olan küçük bir problem vardı:
oyun penceresi yatayda birkaç piksel sağa kayık şekilde açılıyordu.


Benim sistemimde bu fark yaklaşık 7 piksel civarındaydı.
Çok büyük bir şey değil ama “tam ortada değil” hissi net olarak vardı.

Before: pencere yatayda hafif sağa kayık
1768289139429.webp


After: pencere taskbar pozisyonu farketmeksizin tam olarak ortalanmış


Sorun Ne?​

Sorun basit bir matematik hatası değil.

Win10/11’de:
  • GetWindowRect() pencerenin gerçek görsel sınırlarını birebir yansıtmıyor
  • DWM (Desktop Window Manager) nedeniyle pencerenin sol–sağ çerçeveleri simetrik değil
Bu yüzden klasik:
C++:
Genişlet Daralt Kopyala
(screenWidth - windowWidth) / 2
hesabı her zaman tam merkez vermiyor.

Ne Değişti?​

Bu çalışmayla birlikte birkaç küçük ama önemli temizlik de yapıldı:
  • Client penceresinin yatayda ~7 piksel sağa kayık açılmasına sebep olan merkezleme mantığı düzeltildi
  • Pencere artık kullanıcının gerçekten gördüğü frame’e göre ortalanıyor (Win10/11 DWM uyumlu)
  • GetWindowRect için yazılmış, WinAPI ismiyle çakışan gereksiz wrapper fonksiyon kaldırıldı
  • FindWindow ile pencere başlığına bakarak yapılan “another window” reposition logic’i tamamen kaldırıldı
    • Bu kod modern Windows’ta deterministik çalışmıyordu
    • Ayrıca merkezleme mantığını bozuyordu
  • Sabit offset, magic number veya “şuraya biraz kaydır” tarzı hack’ler kullanılmadı
  • Pencere artık her zaman work area içinde, taskbar’a taşmadan ve kayık olmadan açılıyor

Nasıl Yapılır
Burayı görüntülemek için üye girişi yapmalı veya kayıt olmalısınız.
 
Geri
Üst