Aracılığıyla paylaş


Klavye Hızlandırıcıları Hakkında

Hızlandırıcılar menülerle yakından ilgilidir; her ikisi de kullanıcıya uygulamanın komut kümesine erişim sağlar. Genellikle kullanıcılar, komut kümesini öğrenmek için uygulamanın menülerine güvenir ve ardından uygulama konusunda daha yetkin hale geldikçe hızlandırıcıları kullanmaya geçer. Hızlandırıcılar, komutlara menülerden daha hızlı ve daha fazla doğrudan erişim sağlar. En azından, bir uygulama daha yaygın olarak kullanılan komutlar için hızlandırıcılar sağlamalıdır. Hızlandırıcılar genellikle menü öğeleri olarak var olan komutlar oluştursa da, eşdeğer menü öğeleri olmayan komutlar da oluşturabilir.

Bu bölümde aşağıdaki konular ele alınır.

Hızlandırıcı Tabloları

Hızlandırıcı tablosu, her biri ayrı bir hızlandırıcı tanımlayan ACCEL yapılarından oluşan bir diziden oluşur. Her ACCEL yapısı aşağıdaki bilgileri içerir:

  • Hızlandırıcının tuş kombinasyonu.
  • Hızlandırıcının tanımlayıcısı.
  • Çeşitli bayraklar. Buna, hızlandırıcı kullanıldığında ilgili menü öğesini (varsa) vurgulayarak sistemin görsel geri bildirim sağlayıp sağlamayacağını belirten bir öğe dahildir

Belirtilen bir iş parçacığının hızlandırıcı tuş vuruşlarını işlemek için, geliştiricinin iş parçacığının ileti kuyruğuyla ilişkili ileti döngüsünde TranslateAccelerator işlevini çağırması gerekir. TranslateAccelerator işlevi, kısayol tablosundaki bir girişle eşleşen tuş bileşimlerini denetleyip ileti kuyruğuna klavye girişini izler. TranslateAccelerator bir eşleşme bulduğunda, klavye girişini (WM_KEYUP ve WM_KEYDOWN iletileri) bir WM_COMMAND veya WM_SYSCOMMAND iletisine çevirir ve ardından iletiyi belirtilen pencerenin pencere yordamına gönderir. Aşağıdaki çizimde hızlandırıcıların nasıl işlendiği gösterilmektedir.

klavye hızlandırıcısı işleme modeli

WM_COMMAND iletisi, TranslateAccelerator iletiyi oluşturmasına neden olan hızlandırıcının tanımlayıcısını içerir. Pencere yordamı, iletinin kaynağını belirlemek için tanımlayıcıyı inceler ve ardından iletiyi uygun şekilde işler.

Hızlandırıcı tabloları iki farklı düzeyde bulunur. Sistem, tüm uygulamalar için geçerli olan tek bir sistem çapında hızlandırıcı tablosu tutar. Bir uygulama sistem hızlandırıcısı tablosunu değiştiremez. Sistem hızlandırıcı tablosu tarafından sağlanan hızlandırıcıların açıklaması için bkz. Hızlandırıcı Kısayol Tuşları Atamaları.

Sistem ayrıca her uygulama için hızlandırıcı tablolarını korur. Bir uygulama, kendi pencereleriyle kullanmak üzere istediğiniz sayıda hızlandırıcı tablosu tanımlayabilir. Benzersiz bir 32 bit tanıtıcı (HACCEL) her tabloyu tanımlar. Ancak, belirtilen iş parçacığı için aynı anda yalnızca tek bir hızlandırıcı tablosu etkin olabilir. TranslateAccelerator işlevine geçirilen hızlandırıcı tablosunun tanıtıcısı, bir iş parçacığı için hangi hızlandırıcı tablosunun etkin olduğunu belirler. Etkin hızlandırıcı tablosu, TranslateAcceleratorfonksiyonuna farklı bir hızlandırıcı tablo tanıtıcısı geçirilerek istenirse değiştirilebilir.

Accelerator-Table Oluşturma

Bir uygulama için hızlandırıcı tablosu oluşturmak için birkaç adım gerekir. İlk olarak, hızlandırıcı tablosu kaynakları oluşturmak ve bunları uygulamanın yürütülebilir dosyasına eklemek için bir kaynak derleyicisi kullanılır. Çalışma zamanında, LoadAccelerators işlevi hızlandırıcı tablosunu belleğe yüklemek ve hızlandırıcı tablosunun tanıtıcısını almak için kullanılır. Bu tanıtıcı, hızlandırıcı tablosunu etkinleştirmek için TranslateAccelerator işlevine geçirilir.

Ayrıca, ACCEL yapılarından oluşan bir dizi CreateAcceleratorTable işlevine geçirilerek çalışma zamanında uygulama için bir hızlandırıcı tablosu da oluşturulabilir. Bu yöntem, uygulamada kullanıcı tanımlı hızlandırıcıları destekler. LoadAccelerators işlevi gibi, CreateAcceleratorTable de hızlandırıcı tablosunu etkinleştirmek için TranslateAccelerator geçirilebilen bir hızlandırıcı tablo tutamacını döndürür.

