İmleç Görüntüsünü Ayarlama

imleci, farenin veya diğer işaret cihazının konumunu gösteren küçük resimdir. Birçok uygulama, kullanıcıya geri bildirim sağlamak için imleç görüntüsünü değiştirir. Gerekli olmasa da, uygulamanıza güzel bir cila ekler.

Windows, sistem imleçleri olarak adlandırılan bir dizi standart imleç görüntüsü sağlar. Bunlar ok, el, I kirişi, kum saati (artık dönen bir daire) ve diğerleridir. Bu bölümde sistem imleçlerinin nasıl kullanılacağı açıklanmaktadır. Özel imleçler oluşturma gibi daha gelişmiş görevler için bkz. İmleçler.

WNDCLASS veya WNDCLASSEX yapısının hCursor üyesini ayarlayarak imleci bir pencere sınıfıyla ilişkilendirebilirsiniz. Aksi takdirde, varsayılan imleç ok şeklindedir. Fare bir pencerenin üzerine geldiğinde, pencere bir WM_SETCURSOR iletisi alır (başka bir pencere fareyi yakalamadığı sürece). Bu noktada, aşağıdaki olaylardan biri gerçekleşir:

  • Uygulama imleci ayarlar ve pencere yordamı true döndürür.
  • Uygulama hiçbir şey yapmaz ve WM_SETCURSOR'i DefWindowProc'ye iletir.

İmleci ayarlamak için bir program aşağıdakileri yapar:

  1. İmleci belleğe yüklemek için LoadCursorçağırır. Bu işlev, imleç için bir tutamaç döndürür.
  2. SetCursor çağırır ve imleç tutamacını geçirir.

Aksi takdirde, uygulama WM_SETCURSORDefWindowProcgeçirirse, DefWindowProc işlevi imleç görüntüsünü ayarlamak için aşağıdaki algoritmayı kullanır:

  1. Pencerenin üst öğesi varsa, işlenmek üzere WM_SETCURSOR iletisini üst öğeye iletin.
  2. Aksi takdirde, pencerenin bir sınıf imleci varsa, imleci sınıf imlecine ayarlayın.
  3. Sınıf imleci yoksa, imleci ok imlecine ayarlayın.

LoadCursor işlevi bir kaynaktan özel bir imleç veya sistem imleçlerinden birini yükleyebilir. Aşağıdaki örnekte, imlecin önceden tanımlanmış sistem bağlantısı seçme imlecine nasıl ayarlanacağı gösterilmektedir.

    LPCTSTR cursor = IDC_HAND;
    hCursor = LoadCursor(NULL, cursor);
    SetCursor(hCursor);

İmleci değiştirirseniz, WM_SETCURSOR iletisini kesmediğiniz ve imleci yeniden ayarlamadığınız sürece, bir sonraki fare hareketinde imleç görüntüsü sıfırlanır. Aşağıdaki kod, WM_SETCURSOR'nin nasıl işleneceğini gösterir.

    case WM_SETCURSOR:
        if (LOWORD(lParam) == HTCLIENT)
        {
            SetCursor(hCursor);
            return TRUE;
        }
        break;

Bu kod önce lParam alt 16 bitini denetler. Eğer LOWORD(lParam), HTCLIENT'ye eşitse, bu imlecin pencerenin istemci alanının üzerinde olduğu anlamına gelir. Aksi takdirde imleç, istemci olmayan alanın üzerindedir. Genellikle, imleci yalnızca istemci alanı için ayarlamanız ve Windows'un imleci istemci olmayan alan için ayarlamasına izin vermelisiniz.

Sonraki

Kullanıcı Girişi: Genişletilmiş Örnek