2010-10-15 16 views
28

Windows'ta, ön plan ile etkin pencere arasındaki fark nedir? Özel olmak gerekirse, bir ön plan penceresi hangi koşullar altında aktif bir pencere olamaz? Eğer 2 terim aynı kavramı belirtiyorsa, neden 2 terim vardır.Ön Plan Vs Aktif pencere

msdn belgeler burada "bir pencere tıklayarak ya da ALT + TAB veya ALT + ESC tuş kombinasyonu kullanılarak" aktif hem de ön bir pencere sağlar bahseder. 2 terms.Check MSDN arasındaki fark hakkında açıkça hiçbir şey yoktur. Bir ön plan ve arka plan penceresi

İlk aktif pencereler ile ilgisi olmayan, bu parçacığı ile ilgisi var, aşağıya bakınız: buraya yanı kafa karıştırıcı ama biraz benim revize almaktır

cevap

37

Etkin pencere (GetActiveWindow() sonucu), giriş yapan numaralı ileti dizisine eklenmiş olan penceredir. Ön plan penceresi (GetForegroundWindow() sonucu), çağıran ileti dizisiyle ilişkisinden bağımsız olarak şu anda giriş yapan penceredir. Aktif pencere esasen uygulamanız için yerelleştirilmiştir; ön plan penceresi sisteme globaldir.

Örneğin, başka bir işleme ait bir pencere ön planda ise, kendi işleminizin içinden GetActiveWindow() numaralı telefonu arayarak NULL döndürülür.

Ön plan penceresi olmanın aktif pencere olduğunu ima etmenin doğru olduğuna inanıyorum.Ayrıca, modern Windows'ta, uygulamaların genellikle başka bir işlemden odaklanmak için SetForegroundWindow() kullanamazsınız (bu işlem AllowSetForegroundWindow aracılığıyla açıkça izin verilmedikçe).

+1

Bu, doğru cevaptır. Okumak için yararlı olan [bu blog yazısı] (http://blogs.msdn.com/b/oldnewthing/archive/2008/10/06/8969399.aspx). – Ruslan

+0

Tam olarak doğru değil, bir arka plan iş parçacığından 'GetActiveWindow' işlevini 'NULL' döndürüyor. Bir arka plan iş parçacığı penceresi ön plan penceresini oluşturmadan etkinleştirilebilir (örneğin, gereksinimlerini karşılamadan "SetForegroundWindow" ifadesini çağırarak) veya bir uygulamayı başlatma ile uygulama arabirimini gösteren uygulama arasında başka bir uygulamaya geçiş yaparsanız. Ancak, etkin pencere hakkında neredeyse haklısınız: Aktif pencere, uygulama veya işlem başına değil, ** iş parçacığı ** (veya girdiye bağlı iş parçacığı grubu) başına sanallaştırılmıştır. – IInspectable

+0

Kabul ettiğim önceki cevap daha sonra düzenlenmişti ve şimdi benim için çok az şey ifade ediyor. Bu yüzden kabul ettiğim cevabı 5 ve 1/2 yıl sonra değiştirdim !!!!!!!!!!!!!!!!!!!!!! – JavaMan

8

ben MSDN açıklamasını bulabilirsiniz. Bu yüzden aktif bir pencere olarak arka plan penceresine sahip olmak teknik olarak mümkündür ancak kafa karıştırıcıdır ve sistem bunu sizin için yapmaz, bunun yerine uygulamanızın ör. Arka plan penceresini etkin hale getirmek için SetWindowPos.

Sistem, bir defada yalnızca bir üst düzey aktif pencereye sahip olabilir, sistem bir alt pencerede çalışıyorsanız üst düzey pencereyi etkinleştirir. Tüm giriş daha sonra aktif pencereye yönlendirilir ve daha sonra normal olarak çocuk penceresine iletilir. MSDN'den

Etkin Pencere

aktif pencere kaynaktan

/----------------------\ 
|      | 
| FOREGROUND WINDOW |--\ 
|      | | 
\----------------------/ | 
    | BACKGROUND WINDOW  | 
    \-----------------------/ 

/----------------------\ 
|      | 
| ACTIVE WINDOW  |--\ 
|      | | 
\----------------------/ | 
    | BACKGROUND WINDOW  | 
    \-----------------------/ 

kullanıcı şu anda çalışmakta olduğu uygulamanın üst düzey penceredir. Kullanıcının aktif pencereyi kolayca tanımasını sağlamak için sistem, z-sırasının en üstüne yerleştirir ve başlık çubuğunun rengini değiştirir ve sistem tanımlı aktif pencere renklerine sınırlar. Sadece en üst düzey bir pencere aktif bir pencere olabilir. Kullanıcı bir çocuk penceresi ile çalışırken, sistem alt pencere ile ilişkili üst düzey ana pencereyi etkinleştirir.

ön/arka

Her bir işlem yürütme birden fazla parçacığı olabilir, ve her bir iplik pencere oluşturabilir. Kullanıcının çalıştığı pencereyi oluşturan iş parçacığı, ön plan iş parçacığı olarak adlandırılır ve pencereye ön plan penceresi denir. Tüm diğer iş parçacıkları arka plan iş parçacıklarıdır ve arka plan iş parçacıklarının oluşturduğu pencereler arka plan pencereleri olarak adlandırılır.

+0

Microsoft, bir ön plan penceresinin (ön plan iş parçacığına ait) daha öncelikli olduğunu söyledi. 3. durumda, ACTIVE PENCERE aynı ayrıcalığı aldı mı? – pinichi

+0

msdn etkin pencerenin açıklaması: * Etkin bir pencere, kullanıcının şu anda çalıştığı uygulamanın en üst düzey penceredir. Kullanıcının aktif pencereyi kolayca tanımasına izin vermek için sistem, z-order ** 'nın ** üst kısmına yerleştirir ve başlık çubuğunun rengini değiştirir ve sistem tanımlı aktif pencere renklerine sınırlar. Sadece en üst düzey bir pencere aktif bir pencere olabilir. Kullanıcı bir çocuk penceresi ile çalışırken, sistem alt pencere ile ilişkili üst düzey ana pencereyi etkinleştirir. * Yukarıda verilen 3. davanın olması mümkün mü? – JavaMan

+2

Evet, bu mümkün. Üst Pencerede Üst Pencerede (WS_EX_TOPMOST var) etkin bir pencere üstüste binebilir (başlık çubuğu bulanıklaştırması, metin girme, metin imleci ... olsa da) – pinichi

İlgili konular