Sistem,LoadAccelerators tarafından yüklenen veya CreateAcceleratorTabletarafından oluşturulan hızlandırıcı tablolarını otomatik olarak yok eder. Ancak bir uygulama, DestroyAcceleratorTable işlevini çağırarak artık gerekli olmayan hızlandırıcı tablolarını yok ederek çalışırken kaynakları boşaltabilir.

Mevcut bir hızlandırıcı tablosu kopyalanabilir ve değiştirilebilir. Mevcut hızlandırıcı tablosu, CopyAcceleratorTable işlevi kullanılarak kopyalanır. Kopya değiştirildikten sonra, CreateAcceleratorTableçağrılarak yeni hızlandırıcı tablosunun tanıtıcısı alınır. Son olarak işaretçi, yeni tabloyu etkinleştirmek üzere TranslateAccelerator'ye iletilir.

Hızlandırıcı Tuş Vuruşu Atamaları

Hızlandırıcıyı tanımlamak için ASCII karakter kodu veya sanal anahtar kodu kullanılabilir. ASCII karakter kodu, hızlandırıcının büyük/küçük harfe duyarlı olmasını sağlar. Bu nedenle, ASCII "C" karakterinin kullanılması hızlandırıcıyı ALT+c yerine ALT+C olarak tanımlar. Ancak büyük/küçük harfe duyarlı hızlandırıcıların kullanılması kafa karıştırıcı olabilir. Örneğin, CAPS LOCK tuşu veya SHIFT tuşu devre dışıysa ALT+C hızlandırıcısı oluşturulur, ancak her ikisi de çalışmıyorsa oluşturulmaz.

Genellikle hızlandırıcıların büyük/küçük harfe duyarlı olması gerekmez, bu nedenle çoğu uygulama ASCII karakter kodları yerine hızlandırıcılar için sanal anahtar kodları kullanır.

Hızlandırıcı, kullanıcının kafasını karıştırabilecek anımsatıcıyı geçersiz kıldığı için uygulamanın menü anımsatıcılarıyla çakışan hızlandırıcılardan kaçının. Menü anımsatıcıları hakkında daha fazla bilgi için bkz. Menüler.

Bir uygulama, sistem hızlandırıcısı tablosunda da tanımlanan bir hızlandırıcı tanımlarsa, uygulama tanımlı hızlandırıcı sistem hızlandırıcısını geçersiz kılar, ancak yalnızca uygulama bağlamında geçersiz kılar. Ancak sistem hızlandırıcısının kullanıcı arabiriminde standart rolünü gerçekleştirmesini engellediği için bu uygulamadan kaçının. Sistem genelindeki hızlandırıcılar aşağıdaki listede açıklanmıştır:

Hızlandırıcı Açıklama
ALT+ESC Sonraki uygulamaya geçer.
ALT+F4 Bir uygulamayı veya pencereyi kapatır.
ALT+TİRE Belge penceresi için Penceresi menüsünü açar.
ALT + PRINT SCREEN Etkin penceredeki bir görüntüyü panoya kopyalar.
ALT+ARA ÇUBUĞU Uygulamanın ana penceresi için Penceresi menüsünü açar.
ALT+TAB Sonraki uygulamaya geçer.
CTRL+ESC Başlangıç menüsüne geçer.
CTRL+F4 Etkin grup veya belge penceresini kapatır.
F1 Varsa uygulamanın yardım dosyasını başlatır.
YAZDıRMA EKRANı Ekrandaki bir görüntüyü panoya kopyalar.
SHIFT+ALT+TAB Önceki uygulamaya geçer. Kullanıcının SEKME tuşuna basarken ALT+SHIFT tuşlarına basıp basılı tutması gerekir.

 

Hızlandırıcılar ve Menüler

Hızlandırıcı kullanmak menü öğesi seçmekle aynıdır: Her iki eylem de sistemin ilgili pencere yordamına WM_COMMAND veya WM_SYSCOMMAND iletisi göndermesine neden olur. WM_COMMAND iletisi, pencere yordamının iletinin kaynağını belirlemek amacıyla inceleyen bir tanımlayıcı içerir. Bir hızlandırıcı WM_COMMAND iletisini oluşturduysa, tanımlayıcı hızlandırıcıya aittir. Benzer şekilde, bir menü öğesi WM_COMMAND iletisini oluşturduysa, tanımlayıcı menü öğesinin tanımlayıcısıdır. Hızlandırıcı bir menüden komut seçmek için bir kısayol sağladığından, uygulama genellikle hızlandırıcıya ve ilgili menü öğesine aynı tanımlayıcıyı atar.

Uygulama, bir hızlandırıcı WM_COMMAND iletisini ilgili menü öğesi WM_COMMAND iletiyle tam olarak aynı şekilde işler. Ancak, WM_COMMAND iletisi, hızlandırıcıların ilgili menü öğelerinden farklı işlenmesi gerektiğinde iletinin bir hızlandırıcıdan mı yoksa bir menü öğesinden mi kaynaklandığını belirten bir bayrak içerir. WM_SYSCOMMAND iletisi bu bayrağı içermiyor.

Tanımlayıcı, hızlandırıcının bir WM_COMMAND veya WM_SYSCOMMAND iletisi oluşturup oluşturmadığını belirler. Tanımlayıcı, Sistem menüsündeki bir menü öğesiyle aynı değere sahipse, hızlandırıcı bir WM_SYSCOMMAND iletisi oluşturur. Aksi takdirde, hızlandırıcı bir WM_COMMAND iletisi oluşturur.

Hızlandırıcının tanımlayıcısı menü öğesiyle aynıysa ve menü öğesi griyse veya devre dışıysa, hızlandırıcı devre dışı bırakılır ve WM_COMMAND veya WM_SYSCOMMAND iletisi oluşturmaz. Ayrıca, karşılık gelen pencere simge durumuna küçültülmüşse hızlandırıcı bir komut iletisi oluşturmaz.

Kullanıcı bir menü öğesine karşılık gelen bir hızlandırıcı kullandığında, pencere yordamı, kullanıcı menü öğesini seçmiş gibi, WM_INITMENU ve WM_INITMENUPOPUP iletilerini alır. Bu iletileri işleme hakkında bilgi için bkz. Menüler.

Menü öğesine karşılık gelen hızlandırıcı, menü öğesinin metnine eklenmelidir.

Kullanıcı Arayüz Durumu

Windows, uygulamaların kullanıcı arabirimindeki çeşitli özellikleri gizlemesini veya göstermesini sağlar. Bu ayarlar kullanıcı arabirimi durumu olarak bilinir. Kullanıcı arabirimi durumu aşağıdaki ayarları içerir:

  • odak göstergeleri (düğmelerdeki odak dikdörtgenleri gibi)
  • klavye hızlandırıcıları (denetim etiketlerindeki alt çizgilerle gösterilir)

Bir pencere, kullanıcı arabirimi durumunda değişiklik istemek için ileti gönderebilir, kullanıcı arabirimi durumunu sorgulayabilir veya alt pencereleri için belirli bir durumu zorunlu kılabilir. Bu iletiler aşağıdaki gibidir.

İleti Açıklama
WM_CHANGEUISTATE Kullanıcı arabirimi durumunun değişmesi gerektiğini gösterir.
WM_QUERYUISTATE Bir pencere için kullanıcı arabirimi durumunu alır.
WM_UPDATEUISTATE Kullanıcı arabirimi durumunu değiştirir.

 

Varsayılan olarak, üst seviye pencerenin tüm alt pencereleri, ebeveynleriyle aynı kullanıcı arabirimi durumuyla oluşturulur.

Sistem, iletişim kutularındaki denetimler için kullanıcı arabirimi durumunu işler. İletişim kutusu oluşturma sırasında sistem kullanıcı arabirimi durumunu buna göre başlatır. Tüm alt kontroller bu durumu devralır. İletişim kutusu oluşturulduktan sonra sistem kullanıcının tuş vuruşlarını izler. Kullanıcı arabirimi durumu ayarları gizliyse ve kullanıcı klavyeyi kullanarak geziniyorsa, sistem kullanıcı arabirimi durumunu güncelleştirir. Örneğin, kullanıcı odağı bir sonraki denetime taşımak için Sekme tuşuna basarsa, sistem odak göstergelerini görünür hale getirmek için WM_CHANGEUISTATE çağırır. Kullanıcı Alt tuşuna basarsa, sistem klavye hızlandırıcılarını görünür hale getirmek için WM_CHANGEUISTATE çağırır.

Denetim, içerdiği kullanıcı arabirimi öğeleri arasında gezinmeyi destekliyorsa kendi kullanıcı arabirimi durumunu güncelleştirebilir. Denetim, ilk kullanıcı arabirimi durumunu almak ve önbelleğe almak için WM_QUERYUISTATE çağırabilir. Denetim bir WM_UPDATEUISTATE iletisi aldığında kullanıcı arabirimi durumunu güncelleyebilir ve ardından üst öğesine bir WM_CHANGEUISTATE iletisi gönderebilir. Her pencere, genel pencereye ulaşana kadar iletiyi ana pencereye göndermeye devam eder. Üst düzey pencere, WM_UPDATEUISTATE iletisini pencere ağacındaki pencerelere gönderir. Bir pencere WM_CHANGEUISTATE iletisini geçirmezse, en üst düzey pencereye ulaşmaz ve kullanıcı arabirimi durumu güncelleştirilmez.